Как оптимизировать скорость вставки в Hypertable? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть таблица (Postgresql 9.6), подобная этой

CREATE TABLE m_trade ( 
    "alias" Character Varying( 32 ),
    "ts" Bigint NOT NULL,
    "side" Character( 1 ),
    "price" Double Precision,
    "qty" Bigint );

с 50 000 000 строк.

После создания расширения timescaledb -

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Я создаюhyper_table из пустой таблицы -

CREATE TABLE d_trade ( 
    "alias" Character Varying( 32 ),
    "ts" Bigint NOT NULL,
    "side" Character( 1 ),
    "price" Double Precision,
    "qty" Bigint );


SELECT create_hypertable('d_trade', 'ts', chunk_time_interval => 86400 , number_partitions =>31);

после этого в d_trade таблице я получаю

INDEX "d_trade_ts_idx"  and 

TRIGGER ts_insert_blocker BEFORE INSERT  

INSERT INTO
    "public"."d_trade"( "alias", "price", "qty", "side", "ts" )
select "alias", "price", "qty", "side", "ts" from m_trade

Теперь, если я попытаюсь вставить строку в таблицу m_trade с помощью

INSERT INTO
    "public"."m_trade"( "alias", "price", "qty", "side", "ts" )
VALUES
    ('TESTALS', 16000, 5, 2, 1545307519)

это займет 1-1,5 мс, но эта задержит 4-5 мс

INSERT INTO
    "public"."d_trade"( "alias", "price", "qty", "side", "ts" )
VALUES
    ('TESTALS', 16000, 5, 2, 1545307519)

Как я могу оптимизировать скорость вставки на d_trade таблице?

1 Ответ

0 голосов
/ 19 января 2019

Как вы измеряете производительность этой вставки?Если вы используете что-то вроде EXPLAIN, timescaledb требует дополнительных издержек, которые могут сделать это сравнение неэффективным.Попробуйте вместо этого включить \ тайминг.Кроме того, timescaledb лучше, чем postgresql в масштабе, поэтому я бы попробовал запустить пакетные операторы, чтобы увидеть, получаете ли вы те же результаты, что и выше.

...