草庐IT

mysql - MySQL 的扩展解决方案(复制、集群)

coder 2023-05-10 原文

startup我正在工作,我们现在正在考虑为我们的数据库扩展解决方案。 MySQL 的情况有些令人困惑(至少对我而言),它有 MySQL cluster , replicationMySQL cluster replication (从 5.1.6 版开始),这是 MySQL 集群的异步版本。 MySQL 手册解释了其 cluster FAQ 中的一些差异。 ,但很难从中确定何时使用其中之一。

我很感激那些熟悉这些解决方案之间的差异和优缺点的人的任何建议,以及您建议何时使用每种解决方案。

最佳答案

我一直在阅读有关可用选项的大量内容。我还接触了 High Performance MySQL 2nd edition,我强烈推荐它。

这是我设法拼凑起来的:
聚类

一般意义上的集群是在许多服务器之间分配负载,这些服务器对于外部应用程序来说是一台服务器。

MySQL NDB 集群

MySQL NDB Cluster 是一个分布式的、内存中的、无共享的存储引擎,具有同步复制和自动数据分区(对不起,我从高性能书中借用了字面意思,但他们在那里写得很好)。对于某些应用程序来说,它可以是一种高性能的解决方案,但 Web 应用程序通常不能很好地在它上面工作。

主要问题是,除了非常简单的查询(仅接触一张表)之外,集群通常必须在多个节点上搜索数据,从而导致网络延迟蔓延并显着减慢查询的完成时间。由于应用程序将集群视为一台计算机,因此无法告诉它从哪个节点获取数据。

此外,内存要求对于许多大型数据库来说是不可行的。

连续红杉

这是 MySQL 的另一个集群解决方案,它充当 MySQL 服务器之上的中间件。它提供同步复制、负载平衡和故障转移。它还确保请求始终从最新副本中获取数据,自动选择具有最新数据的节点。

我读过一些 good things在它上面,总的来说听起来很有希望。

联邦

联邦类似于聚类,所以我也把它拉到了这里。 MySQL 通过联合存储引擎提供联合。与 NDB 集群解决方案类似,它仅适用于简单查询 - 但对于复杂查询的集群更糟糕(因为网络延迟要高得多)。

复制和负载平衡

MySQL 具有在不同服务器上创建数据库复制的内置能力。这可以用于许多事情 - 在服务器之间分配负载、热备份、创建测试服务器和故障转移。

复制的基本设置涉及一台主服务器处理主要写入和一个或多个从服务器只处理读取。更高级的变体是 master-master配置,它允许通过同时写入多个服务器来扩展写入。

每种配置都有其优点和缺点,但它们共有的一个问题是复制延迟 - 由于 MySQL 复制是异步的,并非所有节点始终拥有最新数据。这要求应用程序知道复制并合并复制感知查询以按预期工作。对于某些应用程序,这可能不是问题,但如果您总是需要最新的数据,事情就会变得有些复杂。

复制需要一些负载平衡来在节点之间分配负载。这可以像对应用程序代码进行一些修改一样简单,或者使用专用的软件和硬件解决方案。

分片和分区

分片是扩展数据库解决方案的常用方法。您将数据拆分为更小的碎片,并将它们分布在不同的服务器节点上。这需要应用程序知道对数据存储的修改才能有效地工作,因为它需要知道在哪里可以找到它需要的信息。

有一些抽象框架可以帮助处理数据分片,例如 Hibernate Shards ,Hibernate ORM 的扩展(不幸的是它是用 Java 编写的。我使用的是 PHP)。 HiveDB是另一个这样的解决方案,它也支持分片重新平衡。

其他

狮身人面像

Sphinx是一个全文搜索引擎,可用于远不止测试搜索。对于许多查询,它比 MySQL 快得多(尤其是在分组和排序方面),并且可以并行查询远程系统并聚合结果 - 这使得它在与分片一起使用时非常有用。

一般来说,sphinx 应该与其他扩展解决方案一起使用,以获得更多可用的硬件和基础设施。缺点是您再次需要应用程序代码来了解 sphinx 才能明智地使用它。

总结

扩展解决方案因需要它的应用程序的需求而异。对于我们和大多数 Web 应用程序,我相信复制(可能是多主)是负载均衡器分配负载的方式。特定问题区域(大表)的分片也是能够水平扩展的必要条件。

我还将试一试Continent Sequoia,看看它是否真的能做到它所 promise 的,因为它将对应用程序代码进行最少的更改。

关于mysql - MySQL 的扩展解决方案(复制、集群),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189903/

有关mysql - MySQL 的扩展解决方案(复制、集群)的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. c - mkmf 在编译 C 扩展时忽略子文件夹中的文件 - 2

    我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。

  4. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  5. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  9. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  10. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

随机推荐