2012-01-23 32 views
5

Đối với Flex trò chơi (cho nền tảng Facebook) trình duyệt của tôi dựa, Tôi đang sử dụng PHP và MySQL cho lập trình phía máy chủ và để lưu dữ liệu (sử dụng AMFPHP)Làm thế nào để thực hiện phía máy chủ bộ nhớ đệm với PHP

Vì tôi là rất mới cho cả phát triển trò chơi và PHP và tôi muốn xem trò chơi của mình đang chạy, tôi đã viết tất cả mã hóa phía máy chủ (dịch vụ amfPHP) với mã rất xấu và dơ bẩn để truy cập DB để tìm nạp, cập nhật trạng thái trò chơi (bao gồm cả người chơi thống kê và khoảng không quảng cáo).

Chắc chắn nó không hiệu quả, vì vậy tôi đã bắt đầu tìm cách tốt nhất có sẵn trong PHP để thực hiện bộ nhớ đệm. Bởi bộ nhớ đệm, tôi có nghĩa là tôi không muốn nhấn DB tất cả các thời gian để lưu trạng thái trò chơi mới nhất của người chơi nhưng chỉ lưu vào cuối phiên (khi người chơi rời khỏi ứng dụng).

Thông thường, trò chơi dòng chảy/app của tôi là như thế này

  • chơi khởi chạy ứng dụng/trò chơi từ FB
  • Xác thực
  • tải phiên người dùng (trạng thái trò chơi đã lưu trước đó) .Đây bao gồm lấy người sử dụng số liệu thống kê như bao nhiêu năng lượng, tiền xu, trải nghiệm, v.v., anh ta có, hàng tồn kho, nhiệm vụ hiện tại của mình, v.v. cũng như thông tin tĩnh như mặt hàng, phiếu mua hàng, giảm giá, v.v.
  • Cập nhật trạng thái trò chơi và khi có thay đổi trong trò chơi, phổ biến nhất khi người dùng nhấp s trên một số tòa nhà để thu thập, tiêu thụ năng lượng, thêm tiền xu, cung cấp cho kinh nghiệm hoặc phần thưởng và như vậy.

Hiện tại, có rất ít dữ liệu phổ biến được cung cấp cho tất cả người chơi, như "mặt hàng thị trường và giá của họ và nội dung đồ họa v.v." và có dữ liệu cụ thể của người chơi.

Tôi có một số ý tưởng trong đầu và tôi cần các chuyên gia giúp đỡ trong những gì tôi đang nghĩ là tốt hay xấu hoặc nếu có cách nào tốt hơn?

Lưu dữ liệu tĩnh (thường) vĩnh viễn trong bộ nhớ cache và có bảng quản trị để xóa/cập nhật Sau khi xác thực, truy xuất dữ liệu và lưu vào bộ đệm (dưới dạng đối tượng JSON) và tất cả đọc/ghi cho đến khi phiên kết thúc được thực hiện vào bộ nhớ cache, sau khi phiên kết thúc, lưu dữ liệu bộ nhớ cache vào DB.

Ở đây tôi muốn sử dụng APC. Bạn có nghĩ rằng nó là đáng tin cậy? Tôi đoán, trong trường hợp xấu nhất, khi máy chủ web treo tất cả dữ liệu bộ nhớ cache sẽ bị mất, vì vậy tôi đã nghĩ để lưu chúng trong phiên, nhưng tôi nghĩ PHP duy trì chúng trong các tệp có nghĩa là sẽ có rất nhiều/O đó là một lần nữa không được khuyến cáo? Hay điều đó có thể chấp nhận được không?

Tôi cũng nghĩ làm thế nào tốt để lưu trạng thái trò chơi trong các đối tượng được tuần tự hóa?

Trả lời

4

Bạn có hồ sơ ứng dụng của mình và xác định DB là nút cổ chai không? Dường như bạn đang cố gắng tối ưu hóa những thứ có nhiều khả năng không phải là vấn đề.

Tìm nạp dữ liệu từ DB thực sự nhanh chóng. Việc ghi vào DB có thể chậm hơn một chút, đặc biệt nếu bạn sử dụng các giao dịch. Nhưng DB vẫn có thể xử lý nhiều cuộc gọi viết/cập nhật mỗi giây một cách dễ dàng.

Có vẻ như bạn đang thực hiện một số tối ưu hóa sớm, điều này sẽ không làm giảm tính bảo mật và ổn định của toàn bộ trò chơi của bạn.Sau đó, một lần nữa bạn thực sự không muốn mất tiến bộ của người dùng, bởi vì phiên của bạn bị hủy. Tốt hơn hãy xem một cái gì đó như NoSQL sau đó.

+0

Tôi đang mong đợi khoảng 30-50 nghìn người dùng đồng thời chơi trò chơi này vào lúc cao điểm. DB sẽ vẫn khuyến khích? Cảm ơn NoSQL, nhưng tôi có thể không chọn cho nó mà có thể là một học tập khác cho tôi. –

+0

Số lượng người dùng đồng thời sẽ không quan trọng như vậy. Nó phụ thuộc vào số lượng giao dịch DB bạn sẽ nhận được ... Ngoài ra các hệ thống DB có khả năng mở rộng trong hầu hết các trường hợp. Vì vậy, trong khi mã của bạn có thể nhanh hơn một DB, nó sẽ không mở rộng cũng như một DB (nơi bạn có thể chuyển sang một DB-cluster, vv). – bummzack

+0

@ dev2dev bạn có thể xem xét PostgreSQL (miễn phí), Oracle hoặc MsSQL. Các bản vá lỗi hiệu suất quan trọng (ví dụ: trình tối ưu hóa truy vấn) chỉ trong các bản dựng thử nghiệm của MySQL vào lúc này; những thứ như một trình tối ưu hóa phong nha và các khung nhìn/bảng phân vùng tạo ra sự khác biệt lớn khi bạn có quy mô thực sự cao. –

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