2008-09-23 39 views
16

Chỉ cần tự hỏi làm thế nào bạn sẽ làm điều này. Bạn có một số loại quy trình được quét qua tất cả các hành động diễn ra trong X phút qua không? Bạn có kích hoạt kiểm tra cập nhật huy hiệu mỗi khi có bất kỳ hành động nào diễn ra (bỏ phiếu, bỏ phiếu, bỏ phiếu, v.v.) không? Có vẻ như đây sẽ là một quá trình tương đối đắt tiền theo cách này hay cách khác.Bạn sẽ triển khai hệ thống huy hiệu như StackOverflow như thế nào?

+0

Gửi cho Jeff Atwood một email, anh ấy có thể sẽ cho bạn biết họ đã thực sự làm như thế nào và nếu tôi nhớ chính xác nó có thể đã được thảo luận gián tiếp trong podcast hoặc có thể là một trong các blog. Tôi quên mất. –

Trả lời

12

Có lẽ một chút của cả hai. Tôi có lẽ sẽ xếp hàng kiểm tra mỗi lần một hành động xảy ra và có một quá trình đi xuống hàng đợi và xác định xem huy hiệu đã kiếm được cho mỗi lần kiểm tra hay chưa. Bằng cách này, đây là thời gian bán thực mà không khiến các trang mất nhiều thời gian hơn để tải. Trong thực tế, ở đây trên StackOverflow tôi đã nhận thấy sự chậm trễ giữa thời điểm huy hiệu kiếm được và khi hệ thống nhận ra nó, vì vậy trang web này có thể sử dụng cùng một cách tiếp cận.

+0

Lưu ý rằng nó thực sự KHÔNG phải là thời gian thực trên tràn ngăn xếp - mất một vài huy hiệu của tôi làm mới một vài trang để hiển thị. –

+1

SO sử dụng một hack liên quan đến callbacks bộ nhớ cache máy chủ để loại bắt chước một nhiệm vụ định kỳ. Nó được thảo luận trong một trong các podcast. –

+0

+1 Tôi vừa nhận ra rằng bạn cũng có thể tính toán nó trên mọi hành động, nhưng thực hiện nó trong một chuỗi riêng biệt để không làm chậm hiệu suất trang web. –

0

Cá nhân tôi sẽ có một công việc cron hoặc tương tự đã xử lý những thông tin này một cách thường xuyên. Có lẽ trên một hệ thống dòng chảy "cron giả", nơi tôi có một cuộc gọi hình ảnh vô hình và đi qua "cron stack" nội bộ để xem những gì cần phải được thực hiện.

Rất nhiều các phù hiệu tuy nhiên, không nên cần điều đó nhiều việc phải làm với họ ... họ sẽ có thể được thực hiện với một truy vấn độc đáo crafted

+1

Ảnh 1x1 trống là năm 2002. Có những cách tốt hơn trong năm 2009, nhiều trong số đó được đề cập trong chuỗi này. – phidah

2

tôi sẽ không kích hoạt cập nhật mỗi khi ai đó đã làm một hành động; những gì tôi sẽ làm thay vào đó là một quá trình hàng loạt xem xét mọi hành động được thực hiện trong phút cuối cùng, tổng hợp mọi thứ với trạng thái "phút trước" của mọi người dùng và đưa ra các huy hiệu mới dựa trên đó.

+0

tại sao tất cả các phiếu bầu âm? –

2

Sử dụng cơ sở dữ liệu có 'móc/kích hoạt'. Sau đó, bạn có thể kích hoạt một sự kiện trên một số thay đổi trạng thái, ví dụ, bạn có một bảng ghi lại tất cả các phiếu bầu trên một câu trả lời nhất định.

Bạn biết rằng Trả lời> 10 Trả lời == "Câu trả lời hay", vì vậy bạn chỉ cần đặt trình kích hoạt xảy ra khi LAST_STATE = 9 và NEXT_STATE = 10 và ENTRY_AWARDED_GOODANSWER = false.

Postgresql là một cơ sở dữ liệu như vậy hỗ trợ các trình kích hoạt như vậy.

đọc thêm ở đây: http://www.postgresql.org/docs/8.1/static/triggers.html

+0

Giao dịch có cập nhật số Phiếu Bầu Cử đang chờ trong khi trình kích hoạt đang thực thi không? Hoặc là việc thực hiện kích hoạt không đồng bộ? –

+0

Trong postgres MVCC của nó. Tôi không hiểu cách thức hoạt động, nhưng 2 người có thể sử dụng cùng hàng và không gặp vấn đề gì. Kích hoạt/xu hướng/xảy ra như là một phần của truy vấn kích hoạt, đơn giản bằng cách thực hiện đúng lệnh trong trigger đúng có thể chấm dứt sự thay đổi xảy ra. –

1

tôi có lẽ muốn sử dụng một Broker Queue Service trong SQL Server để gửi những hành động vào các thủ tục hàng đợi và kích hoạt nhặt một loạt các hành động tại một thời điểm và chạy nó chống lại một Badge thủ tục kiểm tra. Ví dụ: Công cụ quy tắc huy hiệu.

0

Học viện Khan có nhiều thời gian để trao giải huy hiệu trong thời gian thực. Họ cho rằng điều quan trọng đối với cảm giác của trang web. Họ cũng có một công việc hàng loạt định kỳ đánh giá lại dữ liệu và giải thưởng bất kỳ huy hiệu bị bỏ lỡ nào.

Ben Kamens, Badges on App Engine: Implementing a real-time.... Blog đã được xuất bản vào tháng 1 năm 2011, vì vậy mọi thứ đã thay đổi kể từ đó.

Các vấn đề liên quan