2014-03-06 30 views
1

我在卡桑德拉CLI新的,我想知道的是它是一個很好的做法來定義列名的LongType代替Utf8type,也請告訴我的代碼或編碼風格有什麼問題嗎?
我在scala中使用hector進行playframework。列名稱

val mutator = HFactory.createMutator(Group, le); 
mutator.addInsertion(groupId,"groupRefrence",HFactory.createColumn(userId,userId,le,le)) 
mutator.execute() 

def getMembersRefrence(groupId: Long) = { 
val sliceQuery = HFactory.createSliceQuery(Group, le, le, le) 
sliceQuery.setColumnFamily("groupRefrence") 
sliceQuery.setKey(groupId) 
sliceQuery.setRange(Long.MIN_VALUE,Long.MAX_VALUE, false, Integer.MAX_VALUE) 
val result = sliceQuery.execute() 
val res = result.get() 
val columns = res.getColumns() 
val response = columns.toList 
response 
} 

回答

3

好的做法定義的列名作爲LongType而不是Utf8type

你應該定義你的列名的數據類型,以任何有意義的數據模型。就最佳做法而言,eBay posted a tech blog就在幾年前,這絕對是一個很好的閱讀。 Part 2涵蓋列名:列名

存儲值是完全OK

離開列值空(「毫無價值」列)也行。

這是一個與卡桑德拉一種常見的做法存儲值(實際數據) 列名(又名列鍵),甚至離開列 值字段爲空,如果沒有別的存儲。這種做法的一個動機 是列名稱存儲物理排序, 但列值不是。

注:

  • 最大列密鑰(和行密鑰)的大小是64KB。但是,不要 存儲'項目描述'作爲列鍵!

  • 不要單獨使用 時間戳作爲列鍵。您可能會碰撞來自兩個或多個應用程序服務器的時間戳 ,這些應用程序服務器正在向Cassandra寫入數據。建議使用timeuuid (類型1 uuid)。

  • 最大列值大小爲2 GB。但是由於 因爲沒有流式傳輸,並且在請求時整個值在堆內存中被獲取,因此將大小限制爲僅幾MB。 (大 對象不太可能在不久的將來得到支持 - 卡桑德拉-265不過,Astyanax客戶端庫通過分塊他們支持大 對象。)

我也覺得有必要提Cassandra的新版本正在擺脫原來的專欄系列和cli互動。我不確定新的CQL3驅動程序是否支持在列名中存儲值(我也必須通過Thorft與Hector,而不是CQL3來完成)。無論如何,這是一篇很好的文章(A thrift to CQL3 upgrade guide),它描述了這些差異,這是你應該爲未來的努力閱讀的東西。