gpt4 book ai didi

java - 使用 Cassandra 中的 hector 客户端使用复合键的第一个组件获取行

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:52 25 4
gpt4 key购买 nike

我在行键中使用复合数据类型,列族如下

create column family CompositeTest
with comparator = 'UTF8Type'
and key_validation_class = 'CompositeType(UTF8Type,UTF8Type)'
and default_validation_class = 'UTF8Type';

该列族的样本数据如下,

RowKey: s2:2222222
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3
-------------------
RowKey: s2:3333333
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3
-------------------
RowKey: s2:1111111
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3
-------------------
RowKey: s1:3333333
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3
-------------------
RowKey: s1:2222222
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3
-------------------
RowKey: s1:1111111
=> (column=param1, value=value1
=> (column=param2, value=value2
=> (column=param3, value=value3

我想获取行键的第一个组件是“s1”的所有行。是否可以使用 Hector 客户端?如果不是,那么它可能由哪个 cassandra 客户端提供?

我试过使用下面的代码,但它不起作用,

Composite start = new Composite();
start.addComponent(0, "s1", ComponentEquality.EQUAL);

Composite end = new Composite();
end.addComponent(0, "s1", ComponentEquality.GREATER_THAN_EQUAL);

RangeSlicesQuery<Composite, String, String> rangeSlicesQuery = HFactory.createRangeSlicesQuery(keyspace, new CompositeSerializer(), StringSerializer.get(), StringSerializer.get());
rangeSlicesQuery.setKeys(start, end);
rangeSlicesQuery.setRange("param1", "param3", false, 100);
rangeSlicesQuery.setColumnFamily("CompositeTest");
rangeSlicesQuery.setRowCount(11);
QueryResult<OrderedRows<Composite, String, String>> queryResult = rangeSlicesQuery.execute();

Rows<Composite, String, String> rows = queryResult.get();
Iterator<Row<Composite, String, String>> rowsIterator = rows.iterator();

提前致谢...

最佳答案

这在使用任何客户端的 Cassandra 中是不可能的。虽然行键对您(应用程序开发人员)显示为复合对象,但在 Cassandra 本身中,行键是一个单一的字节数组,作为单个原子值存储在 Cassandra 的 SSTable 中。

意思是,您只能查询具有整个键的行,而不仅仅是键的一部分。否则,您必须扫描整个列族,直到找到匹配项 - 这将非常昂贵。

也就是说,如果您确实需要能够仅使用行键的一部分来查询列族中的行,那么我强烈建议为这些关键部分创建单独的索引列族。这将允许您使用标准键/列查找来查找原始数据列族中符合您的条件的所有行。

关于java - 使用 Cassandra 中的 hector 客户端使用复合键的第一个组件获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19374143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com