2012-07-20 78 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