Trước hết, Nodejs rất tuyệt vời để viết các proxy TCP ngược vào cơ sở dữ liệu NoSQL. Bạn có thể cho phép tất cả các lệnh tiêu chuẩn đi qua nhưng thay đổi / mở rộng API của chúng bằng phép thuật của riêng bạn, ví dụ:làm cho MongoDB nói HTTP hoặc CouchDB nói một giao thức nhị phân qua các ổ cắm.
Khi nói đến việc chọn một giải pháp NoSQL để lưu trữ các phần trò chơi trên bàn cờ và giám sát các chuyển động của người chơi, tôi nghĩ Redis và CouchDB là những ứng cử viên sáng giá nhất.
- CouchDB. Nó nhanh chóng, đáng tin cậy và có thể xử lý nhiều kết nối HTTP đồng thời. Đó có lẽ là lựa chọn tốt nhất vì không giống như Redis, nó có thể phát một thông báo khi tài liệu thay đổi. API thay đổi liên tục
giúp bạn có thể giám sát ứng dụng của từng người chơi để biết các thay đổi đối với bảng của họ trở nên cực kỳ đơn giản. Yêu cầu có thể trông giống như sau:
curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000
Mỗi khách hàng sẽ nhận được một đối tượng JSON trên mỗi dòng trong phản hồi bất cứ khi nào tài liệu thích hợp được thay đổi. (Và một dòng mới trống cứ sau mỗi 1000ms như một cách lưu giữ.)
- Làm lại. Nó sử dụng một giao thức dựa trên dòng đơn giản (như MemcacheD ++) để nói chuyện qua một ổ cắm và cho phép bạn lưu trữ Danh sách, Bộ, Hàm băm với các giá trị tùy ý - thậm chí là nhị phân -. Nó rất nhanh vì mọi thứ diễn ra trong bộ nhớ nhưng vẫn được lưu vào đĩa một cách không đồng bộ. Nhưng trên hết, bạn nên đánh giá nó vì nó đã có PubSub thông báo được đưa vào. Lưu ý rằng bạn sẽ phải xuất bản rõ ràng các thông báo di chuyển qua kênh mà người chơi chia sẻ vì Redis sẽ không tự động xuất bản khi khóa / giá trị thay đổi.
Vì MongoDB không có cơ chế để quan sát các thay đổi khi chúng xảy ra hoặc thực hiện pubsub nên tôi không coi đó là một lựa chọn tốt, mặc dù với nỗ lực nhiều hơn, bạn có thể làm cho nó hoạt động.
Vì vậy, để kết luận, bạn có thể thay thế "ngăn xếp LAMP lớn" bằng CouchDB, riêng Redis hoặc một trong hai được đặt sau ứng dụng nút để lọc / mở rộng các API mà họ đã cung cấp thành thứ gì đó phù hợp với trò chơi của bạn.
Chúc bạn may mắn!