【问题标题】:How to Select Nth Row in Cassandra DB Table如何在 Cassandra DB 表中选择第 N 行
【发布时间】:2018-02-05 10:59:08
【问题描述】:

我需要根据我从逻辑中得到的特定数字从 cassandra 表中选择第 N 行。即:如果逻辑输出为 23 表示,我需要获取第 23 行详细信息。由于 cassandra 中没有自动增量,我无法使用 ID 键匹配。在 SQL 中,他们使用 OFFSET 和 LIMIT 来获得它。我不知道如何在 Cassandra 中实现这一目标。 我们可以通过使用任何 UDF 概念来实现这一点???有人回复我解决方案。提前致谢。

表架构:

CREATE TABLE new_card ( 
    customer_id bigint, 
    card_number text, 
    active tinyint, 
    auto_pay int, 
    available_credit_limit double, 
    average_card_spend_half_yearly double, 
    average_card_spend_monthly double, 
    average_card_spend_quarterly double, 
    average_card_spend_yearly double, 
    avg_half_yearly_spend_mcc double,
    PRIMARY KEY (customer_id, card_number) 
);

【问题讨论】:

  • 您无法在 cassandra 中获取具有行索引的行。您需要根据查询设计表格
  • 它的主表,不能根据我们的需要改变。一旦创建了结构,就必须这样做。
  • 显示您的表架构
  • 只有这张表你只能使用c_customer_id (=)c_customer_id(=, in)cc_card_number(<, >, =)获取数据
  • 是的,这就是我在问题本身中提到的原因,在 cassandra 中没有自动增量。并且我的表中没有升序类型的键,因为我使用的是 customer_id(这里我们使用唯一的已存储的 5 位随机数)和 credit_card_number。

标签: cassandra cassandra-2.0 cassandra-2.1 cassandra-3.0 spring-data-cassandra


【解决方案1】:

如果您使用的是 Java 驱动程序,请参考Paging

注意,Cassandra 不支持直接偏移,页面是按顺序读取的。如果您必须在查询中使用偏移量,您可能需要重新访问您的数据模型。您可以创建一个复合分区键,包括行号作为现有分区键列之上的附加列。

【讨论】:

  • 在我们的项目中,我们使用了 crud 存储库的概念。因此,不能使用我们通常用于 JDBC 连接的 Cluster 和 Statement 概念。我现在处于一个混乱的循环中。
  • 嗯,底线是你不能用 Cassandra 跳转页面。您需要一次翻一页。现在 spring-data 整体支持使用 Pageable 和 Sort 的分页,但本质上 spring data cassandra 仍然必须滚动页面,只是它对客户端开发人员隐藏。在 spring data cassandra 文档中检查 Pageable 和 Sort 。不过,您确实应该考虑重新审视您的数据模型。
  • 我用分页概念完成了你的回答,谢谢。
【解决方案2】:

您根本无法从表中选择 N 行,因为 Cassandra 表是由分区组成的,您可以在分区内对行进行排序,但不能对分区进行排序。使用分页将抛出所有表,但使用吸吮方法选择的行不会按时间顺序排列(忽略分区可能会在您执行 go-throw-pages 操作时更改的事实)。

如果要从 Cassandra 中选择行号 N,则需要在应用程序级别实现自动递增字段并将其用作键。

Cassandra 有很多方法可以做到这一点,例如使用轻量级事务,但从性能感知角度来看,它的成本很高。在这里查看几个解决方案:

How to create auto increment IDs in Cassandra

【讨论】:

  • 由于它的主表,我不能明智地改变表结构。
  • 所以使用自动增量和 id,但这是一个不好的做法,或者在应用程序级别实现它。无论如何,如果您将表从关系数据库移动到 Cassandra 而不进行任何更改,那么预计事情会停止工作,它不是这样设计的。如果它是必须具备的功能,您也许应该尝试使用另一个数据库。如果您不能更改代码,也不能更改表结构,那么它将无法正常工作。 Cassandra 可以做很多事情,但它肯定不能替代关系数据库。
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2014-11-27
  • 2017-09-10
  • 1970-01-01
  • 2011-03-30
  • 2010-09-06
相关资源
最近更新 更多