我正在重新實施應用程序以支持國家工程比賽,將其從本地服務器移至雲端。在網絡應用程序中提供快速`select count(*)`功能
爲了告訴球隊拔地而起的那一刻,查詢的形式
select 1 + count(*) from team where where score < ?
球隊的比分變化非常動態的。可能有多達200萬個團隊,我需要每秒處理至少10個這樣的查詢。
通過使用團隊/成績記錄的單獨Berkeley數據庫,原始版本獲得所需的性能(實際上它已在1999年的硬件中完成)。 Berkeley DB中有一個「記錄號」功能,它提供了正確的功能,而且速度非常快。
Heroku顯然無法支持Berkeley DB。 PostgreSQL,他們的標準數據庫,select count(*)
帶有全表或索引掃描,速度太慢。
關於如何進行的任何想法?我並不喜歡Heroku,但必須轉向某種雲解決方案。
謝謝。我認爲redis是我需要的,但是我將編輯你的答案來表達它是如何真正用來解決我的問題的。感謝指針! – Gene
聽起來對我很好!排序集合的工作,但我會用最初發布的INCR。在redis中建模數據並不少見,例如:每個團隊都有一個redis密鑰,例如:INCR團隊:,GET團隊:等 –
hgmnz
我看不到如何用INCR解決問題。我需要存儲多達10^6雙,然後能夠查詢「多少球隊得分低於X?」這些查詢發生時,這些對不斷變化。 –
Gene