2017-08-07 83 views
0

每次在我的网站上发出请求时,都会将有关该事件的某些数据记录到数据库(Yandex ClickHouse)中。如果以大小至少为1000的块进行插入,ClickHouse的工作速度将大大加快。在每个请求中,我希望将数据发送到另一台要存储数据的计算机,然后在缓冲区达到某些大小时将其清除到数据库,说1000.我正在考虑使用RabbitMQ消息传递/缓冲,但我不知道这是正确的工具。有什么建议么?用于批量插入的缓冲区数据

回答

1

我们选择了让nginx的发送访问日志JSON格式到系统日志服务器(syslog-ng的) syslog-ng可以使用外部应用程序。并且可以将STDIN数据导入到应用程序中。所以我们写了一个golang实用程序来批量插入clickhouse。

这对我们很有帮助。

Ofcrouse你也可以编写一个golang工具来从rabbitmq和bulk插入到clickhouse。

在高峰期我们每秒处理140 k条消息,所以我写了golang每秒处理一条查询。所以它会根据每秒消息的数量自动缩放。直接创建用于此目的

https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/configuring-destinations-program.html

http://nginx.org/en/docs/syslog.html

1

Buffer台发动机。 不久之后,您将使用此类引擎创建表并写入此表/从此表中读取。 所有记录将被缓存在RAM中,并根据设置自动刷新到源表。