5

Webアプリケーションの(ほぼ)各リクエストにロードするデータの小さなチャンクのSQL依存関係を削除したいと思います。ほとんどのデータはKey-Value/ドキュメント構造ですが、リレーショナルソリューションは除外されていません。データはそれほど大きくないので、可用性を高めるためにメモリに保持したいと思います。

どのような解決策をお勧めしますか?

4

8 に答える 8

6

最も単純で最も広く使用されているメモリ内のKey-ValueストレージはMemcacheDです。紹介ページはあなたが求めているものを繰り返します:

Memcachedは、データベース呼び出し、API呼び出し、またはページレンダリングの結果からの任意のデータ(文字列、オブジェクト)の小さなチャンク用のメモリ内のKey-Valueストアです。

クライアントリストは印象的です。久しぶりです。良いドキュメント。ほぼすべてのプログラミング言語用のAPIがあります。水平方向のスケーリングは非常に簡単です。私の経験では、Memcachedは優れています。

MemBaseを調べることもできます。

于 2011-03-06T09:48:26.747 に答える
6

Redisはこの種のデータに最適です。また、いくつかの基本的なデータ構造をサポートし、それらに対する操作を提供します。

私は最近、Djangoフォーラムアプリをすべてのリアルタイム/トラッキングデータに使用するように変換しました-SET views = views + 1リレーショナルでこの種のこと(およびすべてのページビューで他の書き込み)を行うときに感じる不快感がなくなるのはとても良いことですデータベース。

次に、Redisを使用して、Pythonで最後に表示されたユーザーの順序セットを最新の状態に保つなど、ユーザーアクティビティの追跡に必要なデータを保存する例を示します。

def seen_user(user, doing, item=None):
    """
    Stores what a User was doing when they were last seen and updates
    their last seen time in the active users sorted set.
    """
    last_seen = int(time.mktime(datetime.datetime.now().timetuple()))
    redis.zadd(ACTIVE_USERS, user.pk, last_seen)
    redis.setnx(USER_USERNAME % user.pk, user.username)
    redis.set(USER_LAST_SEEN % user.pk, last_seen)
    if item:
        doing = '%s <a href="%s">%s</a>' % (
            doing, item.get_absolute_url(), escape(str(item)))
    redis.set(USER_DOING % user.pk, doing)
于 2011-03-06T09:50:47.430 に答える
3

SQLを気にしないが、データベースをメモリに保持したい場合は、sqliteをチェックアウトすることをお勧めします(http://www.sqlite.org/inmemorydb.htmlを参照)。

SQLが不要で、実際にはキーと値のペアしかない場合は、それらをマップ/ハッシュ/連想配列に格納して、それで済ませてみませんか?

于 2011-03-06T09:50:52.120 に答える
2

インメモリ データベースが必要になった場合、H2は非常に優れたオプションです。

于 2011-03-06T10:04:39.173 に答える
2

考慮すべきもう 1 つのデータベース: Berkeley DB。Berkeley DB では、データベースをインメモリ、オンディスク、またはその両方に構成できます。キー値 (NoSQL) と SQL API の両方をサポートしています。Berkeley DB は、組み込まれていて、簡単にデプロイでき (アプリケーションと共にデプロイされます)、高度に構成可能で、信頼性が高いため、Web アプリケーションと組み合わせて使用​​されることがよくあります。Amazon.com など、e コマース アプリケーションを Berkeley DB に依存している e-Retail Web サイトがいくつかあります。

于 2011-03-08T20:12:05.247 に答える
1

これがあなたが探しているものかどうかはわかりませんが、キャッシングフレームワーク(現在使用しているツールに含まれている可能性のあるもの)を調べる必要があります。データを要求するリポジトリパターンを使用して、キーごとにデータがキャッシュにあるかどうかを確認します。私はしません、あなたはそれをデータベースからフェッチします、もしそうなら、あなたはそれをキャッシュからフェッチします。

処理するデータの種類によって異なるため、データをキャッシュに保持する期間はユーザーが決定します。キーが要求され続ける限りデータを保持するので、おそらくスライディングタイムアウトが最適です。つまり、キャッシュにユーザーのデータがある場合、ユーザーが離れると、データはキャッシュから期限切れになります。

于 2011-03-06T09:50:42.610 に答える
0

これをチェックしてください:

http://www.mongodb.org/

ドライバーを備え、すべての主要言語をサポートする、非常に優れた No-SQL データベースです。

于 2012-07-05T06:15:29.380 に答える