2011-06-03 96 views
3

喂,Cassandra和Hector = MultiGetSliceQuery,具有各種不同類型的列值?

我不明白,如何查詢卡珊德拉赫克託,但返回的列值不是一個單一類型的,但是很多的:

我把????在那裏,我不知道該怎麼做:

MultigetSliceQuery<String, String, ??????> multigetSliceQuery = HFactory.createMultigetSliceQuery(keyspace, stringSerializer, stringSerializer, ???????); 

對於例如,如果我所有的列值是字符串類型的,我會把在字符串。但是我在一行中有不同的像String,Integer和byte []。所以我必須通過更多的串行器。

如何解決這個問題?

謝謝。

(可以一個PLS創建赫克託作爲標籤?我不允許這樣做)

回答

5

您可以使用ByteBufferSerializer,然後轉換的ByteBuffers從ByteBufferSerializer返回的參數StringSerializer和IntegerSerializer到列轉換它們是字符串和整數。

+0

這是正確的,你是如何做到這一點。這是hector用戶中的一個常見問題,但最好的解決方案似乎正是您的建議。 – Ran 2011-06-07 19:11:26

+0

但是,這假定您知道每列的類型,以便能夠在代碼中選擇正確的(de)序列化程序。如果您想要反序列化任意類型的行,該怎麼辦? 這並不罕見,因爲它可能會首次出現。我們需要在Cassandra中存儲任意的JSON對象,每個屬性都在它自己的列中。最後,我們選擇保留列值的第一個字節來表示類型。 雖然這個解決方案對我們來說效果很好,並且去除了一個瘋狂的Hector鍋爐板,但是大多數Hector-Cassandra專家都不推薦這種方法。 – 2011-10-08 12:56:30