在Cassandra中存储值列表

Ben*_*ann 5 cassandra

版本依赖

这个问题的一些答案涉及旧版Cassandra.这类问题的正确答案取决于您使用的Cassandra版本.


我有一个配置文件列系列,并希望在每个配置文件中存储技能列表.我不确定这是如何在Cassandra中完成的.一种选择是存储序列化的Thrift或protobuf,但我不想这样做,因为我认为Cassandra不了解这些格式,因此数据存储区中的数据不会通过CQL进行人类可读或可查询从命令行.我想到的另一个解决方案是使用超级列并将技能作为具有空值的键:

skills: {
  'java': '',
  'c++': '',
  'cobol': ''
}
Run Code Online (Sandbox Code Playgroud)

这是处理Cassandra列表的好方法吗?我想有一些我不知道的成语.我正在使用Astyanax客户端库,它只支持复合列而不是超级列,所以我在上面提出的解决方案在这种情况下看起来很尴尬.虽然我仍然在理解复合材料列时遇到一些麻烦,因为它们似乎尚未完全记录.这个解决方案是否适用于复合柱?

sdo*_*lgy 3

这个答案可以追溯到 Cassandra 1.2 版本发布之前,该版本为处理列表提供了截然不同的功能。如果您使用的是 Cassandra 1.2+,则答案可能不合适。


正如邮件列表中提到的,我的偏好是存储单列“技能”,其值是序列化的 JSON 字符串,这对我来说非常有效。

真正归结为你对“技能”的使用模式。

  • 如果“技能”只是针对每个用户的 CRUD,那就没问题。
  • 如果您希望能够搜索具有“cobol”技能的所有用户,那么我仍然会推荐这种方法,并使用另一技能:cobol,它具有 UUID 列和时间戳值或类似的值...
  • 我确信通过 Pig/Hadoop 集成到您的 cassandra 节点,您仍然可以非常愉快地查询所有具有 x、y 和 z 的用户,以生成新数据来支持其他用例。