如何提高卡桑德拉的插入性能?
How to improve insert performance in cassandra?
我有一个 cassandra table,里面有数据。架构如下。
当我插入这个 table 时需要 2 秒,这真的很慢,因为我们需要实时插入 1000 条记录。我错过了什么?
列表列将始终有 100 个值。
请帮忙。
CREATE TABLE dynodemo.normalized_sensor_data (
user_id timeuuid,
patient_sensor_session_id timeuuid,
co2 int,
dbp list<int>,
ecg list<double>,
ext_co int,
ext_density int,
ext_nitrousoxide int,
ext_o3 int,
ext_orgcmp int,
ext_sulphuroxide int,
ext_temp int,
heart_rate list<int>,
humidity list<double>,
o2 int,
pressure list<int>,
pulse_ox_ir list<int>,
pulse_ox_red list<int>,
raw_ecg list<int>,
respiration_rate list<int>,
rr_int list<int>,
sbp list<int>,
session_end_time timestamp,
session_start_time timestamp,
spo2 list<double>,
PRIMARY KEY (user_id, patient_sensor_session_id)
) WITH CLUSTERING ORDER BY (patient_sensor_session_id ASC);
收集比正常细胞慢得多。您正在使用大量列表,假设这些列表会对性能产生重大影响。您可能会发现将 100 个元素序列化为 json 并将其存储为文本字段(甚至压缩文本字段)会更容易。
您将其称为单个插入,您有 12 个包含 100 个项目的列表 - 实际上写入了 1200 个单元格,这是一个合理的数字。 2 秒的写入仍然不正常 - 这可能是由于某种暂停(可能是由于您使用所有这些列表创建的 java 个对象的数量导致的 GC 暂停)
即使在列中使用列表后,下面也解决了我们的问题。
我们将 spark worker 节点与 cassandra 节点托管在同一台服务器上,因此将它们本地化有助于插入。
有趣的是,当我们将丢失的列更改为 text/string 时,我们的性能是一样的。
谢谢
我有一个 cassandra table,里面有数据。架构如下。
当我插入这个 table 时需要 2 秒,这真的很慢,因为我们需要实时插入 1000 条记录。我错过了什么? 列表列将始终有 100 个值。
请帮忙。
CREATE TABLE dynodemo.normalized_sensor_data (
user_id timeuuid,
patient_sensor_session_id timeuuid,
co2 int,
dbp list<int>,
ecg list<double>,
ext_co int,
ext_density int,
ext_nitrousoxide int,
ext_o3 int,
ext_orgcmp int,
ext_sulphuroxide int,
ext_temp int,
heart_rate list<int>,
humidity list<double>,
o2 int,
pressure list<int>,
pulse_ox_ir list<int>,
pulse_ox_red list<int>,
raw_ecg list<int>,
respiration_rate list<int>,
rr_int list<int>,
sbp list<int>,
session_end_time timestamp,
session_start_time timestamp,
spo2 list<double>,
PRIMARY KEY (user_id, patient_sensor_session_id)
) WITH CLUSTERING ORDER BY (patient_sensor_session_id ASC);
收集比正常细胞慢得多。您正在使用大量列表,假设这些列表会对性能产生重大影响。您可能会发现将 100 个元素序列化为 json 并将其存储为文本字段(甚至压缩文本字段)会更容易。
您将其称为单个插入,您有 12 个包含 100 个项目的列表 - 实际上写入了 1200 个单元格,这是一个合理的数字。 2 秒的写入仍然不正常 - 这可能是由于某种暂停(可能是由于您使用所有这些列表创建的 java 个对象的数量导致的 GC 暂停)
即使在列中使用列表后,下面也解决了我们的问题。
我们将 spark worker 节点与 cassandra 节点托管在同一台服务器上,因此将它们本地化有助于插入。
有趣的是,当我们将丢失的列更改为 text/string 时,我们的性能是一样的。
谢谢