【问题标题】:How to retrieve a list of Columns from a single row in Cassandra?如何从 Cassandra 的单行中检索列列表?
【发布时间】:2014-03-01 20:07:26
【问题描述】:

以下是我的 Cassandra CF 示例。

     column1          column2          column3             ......

row1 : name:abay,value:10 name:benny,value:7 姓名:凯瑟琳,价值:24 ....

比较器类型:utf8

如何使用 Hector API 在单个查询中从该行中获取名称为 ('abay'、'john'、'peter'、'allen') 的列。 列表中的姓名数量可能每次都不同。 我知道我可以使用 SliceQuery 将它们按排序顺序排列。 但正如我上面提到的,在某些情况下我需要随机获取数据。 请帮助我。

【问题讨论】:

  • 我怀疑您的数据模型不适合您的查询,但从您共享的内容中不清楚。你的钥匙是什么?一个典型的行中存储了多少列?这是您需要对数据执行的唯一查询,还是还有其他查询?
  • 实际上,我的正常查询是排序的,可以使用 SliceQuery.setRange() 完成。但在某些情况下,我需要从该行中获取一个随机的列列表。从一行中查询一组随机列会降低性能吗?我正在为此使用分级压实。
  • 通常一行有多少列?
  • 几百到几千。而且,这个 CF 会有几十万行。

标签: nosql cassandra hector


【解决方案1】:

根据您的查询,您似乎有两种选择。

  1. 如果您只需要偶尔运行此查询,您可以获取该行的所有列并在客户端对其进行过滤。如果您最多有几千列,这对于偶尔的查询应该没问题。

  2. 如果您需要经常运行此程序,您需要编写数据以便您可以使用名称作为键进行查询。这可能意味着您必须将数据两次写入两个 CF,其中一个是您当前的密钥,另一个是名称。这是一种常见的 Cassandra 策略。

【讨论】:

  • 好吧,我已经有了名称作为列比较器。我正在使用 slicequery.setColumnNames(name1, name 2, ....) 从这一行读取。它会表现良好吗?非常感谢您花时间回答我的问题:)
  • 问题是你会做很多寻找,你不能并行化它。如果每个名称都有一个键,您可以直接针对该键运行并行获取。
猜你喜欢
  • 2017-05-28
  • 2017-09-23
  • 2016-09-16
  • 1970-01-01
  • 2012-01-15
  • 2011-02-24
  • 1970-01-01
  • 2021-07-02
  • 2020-04-11
相关资源
最近更新 更多