gpt4 book ai didi

java - 从 cassandra DB 检索所有行的有效方法

转载 作者:行者123 更新时间:2023-11-30 07:48:31 25 4
gpt4 key购买 nike

我在 cassandra 中有一张表,定义如下

CREATE TABLE IF NOT EXISTS PRODUCT_INV (
Product_Code TEXT,
Storecode TEXT,
StoreType TEXT,
ProductInfo TEXT,
PRIMARY KEY ((Product_Code, Storecode, StoreType)));

现在我想获取特定于 Storecode 和 StoreType 的所有 Product_Code 的列表。什么是最有效的方法来做同样的事情。该表可以包含大量记录。

例如:

Product_Code    Storecode   StoreType   ProductInfo
12 601 Retail ABC
12 601 Supermart ABC
13 601 Retail DEF
14 701 Retail QWE
13 601 Supermart ZXC

结果应该是:

Storecode: 601
StoreType: Retail
List of Product_Code : 12,13

Storecode: 601
StoreType : Supermart
List of Product_Code : 12,13

Storecode: 701
StoreType: Retail
List of Product_Code:14

最佳答案

Cassandra 数据建模完全与非规范化有关。如果有疑问,去规范化通常是最有效的方法。

在这种情况下,如果您创建下表:

CREATE TABLE IF NOT EXISTS product_codes_by_store (
product_code TEXT,
storecode TEXT,
store_type TEXT
PRIMARY KEY ((storecode, store_type), product_code));

现在您可以进行此查询以获取所有产品代码:

SELECT * FROM product_codes_by_store WHERE storecode = 'aaa' AND store_type = 'bbb';

这种方法非常有效,因为 Cassandra 只需要命中单个分区(因此是单个节点)即可完成查询。

但是,您需要记住几件事:

  1. 如果有大量结果,您可能需要分页,这样查询才不会超时。以下是有关如何执行此操作的 Java 驱动程序的文档:https://docs.datastax.com/en/developer/java-driver/3.1/manual/paging/
  2. 由于我在此处添加了聚类列 (product_code),因此您需要确保 (storecode, store_type) 定义的分区不会太大了。建议您尽可能将分区保持在 100MB 以下,因为非常大的分区会导致性能问题。不过这里有一点回旋余地 - 如果您的数据量超过 100MB,那还不算太糟糕,尤其是在较新版本的 Cassandra 上,它们对大分区有更好的支持(请参阅 https://issues.apache.org/jira/browse/CASSANDRA-11206)。

关于java - 从 cassandra DB 检索所有行的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182735/

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