3

私は Python を初めて使用し、その基礎を 3 か月間研究し、型、関数、およびアルゴリズムを学習しています。現在、GAE フレームワークを使用した Web アプリ開発の実践を開始しています。

目標: Web アプリ全体のすべての .py ファイルからアクセスできる非常に大きなディクショナリを用意します。辞書を複数回保存したり、誰かがアプリの URL にアクセスするたびに再作成したりする必要はありません。

単純な DB テーブルをディクショナリにレンダリングしたいのですが、メモリ内にあるため速度が向上することを期待しています。

また、インメモリ DAWG - TRIE を作成する予定です。

ページが呼び出されるたびにこの辞書を作成したくありません。一度メモリに保存し、そこに保持して、すべてのセッションで使用およびアクセスし、可能であれば変更も行います。

どうすればこれを達成できますか?シンプルなインメモリ DB のようですが、実際には Python 辞書ですか?

ありがとうございました。

4

3 に答える 3

7

memcacheを使用します。pickle された dict を memcache に保存できますが、キー/値を直接 memcache に保存することもできます。値がまだ memcache にない場合にデータ ストアから確実に値をロードするラッパー クラスを記述します。

または、さらに良いのは、 memcache に値を自動的にキャッシュするndbを使用することです。この方法では、データ ストアから値をクエリするだけで、ndb がメモリ内の値を (複数の要求にわたって) 自動的にキャッシュします。

于 2012-06-13T11:35:17.257 に答える
0

私はこれを突き刺して、標準のpythonシェルフモジュールを提案します。これにより、dbmファイルに裏打ちされた単純な永続辞書が提供されます。

特に並行性に関連するいくつかの注意事項があります。ライトバックが有効になっている場合はキャッシュを提供しますが、メモリ消費の問題が発生する可能性があります。もう1つの制限は、キーは文字列でなければならないことです。

それでも、一見の価値があるかもしれません。それは間違いなく「純粋なPythonハック」の説明を満たしています。

簡単な例:

import shelve

d = shelve.open('my_shelf')
for i in range(100000):
    d[str(i)] = 'Item %s' % i
d.close()
d = shelve.open('my_shelf')
>>> d['50000']
'Item 50000'
于 2012-06-13T12:19:08.280 に答える
-2

これは不可能です (外部サービスがなければ)。DB は、1 回のリクエストよりも長くデータを保存するために作成されます。あなたができることは、ユーザーセッションの "in" 辞書を安全にすることですが、それはお勧めしません。何百万ものエントリがない限り、すべての DB は sqlite でさえ十分に高速です。

于 2012-06-13T11:30:06.280 に答える