版本相关
这个问题的一些答案涉及旧版本的 Cassandra。此类问题的正确答案取决于您使用的 Cassandra 版本。
我有一个个人资料列族,想要在每个个人资料中存储技能列表。我不确定这在 Cassandra 中通常是如何完成的。一种选择是存储序列化的Thrift或 protobuf,但我不想这样做,因为我相信 Cassandra 不了解这些格式,因此数据存储区中的数据无法由人类从命令行通过 CQL 读取或查询。我想到的另一个解决方案是使用超级列并将技能作为具有空值的键:
skills: {
'java': '',
'c++': '',
'cobol': ''
}
这是在 Cassandra 中处理列表的好方法吗?我想有一些我不知道的成语。我正在使用Astyanax客户端库,仅支持复合列而不支持超级列
列,因此我上面提出的解决方案在这种情况下显得相当尴尬。尽管我在理解复合列方面仍然遇到一些困难,因为它们似乎还没有完全记录下来。该解决方案适用于复合柱吗?
这个答案可以追溯到 Cassandra 1.2 版本发布之前,该版本为处理列表提供了截然不同的功能。如果您使用的是 Cassandra 1.2+,则答案可能不合适。
我将使用以真实列名称作为第一个维度的复合列对列键中的列表进行编码,即:
row_key -> {
[column_name; entry1] -> "",
[column_name; entry2] -> "",
...
}
然后,要读取列表,您需要从 [column_name; 执行 get_slice; ] 到 [列名; ] - 注意空白尺寸。
这样做的好处是它实际上很好地实现了一个集合;该列表不能两次包含相同的内容。我认为 Thins 在你的用例中有效。该列表也将按排序顺序维护。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)