column Cassandra cli列族中LongType的名称而不是Utf8Type

时间:2014-03-06 09:38:07

标签: scala cassandra hector cassandra-cli serializer

我是cassandra cli的新手,我想知道将列名定义为 LongType 而不是 Utf8type 是一个好习惯,请告诉我是我的代码或编码风格有什么问题吗?
 我正在使用hector在playframe中的scala中进行此操作。

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
}

1 个答案:

答案 0 :(得分:3)

  

将列名称定义为LongType而不是Utf8type

的良好做法

您应该将列名数据类型定义为对数据模型有意义的数据类型。至于最佳实践,eBay posted a tech blog在几年前就已经开始了,这绝对是一个很好的阅读。 Part 2涵盖了列名:

  

在列名中存储值完全可以

     

将列值保留为空(“无值”列)也可以。

     

Cassandra存储值(实际数据)是一种常见做法   在列名(a.k.a.列键)中,甚至离开列   如果没有其他东西要存储,则value字段为空。一个动机   对于这种做法是列名称存储物理排序,   但列值不是。

     

注意:

     
      
  • 最大列键(和行键)大小为64KB。但是,不要   存储类似“项目描述”的内容作为列键!

  •   
  • 请勿使用   时间戳单独作为列键。您可能会遇到冲突的时间戳   来自两个或更多写入Cassandra的app服务器。更喜欢timeuuid   (类型1 uuid)而不是。

  •   
  • 最大列值大小为2 GB。但   因为没有流,并且整个值都在堆中获取   请求内存时,将大小限制为仅几MB。 (大   在不久的将来不太可能支持对象 -   卡桑德拉-265。但是,Astyanax客户端库支持大型   通过分块来对象。)

  •   

我也不得不提到较新版本的Cassandra正在逐渐远离原始列系列和cli交互。我不确定较新的CQL3驱动程序是否支持在列名中存储值(我还必须通过Thrift使用Hector,而不是CQL3)。在任何情况下,这里都有一篇很好的文章(A thrift to CQL3 upgrade guide)来描述这些差异,这是你应该通读的未来的努力。