【问题标题】:cassandra get all where sth contains sthcassandra 得到所有 sth 包含 sth
【发布时间】:2018-07-06 23:49:15
【问题描述】:

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

我有下表:

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

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

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

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

编辑:

我的解析器名称:

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';

【问题讨论】:

  • 请分享您的表架构,以及您尝试过什么样的查询等。至于现在,我假设您的主键是用户名。如果是真的,那么你不能使用本机 cql 查询来做到这一点,因为它没有遵循 cassandra 数据模型。
  • 我应该如何改变它?
  • 您可以对原始问题使用edit 功能。更多细节将有助于更好地了解您的问题,并最终得出好的答案。
  • 我添加了名称解析的架构。我尝试了类似包含的东西,比如...

标签: java spring cassandra cql


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多