我有一个玩具 Cassandra 集群在家里的一些 RaspberryPi 上运行。我目前正在将 CryptoCoin 数据记录到它,希望能更多地了解 Cassandra 以及沿途的其他一些事情。
我今天在这里的问题是找出我是否在这张表上正确构建了我的架构。
该表没有很多字段,主键是名称字段和时间戳字段。我想从所有硬币中查询最近 N 小时的数据(每分钟记录一次数据)。如果我使用简单的 WHERE 子句,我会收到“ALLOW FILTERING”警告。我理解为什么会发生这种情况,但我正在努力理解正确的前进道路以确保可扩展的解决方案。现在该表只有大约 320k 条记录,我可以毫无问题地使用 ALLOW FILTERING,但我意识到情况可能并非总是如此。
我设置了一个测试来查看运行两种不同的查询方法需要多长时间。ALLOW FILTERING 方法目前是最快的,但它可能会保持这种状态吗?这就是我知识匮乏的地方。
我有一个想法,添加另一个字段,即星期几,也可能是月份字段。我的想法是这可能允许在查询中进行更多过滤,因此我不必像下面所做的那样遍历所有代币,但我不知道这是否是个好主意。如果我这样做,我是否将它们设为主键?认为这是我对 Cassandra 最困惑的地方,但并非完全如此;也许只是不够自信。
CQL 表说明:
CREATE TABLE cryptocoindb.worldcoinindex (
name text,
timestamp int,
label text,
price_btc double,
price_cny double,
price_eur double,
price_gbp double,
price_rur double,
price_usd double,
volume_24h double,
PRIMARY KEY (name, timestamp)
) WITH CLUSTERING ORDER BY (timestamp ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction …
Run Code Online (Sandbox Code Playgroud)