gpt4 book ai didi

cassandra - 在 Cassandra 中从具有大量数据的表创建物化 View

转载 作者:行者123 更新时间:2023-12-04 13:00:03 27 4
gpt4 key购买 nike

我们在 Google Cloud Kubernetes 中有一个带有 3 个 pod 的 Cassandra 集群。
我们的 Cassandra 版本是 3.9,我们使用的是 Google 图片。

当我尝试从表创建物化 View 时遇到问题。

表的架构是这样的:

CREATE TABLE environmental_data (
block_id int,
timestamp timestamp,
device_id int,
sensor_id int,
.
.
.
PRIMARY KEY (block_id, timestamp, device_id, sensor_id)

我想创建一个以 device_id 作为集群键的 View ,我尝试这样做:
CREATE MATERIALIZED VIEW environmental_data_by_device AS
SELECT block_id, timestamp, device_id, sensor_id,... FROM environmental_data
WHERE block_id is not null
and timestamp is not null
and device_id is not null
and sensor_id is not null
PRIMARY KEY ((device_id), timestamp, sensor_id, block_id)
WITH CLUSTERING ORDER BY (timestamp DESC);

在本地数据量很少的情况下,一切顺利。
但是在 8000 万行的生产中,2 个 pod 崩溃了,
和 Cassandra 循环了这个错误:

Unknown exception caught while attempting to update MaterializedView! environmental_data

java.lang.IllegalArgumentException: Mutation of XXXX bytes is too large for the maximum size of XXXX



还有很多 java.lang.OutOfMemoryError: Java heap space
我该怎么做才能确保下一次尝试成功?
第二次停止生产 Cassandra 是不可想象的。

我已经成功地基于表创建了一个 View ,但它并没有那么大。

最佳答案

根据 docs , Cassandra 将同一分区内的更新视为单个突变。在您的情况下,我想这意味着每个具有相同设备 ID 的新插入都可能导致传输以前写入该分区的所有数据。
为避免这种情况,您应该考虑拆分 mat 中的数据。使用分区键查看更小的部分。例如,您可以根据测量频率引入分钟或小时宽的时间段。

关于cassandra - 在 Cassandra 中从具有大量数据的表创建物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870918/

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