0

「従業員」というバケットがあります。その中には、次のようなキーがあります。

"ryan_07-01-2012_8:15pm"
"joy_07-02-2012_8:20pm"
"ryan_07-03-2012_8:30pm"
"tammy_07-05-2012_8:10pm"
"tammy_07-11-2012_8:01pm"
"joy_07-15-2012_8:20pm"

すべてのキーは、次のような Riak オブジェクトを指しています。

{ description: "left the office", signed-out: "8:15pm" }

Riak では、特に php クライアント riak-php を使用して、キー値 (つまり、 "ryan_07-01-2012_8:15pm" ) に基づいて時間と日付で並べ替えられたオブジェクトをどのように返しますか。

4

1 に答える 1

1

おそらく、これよりも優れた時刻/日付形式が必要です。その形式は特にフォーマット可能ではありません。たとえば、YYYY-MM-DD_HH:MM:SS (php のdate()形式は になります'Y-m-d_H:i:s')。これは、辞書順に並べ替えることができます。

フォーマットを指定する必要がある場合は、ソート中にそれをソート可能なフォーマットに変換する必要があるため、処理が遅くなります。

キー フィルターを使用して、返されるドキュメントを特定の範囲に制限することができます (またはセカンダリ インデックスを使用します。これはより高速です。以下を参照してください)。map/reduce 操作内で戻り値をソートすることは可能ですが、戻ってきた後に PHP でデータをソートすることをお勧めします (たとえば を使用uasort())。これは、map/reduce 操作でのソートよりも複雑ではなく、map/reduce のために V8 JavaScript エンジンをスピンアップする必要がないため (Erlang M/R 関数を作成していないと仮定して)、おそらく高速です。 . また、ノードが報告するたびにデータが複数回削減される可能性があるため、基本的に一部のデータを複数回再ソートします。そのため、PHP でのソートはより簡単で高速です。

ドキュメントにセカンダリ インデックス (または複数) を追加することも検討する必要があります。これにより、ドキュメントを見つける時間が大幅に短縮されます。たとえば、「タイムスタンプ」セカンダリ インデックスがあり、それを範囲で検索できます。セカンダリ インデックスのドキュメントについては、Riak PHP クライアントの README を参照してください。Riak PHP クライアントでセカンダリ インデックスを使用する実際の例については、セカンダリ インデックスのユニット テストを参照してください。

于 2012-07-31T11:15:37.730 に答える