2012-07-20 68 views
0

我有一个叫'员工'的桶。在它的按键看起来像这样:如何返回按键值排序的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”)。

+0

“桶”?你的意思是一个“数组”?我不知道Riak是什么,但是你想要一个PHP还是一个JavaScript解决方案? (为什么用两个标记问题?) – nnnnnn 2012-07-20 04:51:55

+0

一个桶是纯粹的Riak术语。我将它标记为两个b/c,在这种情况下,Riak php客户端riak-php正在被使用,Javascript正在MapReduce Riak阶段中使用。 – user782860 2012-07-20 04:54:41

+1

您应该接受为您以前的问题提供的答案,这对于那些试图帮助您的人来说至少可以做到。 – 2012-07-31 11:19:36

回答

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中排序更容易,更快。

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