全国的なエンジニアリング コンテストをサポートするアプリを再実装し、ローカル サーバーからクラウドに移行しています。
チームが現在どこに立っているかをチームに伝えるために、クエリの形式は次のとおりです。
select 1 + count(*) from team where where score < ?
チームのスコアは非常に動的に変化します。最大 200 万のチームが存在する可能性があり、これらのクエリを 1 秒あたり少なくとも 10 件処理する必要があります。
オリジナルは、チーム/スコア レコードの別のバークレー DB を使用することにより、必要なパフォーマンスを取得します (実際には 1999 のハードウェアで既に行われています)。Berkeley DB には、まさに適切な機能を提供する「レコード番号」機能があり、非常に高速です。
Heroku は明らかに Berkeley DB をサポートする方法がありません。彼らの標準 DB である PostgreSQL はselect count(*)
、完全なテーブルまたはインデックス スキャンを実行しますが、これは遅すぎます。
続行する方法についてのアイデアはありますか?私は Heroku に慣れていませんが、何らかのクラウド ソリューションに移行する必要があります。