1


0

データベース速度と静的辞書速度のモデル

本質的に静的な何らかの情報が必要です。 この情報の多くはありませんが、多くのオブジェクトがその情報を使用します。

そのような情報はあまりないので(いくつかの辞書といくつかのリスト)、2つのオプションがあると思いました-データベースにその情報を保持するためのモデルを作成するか、辞書/リストとして設定ファイルに書き込みます。 私の質問は-データベースまたは設定ファイルからその情報を読み取るのに速いですか? どちらの場合でも、多くの場所でその情報にアクセスできる必要があります。これは、多くのデータベース読み取り呼び出しを意味します。 どちらが速いでしょうか?

3 Answer


3


本当に変更されない場合は、通常のPython辞書を宣言するように、 `settings.py`ファイルに自由に追加してください。

ただし、通常のDjangoの方法で情報を変更できるようにするには、データベースを永続的なストレージに使用し、http://docs.djangoproject.com/en/dev/topics/cache/ [Djangoのキャッシュフレームワーク]。

通常どおりにデータをデータベースに保存し、最初にアクセスしたときにキャッシュします。

from django.core.cache import cache

def some_view_that_accesses_date(request):
  my_data = cache.get('some_key')

  if my_data is None:
    my_data = MyObject.objects.all()
    cache.set('some_key', my_data)

  ... snip ... normal view code

次のように、キャッシュに「なし」を保存しないでください。

_ キャッシュにリテラル値 None`を格納することはお勧めしません。なぜなら、格納されている None`値と、 `None`の戻り値で示されるキャッシュミスを区別できないからです。 _

http://docs.djangoproject.com/en/dev/ref/signals/#post-delete [オブジェクトの削除]またはhttp://docs.djangoproject.com/en/dev/ref/のキャッシュを必ず削除してください。 Signals /#post-save [変更]:

from django.core.cache import cache
from django.db.models.signals import post_save
from myapp.models import MyModel

def kill_object_cache(sender, **kwargs):
    cache.delete('some_key')

post_save.connect(kill_object_cache, sender=MyModel)
post_delete.connect(kill_object_cache, sender=MyModel)

私のアプリの1つでこれに似たものを持っていますが、うまく機能します。 データベースバックエンドを使用してもパフォーマンスの改善は見られないことは明らかですが、これはmemcachedを直接使用するよりもDjangoに似た(Djangonic?)アプローチです。

明らかに、キャッシュキー `some_key`をコード全体に散らかすのではなく、どこかで定義する価値があるのは明らかです。上記の例は、必ずしも本格的なキャッシュの実装ではなく、簡単に理解できるように意図されています。


1


データが静的な場合、データベースに戻る必要はありません。 最初に必要なときにそれを読み、結果をキャッシュします。

何らかの理由でアプリに結果をキャッシュできない場合は、常にmemcachedを使用してデータベースへのアクセスを回避できます。

memcachedを使用する利点は、データが変更された場合、memcachedの値を簡単に更新できることです。

memcachedを使用するための擬似コード

if 'foo' in memcached
    data = memcached.get('foo')
else
    data = database.get('foo')
    memcached.put('foo', data)


0


複数のプロセスからの高速アクセスが必要な場合は、データベースが最適なオプションです。

ただし、データをメモリに保持し、同じプロセスの複数の場所からアクセスしたい場合、Python辞書はDBにアクセスするよりも高速になります。