Cassandra无法查询表中的行总和

时间:2019-05-28 06:06:29

标签: cassandra datastax cql

我正在使用Cassandra数据库捕获和保存简单的网络嗅探器数据,但是由于表中的行数大于20M +行,因此它无法运行任何聚合函数,例如sum或{ {1}}。

以下是我的表架构:

count

现在,当我运行查询时(有或没有限制):

CREATE TABLE db.uinfo (
    id timeuuid,
    created timestamp,
    dst_ip text,
    dst_mac text,
    dst_port int,
    protocol int,
    src_ip text,
    src_mac text,
    src_port int,
    PRIMARY KEY (id, created)
) WITH CLUSTERING ORDER BY (created ASC)
    AND 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';

它引发了以下错误:

select src_ip, sum(data) as total from db.uinfo;

你们中的好人有机会帮助我做同样的事情吗?我尝试分别更改OperationTimedOut: errors={'127.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=127.0.0.1 cqlshrc中的超时。我什至尝试使用以下命令启动cqlsh:

cassandra.yaml

我正在使用cqlsh --connect-timeout=120 --request-timeout=120

1 个答案:

答案 0 :(得分:2)

当您具有相对较大的数据时,Cassandra无法使用这种查询-这种查询需要扫描整个数据库并读取其中的所有数据。当您知道要击中的分区时,Cassandra非常有用,因此,仅将查询发送到可以非常有效地处理它们的各个服务器。因此,聚合功能仅在分区内才能发挥最佳作用。

如果您需要完成这种查询-常见的建议是使用Spark并行读取数据并执行聚合。您可以使用Spark Cassandra Connector来执行此操作,但是它会比通常的查询慢-可能需要数十秒,甚至是几分钟,具体取决于数据大小,Spark作业的硬件等。

如果您需要非常频繁地执行这种查询,则需要寻求其他技术,但是很难说谁会在这种情况下表现良好。