当前位置: 首页 > 知识库问答 >
问题:

在Cassandra中使用复合分区密钥进行CQL查询

桂浩言
2023-03-14

我的主要问题是用复合分区键对表上的Cassandra resultset进行分页。然而,我试图用一个简单的场景来缩小范围。喂,我有桌子,

CREATE TABLE numberofrequests (
  cluster text,
  date text,
  time text,
  numberofrequests int,
PRIMARY KEY ((cluster, date), time)
) WITH CLUSTERING ORDER BY (time ASC)

我有一个数据,


cluster | date | time | numberofrequests ---------+------------+------+------------------ c2 | 01/04/2015 | t1 | 1 c2 | d1 | t1 | 1 c2 | 02/04/2015 | t1 | 1 c1 | d1 | t1 | 1 c1 | d1 | t2 | 2

 select * from numberofrequests where token(cluster,date)>=token('c2','00/00/0000');

 select * from numberofrequests where token(cluster,date)>=token('c2','1');

 select * from numberofrequests where token(cluster,date)>=token('c2','a');

 select * from numberofrequests where token(cluster,date)>=token('c2','');

我的模式使用默认的分区器(Murmur3Partitioner)。这是完全可以实现的吗?

共有1个答案

督宏旷
2023-03-14

Cassandra需要分区键(PK)来定位查询的行。任何只基于部分PK的查询都不能工作,因为它的murmur3哈希与分区器最初创建的基于完整PK的哈希不匹配。相反,您可以使用ByteOrderedPartitioner。这将允许您使用token()函数,如您的示例中所示,方法是保持PK的字节顺序,而不是使用哈希函数。但在大多数情况下,这是一个坏主意,因为数据不会在集群中均匀分布,最终会出现一开始试图避免的热点。

 类似资料:
  • 我正在学习Cassandra,并有一个关于分区/集群键的问题。 我有一个表,存储数据的股份,如行业的分支,最近6/12个月的业绩,名称等。 该表如下所示: 多谢了,伙计们

  • 参考文献: https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_compound_keys_c.html Cassandra中分区键、复合键和聚类键的区别?

  • 我正在尝试将以下结构存储在卡桑德拉中。 上面的大多数查询是 这就是为什么将()设置为主键很有用的原因。 根据docu,Cassandra的默认分区键是主键的第一列-在我的例子中是,但我想在Cassandr集群上均匀分布数据,我不能允许一个中的所有数据只存储在一个分区中,因为有些商店有10M条记录,有些只有1k条记录。 我可以设置()作为分区键,然后我可以达到Cassandra集群中记录的统一分布。

  • 假设我想要一个复合键作为采购订单实体的street,city。 下面是我如何识别做这件事, 我想明白@AttributeOverrides注释到底是做什么的?即使我将colomn name更改为something STREET1,我仍然看到使用列名street创建的表。那么column=@column(name=“street”))在这里做什么。 另外,我可以将它作为PurchaseOrder类的

  • 因此,我尝试使用Spark SQL进行以下查询('timestamp'是分区键): 虽然作业产生200个任务,但查询不会返回任何数据。 另外,我可以保证会返回数据,因为在cqlsh上运行查询(使用'token'函数进行适当的转换)确实会返回数据。 但不幸的是我不知道什么是“过滤器”...

  • 假设我有一个mongo集合,如下所示: 我想使用Spring的mongoTemplate编写一个查询,只检索那些id.index=index1的文档。 使用mongo shell,我可以编写以下查询: 然而,我认为使用mongoTemplate会起作用的东西却不起作用。我尝试过: 有人可以帮助我使用mongoTemplate为这个查询提供正确的语法吗?