キー値ストア内のキーのポリシーを定義しようとしています (Redis を使用しています)。キースペースは次のようにする必要があります。
分割可能 (より多くのサーバーを導入し、それらの間のキースペースを広げることができます)
名前空間(たとえば、ドメインまたは関連する概念によって、キーを論理的に「グループ化」するメカニズムが必要です)
効率的(できるだけ多くのデータを許可するために、DB 内のキー用のスペースをできるだけ少なくするようにしてください)
可能な限り衝突の少ない(2 つの異なるオブジェクトのキーが等しくならないようにする)
私が検討した2つの代替案は次のとおりです。
いくつかの文字 ( など) で区切られた名前空間のプレフィックスを使用します
human_resources:person:<some_id>
。これの利点は、非常にスケーラブルで理解しやすいことです。マイナス面は、区切り記号に応じて競合が発生する可能性があり (その中id
に文字:
が含まれているとどうなるか?)、サイズの効率性が高くなる可能性があります (ネストされた名前空間が多すぎると、非常に長いキーが作成される可能性があります)。名前空間を格納するには、何らかのデータ構造 (Ordered Set や Hash など) を使用します。これの主な欠点は、名前空間を格納するための構造が単一のデータベースにある必要があるため、「分割可能性」が失われることです。
質問: シャード設定でキースペースを管理するには、どのような方法がよいでしょうか? これらの代替案のいずれかを使用する必要がありますか、それとも考慮していない他のより良いパターンがありますか?
どうもありがとう!