【问题标题】:column Name of LongType instead of Utf8Type in cassandra cli column familycassandra cli 列族中 LongType 的列名称而不是 Utf8Type
【发布时间】:2014-04-08 20:21:34
【问题描述】:

我是 cassandra cli 的新手,我想知道将列名称定义为 LongType 而不是 Utf8type 是一种好习惯,还请告诉我是我的代码或编码风格有什么问题吗?
我正在使用 hector 在 playframework 的 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
}

【问题讨论】:

    标签: scala cassandra hector cassandra-cli serialization


    【解决方案1】:

    将列名称定义为 LongType 而不是 Utf8type 的良好做法

    您应该将列名数据类型定义为对您的数据模型有意义的任何内容。就最佳实践而言,eBay posted a tech blog 是几年前的,这绝对是一本好书。 Part 2 涵盖列名:

    在列名中存储值是完全可以的

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

    Cassandra 的一种常见做法是存储一个值(实际数据) 在列名(又名列键)中,甚至离开列 如果没有其他要存储的内容,则 value 字段为空。一个动机 因为这种做法是列名存储物理排序, 但列值不是。

    注意事项:

    • 最大列键(和行键)大小为 64KB。然而,不要 将“项目描述”之类的内容存储为列键!

    • 不要使用 单独的时间戳作为列键。您可能会遇到冲突的时间戳 从两个或多个应用服务器写入 Cassandra。首选timeuuid (type-1 uuid) 代替。

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

    我还不得不提一下,Cassandra 的新版本正在远离原来的列族和 cli 交互。我不确定较新的 CQL3 驱动程序是否支持在列名中存储值(我也必须通过 Thrift 和 Hector 来实现,但不是 CQL3)。无论如何,这里有一篇很好的文章 (A thrift to CQL3 upgrade guide) 描述了这些差异,您应该阅读它以备将来努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2012-03-10
      • 2013-12-06
      • 2013-01-24
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多