Nếu bạn đang kiến trúc một ứng dụng cho loại dòng lớn này, bạn sẽ cần phải loại bỏ các thành phần thiết yếu của nó đến mức tối thiểu tuyệt đối.
Sử dụng ngăn xếp Rails đầy đủ cho loại cường độ đó không thực sự thiết thực, cũng không cần thiết. Sẽ tốt hơn nếu xây dựng một lớp Rack rất mỏng để xử lý việc bỏ phiếu bằng cách thực hiện các cuộc gọi DB trực tiếp, bỏ qua ngay cả một ORM, về cơ bản là một trình bao bọc xung quanh một câu lệnh INSERT
. Đây là một cái gì đó Sinatra và Sequel, phục vụ như một máy phát điện truy vấn hiệu quả, có thể giúp đỡ.
Bạn cũng nên đảm bảo điều chỉnh cơ sở dữ liệu của mình đúng cách, đồng thời chạy nhiều lần kiểm tra tải để đảm bảo nó hoạt động như mong đợi, với tỷ lệ lợi nhuận cao hơn.
Thực hiện 10.000 cuộc gọi DB trong một phút không phải là một vấn đề lớn, mỗi cuộc gọi sẽ chỉ mất một phần nhỏ của một phần nghìn giây trên một ngăn xếp được điều chỉnh đúng cách. Memcached có thể cung cấp hiệu suất cao hơn đặc biệt là nếu kết quả không được dự định là vĩnh viễn. Memcached có một toán tử tăng nguyên tử, chính xác là những gì bạn đang tìm kiếm khi chỉ đơn giản là đếm các phiếu. Redis cũng là một cửa hàng tạm thời rất có khả năng.
Một ý tưởng khác là xóa toàn bộ DB và viết một quy trình máy chủ liên tục nói lên một giao thức dựa trên JSON đơn giản. Eventmachine rất tốt cho việc ném những thứ này lại với nhau nếu bạn cam kết với Ruby, cũng như NodeJS nếu bạn sẵn sàng xây dựng một máy chủ kiểm đếm chuyên dụng trong JavaScript.
10.000 hoạt động trong một phút có thể dễ dàng đạt được ngay cả trên phần cứng khiêm tốn bằng cách sử dụng một quy trình máy chủ chuyên dụng mà không phải trả phí cho toàn bộ ngăn xếp DB.
Bạn sẽ phải đảm bảo rằng phạm vi của bạn được xác định rất tốt để bạn có thể kiểm tra và lạm dụng nghiêm túc việc triển khai của mình trước khi triển khai.
Kể từ những gì bạn đang mô tả là, ở lõi rất, một cái gì đó tương đương với một tra cứu băm, mã cần thiết chỉ đơn giản là:
contest = @contest[contest_id]
unless (contest[:voted][ip])
contest[:voted][ip] = true
contest[:votes][entry_id] += 1
end
Chạy này vài trăm ngàn lần trong một giây là hoàn toàn thực tế, do đó, chi phí duy nhất sẽ bao quanh một lớp JSON xung quanh nó.
Nhìn vào NoSQL dbs và 10k viết một phút là khoảng 165 lần viết/giây. Nó không nhiều đâu. – Viktor
Tôi đã không nghĩ về điều đó, bạn là người nào đáng tin cậy nhất? –
MongoDB cho NoSQL. Nếu bạn đang sử dụng MySQL, hãy sử dụng bảng MyISAM. – Dex