每次在我的网站上提出请求时,有关该事件的一些数据都会记录到数据库中(yandex clickhouse)。如果在至少1000条记录的大批量中插入,clickhouse的工作速度会显著加快。每次请求时,我都希望将数据发送到另一台计算机,该计算机将存储数据,然后在缓冲区达到一定大小(例如1000)时将其刷新到数据库。我正在考虑使用rabbitmq进行消息传递/缓冲,但我不确定它是否是正确的工具。有什么建议吗?
每次在我的网站上提出请求时,有关该事件的一些数据都会记录到数据库中(yandex clickhouse)。如果在至少1000条记录的大批量中插入,clickhouse的工作速度会显著加快。每次请求时,我都希望将数据发送到另一台计算机,该计算机将存储数据,然后在缓冲区达到一定大小(例如1000)时将其刷新到数据库。我正在考虑使用rabbitmq进行消息传递/缓冲,但我不确定它是否是正确的工具。有什么建议吗?
3条答案
按热度按时间xbp102n01#
直接为此目的创建的缓冲表引擎。很快,您将使用这种类型的引擎创建表,并向该表写入/从此表读取。所有的记录将被缓冲在ram中,并根据设置自动刷新到源表中。
kokeuurv2#
我们选择让nginx将json格式的访问日志发送到syslog服务器(syslog ng)syslog ng可以使用外部应用程序。并且可以将stdin数据输入到应用程序中。所以我们编写了一个golang实用程序来批量插入clickhouse。
这对我们很有效。
ofcrouse您还可以编写一个golang工具来使用rabbitmq并将其批量插入clickhouse。
在峰值时,我们每秒处理140k条消息,所以我写了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
rjee0c153#
是的,rabbitmq它是一个适合您的用例的工具,但是您也可以尝试使用缓冲表引擎https://clickhouse.yandex/docs/en/table_engines/buffer.html