Tôi muốn triển khai điểm số cao trên internet cho trò chơi của mình. Và cung cấp phản hồi cho người chơi nơi họ có (không chỉ top100 hoặc một cái gì đó như thế). Trong SQL bình thường nó sẽ trông như thế:Cách triển khai điểm số cao trên Internet trong Google App Engine
SELECT COUNT (*) FROM Điểm ĐÂU điểm>: newUsersPoints
và GQL có một cái gì đó tương tự
db.GqlQuery ("SELECT * FROM Điểm ĐÂU điểm >: 1 ", newUsersPoints) .count()
nhưng vì count() chỉ giới hạn ở 1000, nó sẽ không hữu ích trong trường hợp của tôi. Bạn có ý tưởng nào về cách thực hiện điều này không?
Tôi có hai
Đầu tiên:
Sử dụng quầy sharding ý tưởng (http://code.google.com/intl/pl/appengine/articles/sharding_counters.html) Tạo mới "bảng" mà các cửa hàng có bao nhiêu điểm là trong một số phạm vi (from_points, to_points)
Tổng hợp tất cả các quầy từ bảng trên, trong đó dải ô.to_points < newUsersPoints
Tìm số điểm lớn hơn điểm số trong phạm vi mà điểm số mới là db.GqlQuery ("SELECT * FROM Score WHERE points>: 1 AND points> =: 2 AND points <: 3", newUsersPoints, range.from_points , range.to_points) .count() + sumfrom2
Find phạm vi trong đó điểm mới là trong và tăng truy cập của nó
Chia dao động mà truy cập lớn hơn 1000 (hoặc 999) để 3. wouldn không đạt đến giới hạn
Thêm điểm mới vào bảng điểm số
Điều này khá phức tạp và dễ xảy ra lỗi. Chúng tôi có thể tăng một số phạm vi và Thời gian chờ trước khi thêm điểm số. (Không giao dịch)
Thứ hai ý tưởng:
Từ bất cứ lúc nào (? Một lần mỗi ngày) sắp xếp tất cả điểm số của điểm và cung cấp cho họ những vị trí mới (kịch bản có thể thời gian chờ vì vậy chúng tôi phải làm điều đó trong khối)
Để tìm hiểu mà tại đó diễn ra điểm mới là chúng tôi chỉ làm
db.GqlQuery ("SELECT * FROM điểm ĐÂU điểm>: 1 LIMIT 1", newUsersPoints). .get() precalculated_position + 1
Bất kỳ ý tưởng nào khác?