Tôi đang làm việc trên một trò chơi nhiều người chơi thời gian thực sẽ yêu cầu cơ sở dữ liệu (đối với các tính năng như hồ sơ người chơi, bạn bè, mở khóa, tin tức, v.v.) Đây là trò chơi PC tiêu chuẩn (không dựa trên trình duyệt) và sẽ sử dụng máy chủ-máy khách ngành kiến trúc. Tôi mới sử dụng cơ sở dữ liệu và đã thực hiện một số nghiên cứu trong vài ngày qua khi tôi vấp phải cuộc tranh luận sôi nổi: RDBMS vs NoQuery. Hiện tại tôi đang nghiêng về NoQuery nhưng sau khi đọc về cách sử dụng cho từng (RDBMS và NoQuery), tôi rất muốn sử dụng cả hai. Tôi biết điều đó có vẻ lạ, nhưng hãy để tôi giải thích tình huống của mình:
Nhóm của tôi có gói chia sẻ webhosting cung cấp lưu trữ và băng thông myQuery không giới hạn, điều đáng chú ý duy nhất là chúng tôi chỉ có thể mở 25 kết nối cùng một lúc (quy tắc lưu trữ được chia sẻ). Tôi đang có ý định sử dụng điều này cho trang web của mình (một cách sử dụng thông thường không nghi ngờ gì) để đăng cập nhật tin tức, hỗ trợ các tính năng cộng đồng (như bình luận, tải lên fan art, v.v.) và tương tự. Đó là tất cả tốt và tốt - nhưng! đây là nơi mọi thứ trở nên thú vị ... Tôi muốn hiển thị cùng thông tin được đăng trên trang web của mình, trong trò chơi. Điều này có nghĩa là sử dụng myQuery cho cả trang web và trò chơi của tôi. Ngoài các bài đăng tin tức và những thứ tương tự, tôi dự định sử dụng nó trong trò chơi cho những thứ như trò chuyện và danh sách máy chủ. Tôi lo ngại về quy tắc 25 kết nối đó.
Điều đó dẫn tôi đến câu hỏi số 1: Điều này có hiệu quả không và có cách nào khác tốt hơn không?
Bây giờ bên cạnh điều này, tôi đã đọc về việc NoQuery hoạt động tốt như thế nào và phù hợp với các trò chơi thời gian thực (tôi có thể sai, tôi đã trải qua một cuộc chiến rực lửa RDBMS vs NoQuery để đến đây và có lẽ bị đốt cháy). Về cơ bản, tôi muốn sử dụng MongoDB cho tất cả dữ liệu đối tượng trò chơi của mình.
Và một lần nữa, sẽ rất hữu ích nếu tôi cung cấp một số ngữ cảnh: Tôi đã tìm thấy một máy chủ lưu trữ (MongoLab) cung cấp gói MongoDB 240 MB miễn phí, tôi dự định sử dụng cho đến khi cần nâng cấp. Với 240 MB, tôi đã tính toán rằng tôi sẽ có thể lưu trữ khoảng 60.000 người chơi (nếu mỗi người chơi khoảng 4KB và chúng tôi bỏ qua những thứ khác có thể được lưu trữ). Không gian lưu trữ và phải trả nhiều tiền hơn trong tương lai (nếu trò chơi của chúng tôi thành công) không phải là vấn đề. Lý do duy nhất hiện tại tôi có ý định sử dụng MongoDB cho tất cả dữ liệu đối tượng trò chơi của mình là vì tần suất dữ liệu của đối tượng trò chơi này sẽ được truy cập (chẳng hạn như bất cứ khi nào người chơi bị giết, nhặt một vật phẩm, bắn súng, v.v.) cũng giống như các tài liệu không có lược đồ chuyển tiếp thẳng (giúp cho việc ánh xạ dữ liệu đối tượng trò chơi dễ dàng hơn). Tôi nên lưu ý rằng, tại một thời điểm,
Tôi dự định sử dụng cùng MongoDB trong trang web của mình, để hiển thị thông tin hồ sơ người chơi (Tôi không quan tâm đến tính nhất quán hoàn toàn, một số chậm trễ từ các bản cập nhật trong trò chơi là ổn). Điều này dẫn tôi đến câu hỏi thứ hai của tôi, Câu hỏi số 2: Đây có phải là một ý tưởng tốt hay tôi nên làm gì tốt hơn?
Trò chơi sẽ có trải nghiệm khởi động tương tự như thế này:
- Đăng nhập ứng dụng khách (MongoDB)
- Khách hàng đang ở trang chủ trong trò chơi với các phòng trò chuyện (MySQL)
- Máy khách đi đến danh sách máy chủ (MySQL)
Máy khách kết nối với máy chủ và chơi trong đó
Máy chủ truyền thông cập nhật cho tất cả người chơi (MongoDB)
Đây chỉ là cách tôi tưởng tượng nó sẽ hoạt động. Điều này có vẻ tốt với bạn, hoặc bạn có gợi ý về cách cải thiện kế hoạch này không?