2013-06-26 118 views
0

我們的專欄名稱是有目的地挑選出來的,以便它們以我們想要的順序返回(關鍵基本上是一個內部序列號)。我們的行鍵類似地被排序。基本上每天一個rowkey,添加到該行的所有列。在所有行中獲取最近添加的列?

鑑於此,我如何在Hector中創建一個查詢以將最近一行中的最新列返回給我?還是最古老的?簡而言之,兩個最常見的查詢是「讓我最近的條目」和「讓我最老的條目」。

雖然我對Cassandra或Hector不太熟悉,但仍然難以理解正確的查詢。它應該看起來像這樣?

QueryResult<OrderedRows<String, String, Long>> result = 
    rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setRowCount(1).setRange("","",true,1).execute(); 

由於列名是動態生成的價值觀和我不知道什麼時候最後還是首先看重的是,我沒有看到讓周圍的開放式值鍵和列範圍的任何方式。希望Hector/Cassandra能夠很快做到這一點,還是應該進行一些優化?

回答

2

您想要確保列的排列順序相反,這樣您可以對限制爲1的行執行分片查詢並只獲取最新值。如果您沒有反向排序,則需要閱讀整行。

至於如何獲得最近的行,沒有辦法在一個查詢中找到它。一種方法是維護所有行的索引(再次按相反的順序,以便您可以使用相同的技巧來選擇最近的行),然後首先點擊該索引,然後點擊該行。另一種方法是,如果你對它的價值有一個粗略的概念,並且你可以預測值的順序(它聽起來像你可以,每天應該有一行,並且應該沒有行比今天晚),那麼你選擇最新的可能值,並嘗試加載該值,如果您沒有收到任何回覆,請嘗試加載下一個最新值,依此類推。如果您不太可能在第一次嘗試中遇到問題(例如,如果每天都沒有排,那麼大多數時間),您可以一次查詢五個或十個值,然後選擇最近你回來了(如果你沒有收回任何東西,請重複)。

+0

謝謝,這似乎證實了我昨天看到的bazillion網頁:)。可悲的是,根據我們現在配置的東西,Cassandra似乎不適合這個特定的查詢。我將不得不回過頭去思考我們如何建模...... –

相關問題