MySQL 复制的一个主要问题是从服务器是单线程的。这可能会导致复制滞后。
Postgresql 如何处理复制?它(或诸如 slony-I 之类的附加组件)是否允许多线程从属?
总体而言,MySQl 和 Postgresql 复制的优缺点是什么?我经常听说 MySQL 复制比 postgresql 复制更好。这是公平的说法吗?它到底好在哪里?
答案1
据我所知,Mysql 和 Postgres 的所有复制都是单线程的。多线程复制是一个非常复杂的问题,因为你必须确保无序更新不会影响最终数据。
答案2
你可以通过将数据拆分成几部分并独立复制来完成此操作(至少在带有 slony 或其他插件的 PostgreSQL 中)。但这实际上只有在数据由独立部分组成且不需要其间事务完整性的情况下才有效,因为如果你独立复制数据,显然无法维持事务完整性。
答案3
截至目前,MySQL 的最新 GA 版本 (MySQL-5.6) 是 doSQL-5.6,因为并行性是通过数据库实现的。这意味着您将只有一个线程在一个数据库上工作。要启用此功能,您需要设置选项--slave-parallel-workers
。
下一个 MySQL 版本 5.7 尚未正式发布,但支持更多多线程。这意味着您可以在 5.7 中对同一数据库使用多个线程。在 5.7 中,您可以使用选项选择多线程策略--slave-parallel-type
。
您可以在文档中找到这些选项的详细信息:复制从属选项和变量
除此之外,您还可以在 MySQL-5.7 中找到许多其他功能,即:改进的半同步复制、多源复制、组复制(实验室功能)等。您可以在工程师撰写的博客中详细了解所有这些功能:http://mysqlhighavailability.com/