Riak で数値セカンダリ インデックスを指定すると、次のような範囲クエリを実行できます。
「1 から 10 までのインデックス "sn" を持つすべての値* を見つけてください」.
数値インデックスの最大値を見つける方法はありますか? いえ
「インデックス「sn」の最大値を見つけてください。
* 実際にはすべての主キー (値自体ではない) が検索されますが、ここでは問題ではありません。
いいえ、Riak に 2i の最大値を求めることはできません。map/reduce ジョブを実行し、reduce ジョブを含む各 2i 値を解析して最大値を見つける必要があります。
これがアプリケーションの重要な部分である場合、問題を回避できる他の方法があります。最大値を見つけたら、それが最大値であることを示す値にセカンダリ インデックスを追加できます。最大値が時間の経過とともに変化する場合、次のことができます。
maxval_int
がであるバケットにマップ/リデュースし1
ます。maxval_int
最大でなくなった各オブジェクトからインデックスを削除します。クラスター内のノードが分割されている場合を処理するために、小さなread-repair のような機能があります。
HTH。
または、maxval が単調に増加する場合は、max_2i_index=25 のような特別なキーの下に保存できます。次に、兄弟を許可するようにバケットを設定すると、単純なミューテーターと競合リゾルバーを提供することで、潜在的な兄弟を解決できます。不整合を避けるために、R、W、PR、PW、N を適切に設定することも検討してください。