Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从cassandra数据库检索所有行的有效方法_Java_Cassandra_Cassandra 3.0_Datastax Java Driver - Fatal编程技术网

Java 从cassandra数据库检索所有行的有效方法

Java 从cassandra数据库检索所有行的有效方法,java,cassandra,cassandra-3.0,datastax-java-driver,Java,Cassandra,Cassandra 3.0,Datastax Java Driver,我有一张卡桑德拉表格,定义如下 CREATE TABLE IF NOT EXISTS PRODUCT_INV ( Product_Code TEXT, Storecode TEXT, StoreType TEXT, ProductInfo TEXT, PRIMARY KEY ((Product_Code, Storecode, StoreType))); 现在,我想获得所有产品代码的列表,这些代码特定于Storecode和StoreType。 做同样的事情最有效的方法是什么。该表可以包含大量记

我有一张卡桑德拉表格,定义如下

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

卡桑德拉数据建模是关于非规范化的。如果有疑问,反规范化通常是最有效的方法

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

CREATE TABLE IF NOT EXISTS product_codes_by_store (
product_code TEXT,
storecode TEXT,
store_type TEXT
PRIMARY KEY ((storecode, store_type), product_code));
现在,您可以进行此查询以获取所有产品代码:

按存储区从产品代码中选择*,其中存储区代码='aaa'和存储区类型='bbb'

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

但是,您需要记住以下几点:

  • 如果有大量结果,您可能需要分页,以便查询不会超时。以下是Java驱动程序的文档,介绍了如何执行此操作:
  • 因为我在这里添加了一个集群列(
    product\u code
    ),所以您需要确保由
    (storecode,store\u type)
    定义的分区不会太大。建议尽可能将分区保持在100MB以下,因为非常大的分区可能会导致性能问题。不过这里有一点回旋余地——如果超过100MB,也不算太糟糕,尤其是在较新版本的Cassandra上,它更好地支持大分区(请参阅)