我想创建一个Python3MySQL并暂时保存,然后将这些数据传递到云MySQL数据库。
的想法是,它充当缓冲区对于本地网络出现故障时的条目,缓冲区将能够在以后的日期传递这些条目,理论上提供容错.
我对复制和gtid做了一些研究,我目前正在学习这些概念。然而,我想写我自己的解决方案,或者至少让它是一个更小的程序,而不是复制服务器端的完整实现。
我已经有一个程序,生成一些MySQL数据来填充我的数据库,我需要帮助的关键部分将是缓冲区方面/实现(我所拥有的代码本身并不重要,因为我可以稍后重新编写)。
我将非常感谢任何好的资源或帮助,谢谢!我将使用消息队列实现您所描述的。
示例:https://hevodata.com/learn/python-message-queue/
思路是在本地计算机上运行消息队列服务。您的Python应用程序将条目推入MQ,而不是直接提交到数据库。
然后,您需要另一个后台任务,称为worker,您也可以用Python或其他语言编写它,它从MQ中获取项,并在云数据库可用时将它们写入云数据库。如果云数据库不可用,则后台工作线程暂停。
当后台工作线程暂停时,MQ中的数据可以增长。如果持续时间太长,您可能会耗尽空间。但希望增长速度足够慢,并且云数据库定期可用,因此发生这种情况的风险很低。
关于你对业绩的评价。
这是一种不同的应用程序架构,因此有利有弊。
一方面,如果您的应用程序正在"编写"到本地MQ而不是远程数据库,在应用程序看来,写操作的延迟可能会更低。
另一方面,发送到MQ不会立即写入数据库。仍然需要一个worker提取一个项目并启动它自己对数据库的写入的步骤。因此,从应用程序的角度来看,在数据出现在数据库之前会有短暂的延迟,即使数据库似乎可用。
因此,应用程序不能依赖于在应用程序将数据推送到MQ后立即准备查询的数据。也就是说,它可能非常迅速,不到1秒,但这与直接写入数据库不同,后者确保在写入后立即准备好查询数据。
worker将项目写入数据库的性能应该与应用程序将相同项目写入相同数据库的性能相同。从数据库的角度来看,没有任何变化。