High performance mysql书建议,对于分片博客应用程序,可能需要将评论数据放在2个分片中:首先,在发布评论的人的分片上,以及存储帖子的分片上。
因此,这提出了如何可靠地复制此数据的问题。建议在分片中使用以下哪些数据复制选项?
选项1:从PHP脚本中单独插入2个。
优点: a)逻辑在应用层。
缺点: a)用户持有2个插入。 b)每个试图插入类似数据的客户都需要复制这个逻辑
结论:似乎合理。
选项2:表单联合表并使用一些触发器来处理重复的插入。
优点: a)应用层不需要担心多个插页
缺点: a)每个分片都需要与每个其他分片建立联合连接; b)联盟将在局域网中的机器上工作,但在2个不同的站点上工作。 c)如果连接到联合服务器失败怎么办?
结论:似乎不是一个好主意。
选项3: RabbitMQ之类的消息
优点: a)不同的客户可以在一个地方插入数据,所有订阅者都可以使用插入。
缺点: a)复杂; b)可能会为了托管消息服务器和客户端而施加开销; c)不确定如何使用查找服务找到合适的分片
结论:不确定
选项4:您的建议?
我将非常感谢你的帮助。
答案 0 :(得分:2)
正如你所指出的,在各个分片之间有触发器是愚蠢的;分片的全部原因是独立的数据库 操作。所以你可以马上扔掉它。
同时更新两个表是最少的方法 移动部件。从长远来看,它将是最可维护的。 如果出现问题,它将是最容易调试的。
但如果响应时间很重要,那么你可能会想到某种方式 消息传递方法:更新逐个注释表,并排队a 用于更新逐个用户表的消息。如果需要一个小时 要处理的消息 - 或者如果它在系统崩溃中丢失 - 没什么大不了的,你可以随时恢复。绝不应该使用消息传递方法来更新两个表。
回答:@kdgregory链接:https://softwareengineering.stackexchange.com/a/134607/41398