Clickhouse中有多个小插件

aln*_*iks 7 clickhouse

我在clickhouse中有一个事件表(MergeTree),并希望同时运行很多小插入.但是,服务器变得过载并且没有响应.而且,一些插入物丢失了.clickhouse错误日志中有很多记录:

01:43:01.668 [ 16 ] <Error> events (Merger): Part 201 61109_20161109_240760_266738_51 intersects previous part
Run Code Online (Sandbox Code Playgroud)

有没有办法优化这些查询?我知道我可以使用批量插入来处理某些类型的事件.基本上,运行一个包含许多记录的插入,clickhouse处理得非常好.但是,某些事件(例如点击或打开)无法以这种方式处理.

另一个问题:为什么clickhouse决定存在类似的记录,何时不存在?插入时有类似的记录,它们与索引中的字段相同,但其他字段不同.

我不时也会收到以下错误:

Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, message: Connect to localhost:8123 [ip6-localhost/0:0:0:0:0:0:0:1] timed out, host: localhost, port: 8123; Connect to ip6-localhost:8123 [ip6-localhost/0:0:0:0:0:0:0:1] timed out
    ... 36 more
Run Code Online (Sandbox Code Playgroud)

主要是在项目构建期间运行针对clickhouse数据库的测试时.

小智 13

Clickhouse 为此提供了特殊类型的表 - Buffer。它存储在内存中,允许许多小的插入没有问题。我们每秒有近 200 个不同的插入 - 效果很好。

缓冲表:

CREATE TABLE logs.log_buffer (rid String, created DateTime, some String, d Date MATERIALIZED toDate(created))
ENGINE = Buffer('logs', 'log_main', 16, 5, 30, 1000, 10000, 1000000, 10000000);
Run Code Online (Sandbox Code Playgroud)

主表:

CREATE TABLE logs.log_main (rid String, created DateTime, some String, d Date) 
ENGINE = MergeTree(d, sipHash128(rid), (created, sipHash128(rid)), 8192);
Run Code Online (Sandbox Code Playgroud)

手册中的详细信息:https : //clickhouse.yandex/docs/en/operations/table_engines/buffer/


uYS*_*foz 6

在将大量小插入处理成(非复制的)MergeTree时,这是已知问题.

这是一个错误,我们需要调查和修复.

对于变通方法,您应按照建议大批量发送插入:大约每秒一批:https://clickhouse.yandex/reference_en.html#Performance%20on%20data%20insertion.


zoo*_*ash 6

我也遇到过类似的问题,尽管还不算太糟糕-每秒执行约20次插入操作导致服务器达到很高的负载,内存消耗和CPU使用率。我创建了一个Buffer表,用于在内存中缓冲插入,然后将它们定期刷新到“真实”磁盘表中。就像魔术一样,一切都进行得很顺利:负载,内存和CPU使用率降至正常水平。令人高兴的是,您可以对缓冲区表运行查询,并从内存和磁盘中获取匹配的行-因此客户端不受缓冲的影响。参见https://clickhouse.yandex/docs/en/table_engines/buffer.html