如何提高卡桑德拉的插入性能?

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 时,我们的性能是一样的。

谢谢