Cassandra CQL从主键列表中检索各种行

时间:2016-05-19 19:47:35

标签: cassandra cql

我在我的软件中的某个点上有一个主键列表,我想从一个巨大的表格中检索信息,我想知道最实用的方法是什么。让我来说明一下:

让这成为我的桌面结构:

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>apiman</realm-name>
</login-config>

说我有一个主键列表:

CREATE TABLE table_a(
    name text,
    date datetime,
    key int,
    information1 text,
    information2 text,
    PRIMARY KEY ((name, date), key)
)

假设此列表很大(数十万)并且没有以任何方式订购。我想为列表中的每个键检索list = [['Jack', '2015-01-01 00:00:00', 1], ['Jack', '2015-01-01 00:00:00', 2], ['Richard', '2015-02-14 00:00:00', 5], ['David', '2015-01-01 00:00:00', 9], ... ['Last', '2014-08-13 00:00:00', 12]] 列的值。

到目前为止,我解决这个问题的方法是为每个密钥执行一个选择查询,这一点已经足够了。但是,当密钥列表变得太大时,我担心执行时间。是否有更实用的方法来查询cassandra的行列表,我知道主键而不是每个键执行一个查询?

如果密钥是单个字段,我可以使用information语法在一个查询中获取我想要的所有密钥,但是我不知道如何使用复合主键执行此操作。< / p>

感谢案件的任何亮点。

2 个答案:

答案 0 :(得分:1)

最好的方法就是并行运行这些查询。您可以使用异步期货在(Java)应用程序端执行此操作,如下所示:

Future<List<ResultSet>> future = ResultSets.queryAllAsList(session,
    "SELECT * FROM users WHERE id=?",
      UUID.fromString("0a63bce5-1ee3-4bbf-9bad-d4e136e0d7d1"),
      UUID.fromString("7a69657f-39b3-495f-b760-9e044b3c91a9")
);

for (ResultSet rs : future.get()) {
    ... // process the results here
}

答案 1 :(得分:0)

创建一个表,该表将3列数据的数据通过管道传输到一个值中,并将该单个字符串值存储在单个列中。将该列设为PK。然后,您可以使用IN子句进行过滤。例如,从表格中选择*,其中键为IN(&#39;杰克| 2015-01-01 00:00:00 | 1&#39;,&#39;杰克| 2015-01-01 00:00:00 | 2&#39;。)

希望有所帮助! 亚当

相关问题