2

私のDjangoアプリが定期的に取得する必要があるデータのやや大きなセット(〜30000レコード)を扱っています。このデータは実際には頻繁には変更されず (おそらく月に 1 回程度)、変更はバッチで行われるため、到達しようとしている DB ソリューションはほぼ読み取り専用です。

このデータセットの合計サイズは約 20 MB です。最初に考えたのは、メモリに (おそらくオブジェクトのシングルトンとして) ロードして、その方法で非常に高速にアクセスできるということです。ディスク I/O を回避してフェッチ時間を効率的に短縮する方法。ここで memcached が最適なソリューションでしょうか? それとも、インメモリ SQLite DB にロードする方がよいでしょうか? それとも、単にインメモリ変数としてアプリの起動時にロードしますか?

4

2 に答える 2

2

最も簡単な解決策は、すべてのオブジェクトをメモリにロードすることだと思います

cached_records = Record.objects.all()
list(cached_records) # by using list() we force Django load all data into memory

その後、アプリでこれを自由に使用cached_recordsできます。また、 などの QuerySet メソッドも使用できますfilter。ただしfilter、キャッシュされたレコードでは、DB クエリがトリガーされます。

条件に基づいてこれらのレコードをクエリする場合は、キャッシュを使用することをお勧めします。

于 2013-10-11T04:33:17.930 に答える
0

ディスク IO は本当にアプリケーションのパフォーマンスのボトルネックになり、ユーザー エクスペリエンスに影響しますか? そうでなければ、この種の最適化は必要ないと思います。

オペレーティング システムと RDBMS (MySQL 、PostgresQL など) は、今日では非常にスマートです。ディスク内のデータは、RDBMS と OS によって自動的にメモリにキャッシュされます。

于 2013-10-11T06:27:02.690 に答える