Clickhouse数据写入机制

Clickhouse数据写入机制

Clickhouse数据写入方式

clickhouse数据写入方式由async_insert 和 wait_for_async_insert 两个参数控制

async_insert 作用于服务端

  • async_insert 默认为0,表示同步插入数据,每次插入数据都会在服务端生成一个分区目录(part),如图1所示

  • async_insert = 1,表示异步插入数据,服务端会攒够一定数据量的数据才会生成一个分区目录,并把数据写入分区目录(part)如图2所示,注意:这部分数据只有在数据写入分区目录之后才会被客户端查询到,
    在这里插入图片描述

图1

wait_for_async_insert作用于客户端

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

在这里插入图片描述

图2

在这里插入图片描述

图3

Clickhouse数据写入方式配置方法

  • 用户级别设置,如下案例设置default用户使用异步方式写入数据
ALTER USER default SETTINGS async_insert = 1
  • 插入数据时设置,如下案例表示本次插入数据使用异步方式写入数据,并且客户端等待服务端完成数据写入
INSERT INTO YourTable SETTINGS async_insert=1, wait_for_async_insert=1 VALUES (...)
  • JDBC链接时设置,如下案例如下案例,改jdbc所有插入数据使用异步方式写入数据,并且客户端不等待服务端完成数据写入,这样能提升数据写入效率,但是当服务端异常重启有丢失数据的风险,由于写入过快影响服务端稳定性
"jdbc:ch://HOST.clickhouse.cloud:8443/?user=default&password=PASSWORD&ssl=true&custom_http_params=async_insert=1,wait_for_async_insert=0"

问题

1、当异步写入时,满足什么条件Clickhouse服务端会把内存数据刷写到磁盘?

当满足以下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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ClickHouse 是一个列式数据库管理系统,用于存储和处理大规模数据。在写入 ClickHouse 数据时,可能会涉及到数据一致性问题。 ClickHouse 默认情况下是可扩展的,它使用主从复制机制提供高可用性。在数据写入时,首先将数据写入主节点,然后主节点将数据进行复制并同步到所有从节点上。这确保了数据的冗余备份和高可用性。 然而,由于主从复制需要一定的时间,从节点可能会稍有延迟。因此,从节点上的数据可能会略微滞后于主节点上的数据。这意味着当数据写入完成后,立刻从从节点上查询可能无法得到最新的结果。 为了解决这一问题,ClickHouse 提供了两个级别的一致性保证: 1. 弱一致性(Eventual Consistency):这是 ClickHouse 的默认行为。在写入后的瞬间,从节点可能会滞后于主节点,但之后它们会趋向于一致。这种滞后是由于数据在网络上的传输延迟造成的。这种弱一致性可以满足大多数应用场景的需求,尤其是大规模数据分析和实时报表生成。 2. 强一致性(Strong Consistency):ClickHouse 也提供了强一致性的选项,可以通过配置来确保主节点和从节点的数据保持一致。使用这种模式会引入一定的性能开销,因为主节点会在每次写入操作完成后等待所有从节点进行数据复制和同步。 在实际应用中,根据具体的业务需求和对数据一致性的要求,可以选择适合的一致性级别。弱一致性是 ClickHouse 的默认模式,适用于大多数场景。而如果对数据实时一致性和精确性要求很高,可以选择强一致性模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值