1

Riak で数値セカンダリ インデックスを指定すると、次のような範囲クエリを実行できます。

「1 から 10 までのインデックス "sn" を持つすべての値* を見つけてください」.

数値インデックスの最大値を見つける方法はありますか? いえ

「インデックス「sn」の最大値を見つけてください。

* 実際にはすべての主キー (値自体ではない) が検索されますが、ここでは問題ではありません。

4

2 に答える 2

1

いいえ、Riak に 2i の最大値を求めることはできません。map/reduce ジョブを実行し、reduce ジョブを含む各 2i 値を解析して最大値を見つける必要があります。

これがアプリケーションの重要な部分である場合、問題を回避できる他の方法があります。最大値を見つけたら、それが最大値であることを示す値にセカンダリ インデックスを追加できます。最大値が時間の経過とともに変化する場合、次のことができます。

  • 2i formaxval_intがであるバケットにマップ/リデュースし1ます。
  • 結果が 1 つしかない場合は、それを返します。
  • 複数の結果がある場合は、最大値を見つけるために減らします。
  • maxval_int最大でなくなった各オブジェクトからインデックスを削除します。
  • 新しい値を追加するときは、現在の最大値に対してチェックし、それに応じてインデックスを更新します。

クラスター内のノードが分割されている場合を処理するために、小さなread-repair のような機能があります。

HTH。

于 2012-06-07T21:56:37.533 に答える
0

または、maxval が単調に増加する場合は、max_2i_index=25 のような特別なキーの下に保存できます。次に、兄弟を許可するようにバケットを設定すると、単純なミューテーターと競合リゾルバーを提供することで、潜在的な兄弟を解決できます。不整合を避けるために、R、W、PR、PW、N を適切に設定することも検討してください。

于 2012-06-09T17:23:46.743 に答える