我在我的软件中的某个点上有一个主键列表,我想从一个巨大的表格中检索信息,我想知道最实用的方法是什么。让我来说明一下:
让这成为我的桌面结构:
<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>
感谢案件的任何亮点。
答案 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;。)
希望有所帮助! 亚当