2014-09-01 15 views
0

我有一個單獨的行的插入物rpc_timeout(羣集是具有3個節點,並能處理其它表超過10000插入件/分鐘)RPC超時在日誌中沒有錯誤

這裏是表:

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', '[email protected]', '2014-09-01T18:04:40'); 
APPLY BATCH; 

我不知道,如果超時是由於二級索引。

一無所知任何錯誤SYSTEM.LOG

回答

0

大概打從一批超時中,第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', '[email protected]', '2014-09-01T18:04:40'); 
APPLY BATCH; 

除非有很好的理由,否則使用單獨的批處理 - 其更高性能。

+0

什麼是批處理的好例子? – tahir 2014-09-01 22:25:10

+0

實際上我已經改變了表格定義:PRIMARY KEY((process_id),event_id));並刪除了輔助索引,我可以通過process_id進行查詢,並且插入看起來效率更高,對於其中的process_id = ... – tahir 2014-09-01 22:27:27

+0

批處理將適用於多個插入需要作爲單個原子操作。它非常昂貴,所以只有在絕對需要時才使用它。 二級索引關於高基數的東西將是非常昂貴的,可能會一直推動你的集羣能力。自定義索引總是會更好。 – 2014-09-02 00:56:47

相關問題