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 客户端上的自述文件。有关在 Riak PHP 客户端中使用二级索引的工作示例,请查看二级索引单元测试

于 2012-07-31T11:15:37.730 回答