首页 / 知识
关于MySQL分区/分片/拆分:MySQL分区/分片/拆分-走哪条路?
2023-04-14 07:57:00

MySQL Partitioning / Sharding / Splitting - which way to go?我们拥有一个大约70 GB的InnoDB数据库,我们希望在未来2到3年内它将增长到数百GB。大约60%的数据属于单个表。目前,数据库运行良好,因为我们有一台具有64 GB RAM的服务器,因此几乎整个数据库都可以容纳到内存中,但是我们担心将来数据量会大大增加。目前,我们正在考虑一种拆分表的方法(尤其是占数据最大部分的表),而我现在想知道,什么是最好的方法。 我目前知道的选项是
我们的应用程序基于J2EE和EJB 2.1构建(希望有一天我们会切换到EJB 3)。 你有什么建议?
编辑(2011-02-11):
编辑(2014-06-04): 此设置应该持续两年。然后,我们将不得不最终开始实施分片解决方案,或者仅购买具有1 TB RAM的服务器,这将使我们继续运行一段时间。 编辑(2016-01-18): 此后,我们已将大表放在单独服务器上自己的数据库中。当前,该数据库的大小约为1.9 TB,另一个数据库(除"大"表以外的所有表)的大小为1.1 TB。 当前的硬件设置:
此设置的性能很好。 一旦该42 GB表不再适合内存,您肯定会开始遇到问题。实际上,一旦它不再适合内存,性能就会迅速下降。一种测试方法是将该表放在内存较少的另一台计算机上,并查看其性能如何。
这是不正确的。分区(通过MySQL 5.1中的功能或使用MERGE表的相同操作)可以提供显着的性能优势,即使这些表位于同一驱动器上也是如此。 举例来说,假设您正在使用日期范围在大表上运行SELECT查询。如果表是完整的,查询将被迫扫描整个表(以这种大小,即使使用索引也可能很慢)。分区的优点是查询将仅在绝对必要的分区上运行。如果每个分区的大小为1 GB,而您的查询只需要访问5个分区即可满足要求,那么合并的5 GB表对于MySQL来说要比42 GB的怪物版本容易得多。 您需要问自己的一件事是如何查询数据。如果您的查询有可能只需要访问某些数据块(即日期范围或ID范围),则证明进行某种分区是有益的。 我听说MySQL 5.1分区仍然存在一些问题,特别是与MySQL选择正确的密钥有关。 MERGE表可以提供相同的功能,尽管它们需要更多的开销。 希望对您有帮助...祝您好运! 如果您认为自己将受到IO /内存的限制,那么我认为分区将无济于事。像往常一样,首先进行基准测试将帮助您找出最佳方向。如果您没有配备64GB内存的备用服务器,则可以随时向供应商索取"演示单元"。 如果您不希望有1个查询汇总报告,则我倾向于分片。我假设您将分片整个数据库,而不仅仅是大表:最好将整个实体保持在一起。好吧,无论如何,如果您的模型能够很好地拆分。 这是一个在大型数据流的真实示例中MySql分区可以做什么的一个很好的例子: http://web.archive.org/web/20101125025320/http://www.tritux.com/blog/2010/11/19/partitioning-mysql-database-with-high-load-solutions/11/1 希望对您的情况有所帮助。 我会选择MariaDB InnoDB +分区(按键或按日期,具体取决于您的查询)。 我这样做了,现在我不再有任何数据库问题。 数秒之内即可将MySQL替换为MariaDB ...所有数据库文件保持不变。 前不久在Microsoft ArcReady事件中,我看到了有关可能对您有用的缩放模式的演示。您可以在线查看幻灯片。 您可能最终希望拆分大表。在考虑第二台服务器之前,您可能希望将其放在单独的硬盘上。使用MySQL进行操作是最方便的选择。如果有能力,那就去做。 但 实际上,一切都取决于数据库的使用方式。统计。
那就是大多数人告诉我的,所以我认为我最终将不得不服用该药... 大桌子做什么?
如果要拆分它,则有几种选择: 仅当您的数据可以轻松地分成多个块时,才可以按行拆分它。例如诸如Basecamp之类的东西有多个完全独立的帐户。您可以将50%的帐户保留在一个表中,并将50%的帐户保留在另一台计算机上的另一个表中。 按行拆分适用于行大小包含大文本字段或BLOBS的情况。如果您有一个包含(例如)用户图像和大量文本的表,则可以将图像植入完全不同的表中。 (在另一台机器上) 您在这里破坏了规范化,但是我认为这不会引起太多问题。 首先,拆分表并不重要,除非您还将某些表移到单独的物理卷上。 其次,不一定要移动最大物理尺寸的表。您可能有一个较小的表,可以进行更多活动,而大表保持相当恒定或仅附加数据。 无论您做什么,都不要自己实施。让数据库系统处理它。 |
最新内容
相关内容
linux进程运行命令?
linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,linux常用命令有哪些1、linux系统常用操作命令linux系统常用操作命linux运行vim命令?
linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令,如何使用Linux系统中的Vim编辑器1、vim编辑器的三种模式:一般模式linux监控命令运行?
linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,linux服务器监控的几个方法和命令uptime 该命令直观的显示了服务器linux数据库查找命令?
linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,在linux中如何用命令查找文件在哪使用查找命令 “find”命令允许linux数据库同步命令?
linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,DB2数据库在linux操作系统的指令有哪些?1、linux系统常用操作命令linux自动运行命令?
linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,linux计划任务(自动化执行任务的利器)1、Linux计划任务是一种自动linux开启运行命令?
linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,linux中如何开机启动运行指定的应用程序或指令?1、开机启动时自动运linux运行wps命令?
linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps支持linux命令行下word转pdf吗?1、通过浏览器进入到wps官网,然后点linux运行cmd命令?
linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑运行命令怎么打开电脑运行命令需要同时按下“win图标”键和“R”linux建立数据库命令?
linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服务,linux中在shell中怎么创建一个数据库1、以下的文章主要讲述的是linux命令进数据库?
linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,主机,linux系统mysql数据库怎么进入数据库首先确保linux下mysql安linux运行两个命令?
linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Linux下必须知道的11个网络命令1、netstat -r:打印路由表。路由表保