2012-04-21 24 views
0

由於我們無法在Cassandra中對數據進行排序,因此我希望以這種格式存儲數據,當我檢索數據時,我需要以'last in首先輸出格式'即,如果用戶在檢索數據時輸入了評論,我應該先獲得最新評論,然後再評論舊評論。我認爲這與比較器有關。如何安排Cassandra中的數據以後進先出格式獲取數據

我已經設置配置卡桑德拉時:

assume posts comparator as utf8; 
assume posts validator as utf8; 
assume posts keys as utf8; 

請幫助 - 我應該如何創建列以安排時間格式的數據,以便最新數據首先存儲?

回答

0

您需要組織數據,以便比較器是時間戳。您按自然順序存儲數據,並在切片查詢中指定相反的順序。

+0

我的意思是鬆散地使用術語「時間戳」。只要列的自然順序能夠按時排序,該技術就可以正常工作。序列號可以做得很好。 – phatfingers 2012-04-21 14:38:42

+0

但如何告訴卡桑德拉按照時間戳排序我的意思是在我的機器上按字母順序排序 – sohaan 2012-04-21 15:30:18

+0

一個基本的結構是columnfamily [key] [name] = value,其中值可以是序列化記錄,比如JSON或doc,也許是一個CSV字符串。如果名稱只是一個數字ID,那麼應該起作用。您可以使用bigint並存儲從時代開始的毫秒數。該列不一定是一個字符串,但如果你想要它,你可以格式化一個日期字符串爲'yyyyMMddHHmmss.SSS',並按時間順序按字母順序排序。 – phatfingers 2012-04-21 20:42:50

2

行中的列總是被排序,您可以按相反的順序遍歷行中的列。考慮到這兩種情況,我們可以通過將評論存儲在稱爲「評論」的列族中來描述你描述的情況,其中行密鑰是帖子ID,並且列表示對相應帖子的評論。這些列是時間戳(ISO格式日期,UNIX時間戳或時間UUID),值是註釋文本主體。

如果你現在要得到一行的列並指定你想要它們的順序相反,你會得到你想要的。如何指定逆序取決於您的驅動程序,但它通常只是檢索行或列片的命令的選項。

另一種更冒險的方法是獲取帖子的UNIX時間戳,並將其從大整數(如2^31)中減去,然後將其用作列鍵。這種方式默認情況下,列將按相反順序排序。它不漂亮,上面的方法更優雅。

如果您擔心使用時間戳,因爲可能發生衝突,兩個註釋完全同時發佈,請使用Cassandra的時間UUID類型。

+0

而不是使用紀元 - 時間戳來獲取逆序的時間戳,只需使用反轉比較器:http://thelastpickle.com/2011/10/03/Reverse-Comparators/。它也適用於TimeUUIDType。 – 2012-04-24 16:05:32

+0

更好!不知道這一點。 – Theo 2012-04-25 13:30:10

相關問題