7

memcahced (具体的にはEnyim memcached client ) を使用しており、他のキーに依存するキャッシュ内のキーを作成できるようにしたいと考えています。つまり、Key AがKey Bに依存している場合、 Key Bが削除または変更されるたびに、 Key Aも無効です。

可能であれば、クラスター内のノードに障害が発生した場合でもデータの整合性が維持されるようにしたいと考えています。つまり、キー Bがある時点で使用できなくなった場合、キー Bが無効になった場合でもキー Aは引き続き無効である必要があります。

この投稿に基づいて、これは可能であると信じていますが、これがどのように/なぜ機能するのかを納得させるのに十分なアルゴリズムを理解するのに苦労しています.

誰でも私を助けることができますか?

4

2 に答える 2

7

私は最近memcachedをかなり使用していますが、依存関係でやろうとしていることは、「そのまま」のmemcachedでは不可能であると確信していますが、クライアント側から処理する必要があります. また、データの複製はクライアントからではなくサーバー側で行う必要があります。これらは 2 つの異なるドメインです。(少なくとも memcached では、データ ストレージ ロジックが不足していることがわかります。ただし、me​​mcached のポイントは、パフォーマンスを向上させるための極端なミニマリズムです)

データ レプリケーション (物理的な障害のあるクラスター ノードに対する保護) については、代わりにmembased http://www.couchbase.org/get/couchbase/currentを確認してください。

deps アルゴリズムの場合、クライアントで次のようなことがわかりました。特定のキーに対して、依存キーのリスト/配列を保持している疑わしい追加のキーがあります。

# - delete a key, recursive:
function deleteKey( keyname ):
    deps = client.getDeps( keyname ) #
    foreach ( deps as dep ):
        deleteKey( dep )
        memcached.delete( dep )
    endeach
    memcached.delete( keyname )
endfunction

# return the list of keynames or an empty list if the key doesnt exist
function client.getDeps( keyname ):
    return memcached.get( key_name + "_deps" ) or array()
endfunction

# Key "demokey1" and its counterpart "demokey1_deps". In the list of keys stored in
# "demokey1_deps" there is "demokey2" and "demokey3".
deleteKey( "demokey1" );
# this would first perform a memcached get on "demokey1_deps" then with the
# value returned as a list of keys ("demokey2" and "demokey3") run deleteKey()
# on each of them.

乾杯

于 2011-10-03T15:23:43.370 に答える
0

直接的な解決策ではないと思いますが、memcache キーに名前空間のシステムを作成してみてください (例: http://www.cakemail.com/namespacing-in-memcached/ ) 。つまり、キーが生成され、他の memcached キーの現在の値が含まれます。名前空間の問題のアイデアは、特定の名前空間内にあるキーの範囲全体を無効にすることです。これは、名前空間キーの値をインクリメントするなどの方法で実現され、キーが再生成されると、以前の名前空間の値を参照するキーは一致しなくなります。

あなたの問題は少し異なって見えますが、キー Aキー Bの名前空間に設定することで、ノード B が利用できなかった場合、キー Aの完全な名前空間のキーを計算すると思います。

"Key A|Key B:<whatever Key B value is>"

は false を返すため、 B が利用できないと判断し、Key Aのキャッシュ ルックアップを無効にすることができます。

于 2011-09-30T03:36:11.043 に答える