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

时间:2012-07-20 04:48:12

标签: php javascript riak

我有一个名为'员工'的桶。其中的键是这样的:

"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”)。

1 个答案:

答案 0 :(得分:1)

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

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

您可以使用关键过滤器来限制文档返回到某个范围(或使用辅助索引 - 这将更快,请参阅下文)。虽然可以对map / reduce操作中的返回值进行排序,但我建议在数据返回后用PHP对数据进行排序(例如使用uasort())。这比在map / reduce操作中排序要简单得多,而且它也可能更快,因为你不必为了映射/缩小而启动V8 javascript引擎(假设你是不写Erlang M / R函数)。当节点报告时,数据也可以多次减少,因此您基本上会对某些数据进行多次重新排序。因此,使用PHP进行排序更容易,更快。

您还应该考虑在文档中添加二级索引(或多个索引),这将大大加快查找文档的时间。例如,您可能有一个'时间戳'二级索引,您可以按范围搜索。有关二级索引的文档,请参阅README on the Riak PHP client。有关在Riak PHP客户端中使用二级索引的工作示例,请查看secondary index unit tests