gpt4 book ai didi

cassandra - Cassandra 可以分区表吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:24 24 4
gpt4 key购买 nike

我每秒插入约 8 行,我想要一个包含所有行的大表,并且我想每周将这个表分成许多表。例如

select * from keyspace.rootTable; -> returns all rows from all tables
select * from keyspace.27-2016Table -> return all rows from week 27

最佳答案

如果每天 86400 秒,每周 604800 秒,您将每天存储 691200 行,每周存储 4838400 行。即使不知道您的行有多宽,在单个查询中返回的行数也太多了。 Cassandra 非常适合存储大量此类数据。但是像这样查询大量数据......不是那么多。

您可能希望按小时分区,但即使那样也会得到 28800 行。这至少是半可控的,所以让我们开始吧。

我会构建一个如下所示的表,在 weekhourBucket 上进行分区,同时在 writeTime 上进行集群:

CREATE TABLE youAreAskingCassandraForTooManyRows (
week text,
hourBucket text,
writeTime timestamp,
value text,
PRIMARY KEY ((week,hourBucket),writeTime))
WITH CLUSTERING ORDER BY (writeTime DESC);

然后我可以按特定的周和小时进行查询,只需按分区键即可:

aploetz@cqlsh:stackoverflow> SELECT * 
FROM youareaskingcassandrafortoomanyrows
WHERE week='201607-3' AND hourBucket ='20160713-14';

week | hourBucket | writetime | value
----------+--------------+--------------------------+--------
201607-3 | 20160713-14 | 2016-07-13 14:01:18+0000 | value6
201607-3 | 20160713-14 | 2016-07-13 14:01:14+0000 | value5
201607-3 | 20160713-14 | 2016-07-13 14:01:12+0000 | value4
201607-3 | 20160713-14 | 2016-07-13 14:01:10+0000 | value3
201607-3 | 20160713-14 | 2016-07-13 14:01:07+0000 | value2
201607-3 | 20160713-14 | 2016-07-13 14:01:04+0000 | value1

(6 rows)

或者甚至针对特定范围,基于聚类键 writetime

aploetz@cqlsh:stackoverflow> SELECT * 
FROM youareaskingcassandrafortoomanyrows
WHERE week='201607-3' AND hourBucket ='20160713-14'
AND writetime > '2016-07-13 14:01:05+0000'
AND writetime < '2016-07-13 14:01:18+0000';

week | hourBucket | writetime | value
----------+--------------+--------------------------+--------
201607-3 | 20160713-14 | 2016-07-13 14:01:14+0000 | value5
201607-3 | 20160713-14 | 2016-07-13 14:01:12+0000 | value4
201607-3 | 20160713-14 | 2016-07-13 14:01:10+0000 | value3
201607-3 | 20160713-14 | 2016-07-13 14:01:07+0000 | value2

(4 rows)
select * from keyspace.rootTable; -> returns all rows from all tables

不言而喻,如果我认为查询一整周的 400 万多行数据量太大以至于会超时,那么查询整个表是巨大的坏主意。

重要的是要注意,Cassandra 不是关系数据库。它是一个分布式系统,因此运行未绑定(bind)查询(没有 WHERE 子句的查询)会在您的等式中引入大量网络时间。这就是为什么您总是希望为所有 SELECT 查询指定至少一个分区键,因为这样您就可以保证从单个节点满足该查询。

您应该看看 Patrick McFadin 关于 Getting Started with Time Series Data Modeling 的文章.这应该可以帮助您了解如何像这样对数据进行分区,并让您走上正确的道路。

关于cassandra - Cassandra 可以分区表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353113/

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