我有一个在aws上运行的mysql实例,每秒约为5000个插入。任何想法,如果我使用binlog(行)和binlog ateer?

检查此链接

从我的理解中,一个垃圾箱日志达到定期轮询了MySQL Binlog,以便成为“实时”数据连接。binlog剪辑在nodejs中运行。

重点是,我必须使用mysql,我想使用meteor将数据实时到我的客户端。因此,我想到了使用这个binlog剪辑。

因为MySQL DB将被密切地填充(每秒5000个插入),我想知道Binlog / Binlog剪辑的位置是严重的性能问题。

grts,tom

有帮助吗?

解决方案

我已经开发了具有类似功能的软件,能够使用MySQL Replication Stream(二进制日志,Binlog)响应于数据库中的插入/更新/删除时捕获近乎实时的事件。

这里是我对性能做出的一些观察结果。幸运的是,潜在的热点在很大程度上彼此独立。

我会假设,因为我不熟悉你引用的节点包,并且只刚刚授予他们的代码是诅咒审查,所以他们实际上并不通过轮询“拖尾”,但实际上实际上是模拟从属/副本服务器并连接到主并请求复制流。

第一个潜在的瓶颈是母版写入所需的Binlog数据量的能力(I / O吞吐量是主要的Cobstraint)。如果您的主人已经在ROW格式中记录,则此问题已经解决了。如果没有,则切换您的Binlog格式,并查看。无论如何,我更喜欢 ROW格式,因为查询变坏的数据恢复是非常有用的,或者应用程序对数据不应该拥有的数据。有可能(使用第三方工具)捕获发生的事情并反转它 - 在默认配置中,当发生删除时(例如)删除的数据实际写入二进制日志。

资源消耗的下一个点是通过这样的工具到主设备的从属连接,主机推动数据。常见的误解是奴隶“民意调查”主人。实际上,从站启动了连接,但主机推动数据。这实际上是主机上的负载,当连接的奴隶数量小(例如,5或更少)时对性能影响很小。通过将“Binlog剪辑”连接到主设备,而是将此负载从主设备连接到主设备,而是配置了Master的现有从站,配置了log_slave_updates

从主站传输到伪从站可以吃大量的网络带宽,因此您的外部实用程序应支持MySQL客户端/服务器压缩协议以减少此带宽。使得此能力可以实现10:1的压缩比,具体取决于有效载荷。

最终的疼痛点是外部实用程序本身。 MySQL Binlog格式是一种非常紧密的二进制格式(因此必须解析和解码的“二进制日志”)。外部实用程序可以解压缩和操作该数据流的效率将确定可以发出检测到的事件的实时接近,因为效率低下代码将导致您的决定事件流进一步延迟,但此因素不会对主服务器本身产生任何性能影响。

简而言之,如果您的主人可以处理为您所期望的流量的数量生成行格式Binlogs的工作量,其余的潜在问题仍然是潜在的问题,但它们应该对主服务器上没有有意义的性能影响,本身。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top