建议使用以下哪种跨碎片的数据复制选项


Which of the following data duplication options across shards is recommended?

高性能mysql书建议,对于博客应用程序的分片,可能需要将评论数据放在两个分片上:首先,放在发布评论的人的分片上,以及放在存储帖子的分片中。

因此,这就提出了如何可靠地复制这些数据的问题。建议使用以下哪种跨碎片的数据复制选项

选项1:从PHP脚本中进行两次单独的插入
优点:a)逻辑在应用层
缺点:a)用户被扣留2次插入。b) 在每个试图插入类似数据的客户端中,都需要复制此逻辑
结论:似乎是合理的。

选项2:形成联合表并使用一些触发器来处理重复的插入
优点:a)应用层不需要担心多次插入
缺点:a)每个碎片都需要与其他碎片建立联邦连接;b) 联邦将在局域网中的机器上工作,但在两个不同的站点上呢。c) 如果到联邦服务器的连接失败,该怎么办
结论:这似乎不是一个好主意。

选项3:消息传递,如RabbitMQ
优点:a)不同的客户端可以在一个地方插入数据,所有订阅者都可以使用该插入
缺点:a)复杂;b) 为了托管消息服务器和客户端,可能会增加开销;c) 不确定它将如何使用查找服务来定位适当的碎片
结论:不确定

选项4:你的建议?

我将非常感谢你的帮助。

正如你所指出的,在不同的碎片之间设置触发器是愚蠢的;分片的全部原因是独立的数据库操作。所以你可以马上把它扔掉。

同时更新两个表是最少的方法运动部件。从长远来看,它将是最容易维护的。如果出现问题,它将是最容易调试的。

但是,如果响应时间很重要,那么你可以考虑消息传递方法:按条目表更新注释,并将消息,以按用户表更新注释。如果需要一个小时要处理的消息,或者如果它在系统崩溃中丢失--没什么大不了的,你总能康复。决不应该使用消息传递方法来更新这两个表。

回答者:@kdgregory链接:https://softwareengineering.stackexchange.com/a/134607/41398