【发布时间】:2012-09-18 06:01:41
【问题描述】:
我是 Cassandra 的新手,对超级列不熟悉。
考虑这种情况:假设我们有一个客户实体的一些字段,例如
- 姓名
- Contact_no
- 地址
我们可以将所有这些值存储在一个普通列中。我想安排当一个人从一个位置移动到另一个位置(代表字段可以存储经度和纬度)时,值将相对于客户位置连续存储。我认为我们可以使用超级列来做到这一点,但我很困惑如何设计架构来实现这一点。
请帮助我创建此架构并了解超级列背后的概念。
【问题讨论】:
我是 Cassandra 的新手,对超级列不熟悉。
考虑这种情况:假设我们有一个客户实体的一些字段,例如
我们可以将所有这些值存储在一个普通列中。我想安排当一个人从一个位置移动到另一个位置(代表字段可以存储经度和纬度)时,值将相对于客户位置连续存储。我认为我们可以使用超级列来做到这一点,但我很困惑如何设计架构来实现这一点。
请帮助我创建此架构并了解超级列背后的概念。
【问题讨论】:
现在真的不推荐使用超级列了……仍在使用,但越来越多的人改用复合列。例如 playOrm 使用这个概念进行索引。如果我正在索引一个整数,索引行可能看起来像这样
rowkey = 10.pk56 10.pk39 11.pk50
在这种情况下,列名类型是复合整数和字符串。这些行最多可以有大约 1000 万列,尽管我自己只运行了高达 100 万的过期时间。例如,playOrm 的查询使用这些类型的索引来执行对 1,000,000 行耗时 60 毫秒的查询。
使用 playOrm,您可以在 noSQL 中构建可扩展的关系模型......您只需要弄清楚如何正确地对数据进行分区,因为您可以在每个表中拥有任意数量的分区,但分区实际上不应该超过 1000 万行。
回到示例,如果您有一个包含 numShares、price、username、age 列的表,您可以索引 numShares,而上面的行将是该索引,因此您可以通过键或更好地获取索引,获取 numShares > 20 和 numShares 的所有列名
一旦你有了这些列,你就可以得到列名的后半部分,也就是主键。主键不是值的原因是因为在上面的示例中,有两行 pk56 和 pk39 具有相同的 10,并且您不能有两个名为 10 的列,但是您可以有 10.pk56 和 10.pk39。
后来, 院长
【讨论】: