3

Python で記述され、プライマリ データストアとして mysql を使用する Web アプリを実行しています。Amazon RDS に数千万行の大きなテーブルがあり、10 倍大きくなると予想しています。主キーに基づいて数百のランダムな行を選択する多くのクエリを実行します (「select * from table where id IN (ids)」のように、id は主キーです)。ときどきかなり遅くなり、30 秒以上かかります。最終的にはテーブルを分割する必要がありますが、memcache にキャッシュされた行のコピーを保持しようと考えています。select クエリを実行する前に、multi_get を memcache に送信します。私たちのワークフロー (多くの更新を実行します) を考えると、memcache バージョンにも行への変更を先制的に書き込む場合にのみ、大幅なパフォーマンスの向上が得られます。

誰かがこのようなセットアップを使用したことがあるかどうか、また、これを適切に処理する ORM や他の便利なツール (mysql バイナリ ログから変更をプルして memcache に送信するなど) があるかどうか疑問に思っています。これの最も危険な部分は、誰かが mysql で更新する memcache の行を更新するのを忘れるか、少なくとも無効にする場合です。

ありがとう!

4

1 に答える 1

0

Django での「透過的な」キャッシュの例を次に示します: https://github.com/mmalone/django-caching。ただし、この方法でのキャッシングは非常に複雑になり、すぐに複雑になる可能性があることに注意してください。

何千万もの行があり、アクセス パターンが行 ID によることが多い場合は、NoSQL ソリューションを検討することをお勧めします。すでに AWS を使用しているため、DynamoDBまたはSimpleDBの使用を検討してください。どちらも高速でスケーラブルなキー値アクセスを提供します。

于 2013-01-01T18:11:18.597 に答える