1

LevelDB をストレージ エンジンとして使用し、memcached をキャッシュ レイヤーとして使用する分散ストレージ プロジェクトには、1 つのシナリオがあります。キーを使用するクエリの 95% がストレージ エンジンに存在しません。

memcached レイヤーで、キーが見つからない場合は、LevelDB にクエリを実行します。

LevelDB では、デフォルトのブルーム フィルターを使用してキーが存在するかどうかを判断しますが、それでも誤検知率は 1% です。パーセンテージが 1% であるため、クライアントが許容できない IO を介して値を要求する必要があります。(95% のキーが存在しません)

キーが存在しないかどうかを知るためのより良い解決策はありますか?

更新: 1. キーは毎日生成されます (ユーザー ID + 日付)。一度キーを取得できないと、クライアントは値をストレージ レイヤーに入れます。2. クライアントは読み取り遅延 (TP99) < x ms (クライアントは遅延の影響を受けやすい) を望んでいます

4

1 に答える 1

1

ソリューションを改善するために使用できる 2 つの方法があると思います
。おそらく、「FALSE」のような値を持つ存在しないキーをすべてセットに入れることができます。
2. leveldb のパフォーマンスを向上させます。table-cache と block-size のサイズを調整するか、ストレージ メディアとして ssd を使用します。
leveldb を生産的な環境で永続的な kv-storage として使用し、シナリオに似たブラックリストのようなアプリケーションをサポートします。

于 2016-04-11T16:04:07.543 に答える