首页  

Clickhouse数据写入机制     所属分类 clickhouse 浏览量 442
clickhouse数据写入控制参数
async_insert    wait_for_async_insert 

async_insert 作用于服务端

async_insert 默认为0,表示同步写入,每次插入数据都会在服务端生成一个分区目录(part)
async_insert = 1,表示异步写入,服务端会攒够一定数据量的数据才会生成一个分区目录,并把数据写入分区目录(part)
数据写入分区目录之后才会被客户端查询到


wait_for_async_insert作用于客户端

wait_for_async_insert 默认为1 ,等服务端把数据写入分区目录之后,才认为本次数据写入成功
wait_for_async_insert = 0,数据传输到服务端之后,不等服务端把数据写入分区目录,立即返回成功



Clickhouse数据写入方式配置方法
用户级别设置,设置default用户使用异步方式写入数据
ALTER USER default SETTINGS async_insert = 1

插入数据时设置
INSERT INTO YourTable SETTINGS async_insert=1, wait_for_async_insert=1 VALUES (...)


JDBC连接时设置
jdbc:ch://HOST.clickhouse.cloud:8443/?user=default&password=PASSWORD&ssl=true&custom_http_params=async_insert=1,wait_for_async_insert=0"


异步写入时,满足以下3个条件中任意一个时就会刷写磁盘
缓存中数据大小超过 async_insert_max_data_size ,单位字节,默认值100000
距离本批次数据插入的第一个插入语句时间 async_insert_busy_timeout_ms,单位毫秒,默认值 200
本批次数据插入最大的插入次数 async_insert_max_query_number,单位 次,默认值:450,
该参数只有async_insert_deduplicate =1的情况下才会生效



异步插入数据能够减少小批量频繁写入分区目录数
异步插入数据 先缓存在内存里,此时客户端不能立即查询到内存的数据,满足一定条件,刷写到磁盘之后数据才对客户端可见


参考资料

https://clickhouse.com/docs/en/optimize/asynchronous-inserts#enabling-asynchronous-inserts

https://clickhouse.com/docs/knowledgebase/are_materialized_views_inserted_asynchronously

https://clickhouse.com/docs/en/optimize/bulk-inserts

上一篇     下一篇
数据结构与算法知识点

《给孩子的高效学习手册》笔记

哈佛大学推荐的20个快乐习惯

clickhouse写入注意点

《唤醒孩子的内驱力》笔记

量化选基技术指标和公式