如何返回按键值排序的Riak对象


How to Return Riak Objects Sorted by Key Value?

我有一个名为"employees"的bucket。里面是看起来像这样的钥匙:

"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")返回按时间和日期排序的对象。

您可能想要一个比此更好的时间/日期格式,该格式不是特别可格式化的。例如YYYY-MM-DD_HH:MM:SS(php的date()格式为'Y-m-d_H:i:s')。这将能够按照词典进行排序。

如果必须指定格式,则必须在排序过程中将其转换为可排序的格式,这样会减慢速度。

您可以使用密钥过滤器将文档限制在某个范围内(或者使用辅助索引-这会更快,请参阅下面的详细信息)。虽然可以在map/reduce操作中对返回值进行排序,但我建议在数据返回后用PHP对其进行排序(例如使用uasort())。这将比map/reduce操作中的排序更简单,而且可能更快,因为您不必为map/reduze启动V8 javascript引擎(假设您不是在编写Erlang M/R函数)。此外,随着节点的报告,数据可能会减少多次,因此您基本上会多次对某些数据进行重新排序。因此,在PHP中排序更容易、更快。

您还应该考虑为文档添加一个(或多个)辅助索引,这将大大加快查找文档的时间。例如,您可能有一个"时间戳"辅助索引,您可以按范围进行搜索。有关二级索引的文档,请参阅Riak PHP客户端上的自述文件。有关在Riak PHP客户端中使用辅助索引的工作示例,请查看辅助索引单元测试。