10

大きなkey-valueペアダンプがあり、django-Pythonwebappを検索する必要があります。

したがって、次のオプションがあります。

  • json dumpとして保存し、pythondictとしてロードします。
  • それをdump.pyに保存し、そこからdictをインポートします。
  • この問題にはいくつかのターゲットシステムを使用してください:[これらは本当にこのユースケースを対象としていますか?]
    • Mem-cache
    • Redis
    • 他のオプションはありますか?

上からどちらが正しい道ですか?

memcacheとredisをどのように比較しますか?

アップデート:

  • 私の辞書のサイズは約5MBで、時間の経過とともに大きくなります。
  • Redis / Memcacheを使用すると、毎回ソケットをヒットするオーバーヘッドが追加されます。そのため、dump.pyはメモリへのロードに時間がかかるため、より適切になりますが、その後はメモリルックアップのみを実行します。

  • django-serverを再起動してリロードする必要があるため、 dump.pyが問題になることを考慮して、辞書を毎日更新する必要があります。これは、 redisとmemcacheでその場で反映されると思います。

  • 大量のデータがあり、頻繁にルックアップする必要がある場合にのみ、redisのようなシステムを使用します。その場合、ソケットはオーバーヘッドを与えるので、どのように利点を実現しますか?

これについてのあなたの経験を共有してください!

4

4 に答える 4

7

MemcacheまたはREDISを選択する場合、ローエンドハードウェアで1秒あたり数万のリクエストが可能です(たとえば、C2D Q8300でのREDISの場合は80,000リクエスト/秒)。レイテンシーは1msをはるかに下回っています。あなたは毎秒20リクエストのオーダーで何かをしていると言っているので、パフォーマンスに関してはそれは本当に問題ではありません。

オプションを選択dump.pyした場合、リロードするためにDjangoを再起動する必要はありません。あなたはあなた自身の簡単なリローダーを作ることができます:

dump.py:

[ dict code...]

mtime = 0

djagoコード:

import dump #this does nothing if it's already loaded
stat = os.stat(dump_filename)
if(stat.mtime > dump.mtime):
    reload(dump)
    dump.mtime = stat.mtime

于 2012-05-15T09:51:38.417 に答える
2

Memcachedは素晴らしい製品ですが、私の本ではRedisによって打ち負かされています。永続性など、memcachedにはない多くの機能を提供します。

また、ハッシュなどのより複雑なデータ構造も提供します。あなたの特定のデータダンプは何ですか?それはどのくらいの大きさで、どのくらいの大きさ/どのような種類の値ですか?

于 2012-05-15T06:23:08.833 に答える
1

過去に同様の問題について、私はdump.pyのアイデアを使用しました。他のすべてのデータ構造では、ある種類のオブジェクトをPythonオブジェクトに変換するためのレイヤーが必要になると思います。ただし、これはデータサイズと処理するデータの量に依存すると思います。Memcacheとredisは、非常に大きなデータセットや正規表現ベースのルックアップなどに関しては、インデックス作成とルックアップが優れている必要があります。だから私の推薦は

json-httpを介して他のサービスpythonファイルにデータを提供している場合-データ構造が大きすぎず、特別な種類のルックアップが必要ない場合

memcacheとredis-データが非常に大きくなった場合

于 2012-05-15T06:23:25.387 に答える
1

5Mbはそれほど大きくありません。処理中はメモリに保持することができます。プロファイリングとテストからそのアプローチがニーズを満たしていないことが明らかになるまで、保持することをお勧めします。常に可能な限り単純なことをしてください。

ソケット通信自体は、多くのオーバーヘッドをもたらしません。UNIXドメインソケットを使用することで、おそらく少し元に戻すことができます。いずれにせよ、データを処理し続けていない場合は、ある種のパイプを介して話し合う必要があります。

于 2012-05-15T09:31:24.737 に答える