cassandra 获取所有包含某物的地方

cassandra get all where sth contains sth

我目前正在编写 spring 应用程序。我正在寻找一种在 cassandra 中执行请求的方法,我可以通过它获取所有条目,例如:

我有以下 table:

 username | entityid
----------+--------------------------------------
 pascalku | 55f23680-0201-11e8-9971-4516c86aec2e

当我现在搜索 Pascal 时,我想得到这个结果。

我测试了很多 cql 命令行,但没有任何效果。

希望有人知道或知道如何做到这一点。感谢阅读!

编辑:

我的resolver_names:

CREATE TABLE resolver_names (
    username text PRIMARY KEY,
    entityid uuid
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

由于username是主键,在cassandra中无法用LIKE操作查询。请注意,cassandra 是 NoSQL 数据库,它不像关系数据库,在关系数据库中你可以 运行 像 select * from table where comlum1 like '%pascal%' 这样的查询。我建议您学习免费的数据建模课程 here 以便更好地理解。简而言之,如果您想 运行 在您的应用程序中使用 cassandra 进行此类查询,那么在建模 data/table 时可能会出现问题。

如果它不是主键而只是普通列,LIKE 查询可以使用 cassandra 3.4 及更高版本中的 SSTable 附加二级索引 (SASI) 来实现。详情请参考this

有一些框架可以添加到 cassandra 之上以实现相同的目的(例如 Spark SQL 等)。但是,性能可能不如内置查询,不建议这样做。