【问题标题】:rpc timeout on insert with no error in logs插入时 rpc 超时,日志中没有错误
【发布时间】:2014-10-26 00:42:45
【问题描述】:

我在单行插入时有一个 rpc_timeout(集群有 3 个节点,在另一个表上可以处理超过 10000 次插入/分钟)

这是表格:

CREATE TABLE test_table (
    agent text,
    run_id text,
    process_id text,
    datetime timestamp,
    tracking_time timestamp,
    email text,
    ip text,
    event_id uuid,
    event_name text,
    message_id text,
    source text,
    url text,
    test_table text,
PRIMARY KEY ((process_id, event_name), event_id));

CREATE INDEX test_table_process_id ON test_table (process_id);

这是插入:

BEGIN BATCH
INSERT INTO test_table (message_id, run_id, event_id, ip, process_id, agent, datetime, event_name, url, test_table, email, tracking_time) VALUES ('exampleaaaaaaaaaaaaaaaaaaaaaaaaa', 'bar', 376d8e20-35ca-4615-8e9f-f0b5b4431981, 'None', 'test-dummy', 'None', '2014-08-31 17:20:24', 'hard_bounce', 'None', 'mandrill', 'example.webhook@mandrillapp.com', '2014-09-01T18:04:40');
APPLY BATCH;

不知道是不是二级索引造成的超时。

system.log 中没有任何错误

【问题讨论】:

    标签: indexing cassandra timeout cqlsh


    【解决方案1】:

    可能会从批处理中超时,2i 的开销并不大,但事务却是。请尝试使用未记录的批处理。

    BEGIN UNLOGGED
    INSERT INTO test_table (message_id, run_id, event_id, ip, process_id, agent, datetime, event_name, url, test_table, email, tracking_time) VALUES ('exampleaaaaaaaaaaaaaaaaaaaaaaaaa', 'bar', 376d8e20-35ca-4615-8e9f-f0b5b4431981, 'None', 'test-dummy', 'None', '2014-08-31 17:20:24', 'hard_bounce', 'None', 'mandrill', 'example.webhook@mandrillapp.com', '2014-09-01T18:04:40');
    APPLY BATCH;
    

    除非有很好的案例,否则使用单个写入而不是批处理 - 它的性能更高。

    【讨论】:

    • 实际上我已经更改了表定义:PRIMARY KEY ((process_id), event_id));并删除了二级索引,我可以通过 process_id 查询,并且插入似乎更有效,对于 select where process_id = ...
    • batch 将用于当您需要多个插入作为单个原子操作时。它非常昂贵,因此仅在绝对需要时才使用它。具有高基数的东西的二级索引会非常昂贵,并且可能只是让你超越你的集群能力。自定义索引总是更好。
    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多