MySQL:所有用户使用一个数据库,或者每个用户使用多个数据库



我有一个现有的系统(相应地,在PHP上,在AWS EC2和RDS上的MYSQL(。MySQL(InnoDB(作为数据库的当前统计数据总大小为600GB(来自phymyadmin(,包含我的程序所需的近150个表。在这两个表(Order,Order_items(中,每个表都包含超过200GB。

在数据库不断增长的同时,我们发现了一些问题。1.在任何数据库架构中进行更新以获得新功能更新都需要花费太多时间。2.长期保持相同的数据结构是否好,因为随着我们的增长,预计会有更大的数据(进入TB(?

为了解决问题1和处理问题2,我们正在努力寻找解决方案,因此在这里发布了一个问题。

我们思考的一种可能方式如下。

我们正在考虑将Order、Order_items(以及此类较大的表(分离,以存储每个用户基本数据库,而不是单个数据库中所有内容的当前结构。因此,对于每个用户,Order、Order_items将存储在单独的数据库中,并将其他表存储在公共数据库中。(一个主数据库,x个客户数据库用于此类条目。(因此,数据将被隔离。

此处提到的缺陷-目录结构越来越大,用于存储每个用户的数据库。

获取引用,这表明当是较小的数据库时,这不是一个好的选择。[http://datacharmer.blogspot.com/2009/03/normalization-and-smoking.html][可以在mysql中创建的数据库的最大限制?][https://forums.mysql.com/read.php?20,7469274705#消息-74705]

当一个表中有较大的数据时,无法清楚地了解该怎么办。

将每个用户的表分开是一个更好的选择,还是任何其他可以满足长期数据增长的选择(上面提到的第1点和第2点(?

(在MySQL中…(DATABASE更像是一个逻辑和管理结构,与性能无关。

在磁盘上,数据库是一个目录;该数据库中的表是该目录中的1-3个文件。当你在一个目录中有成千上万的文件或子目录时,操作系统就会开始阻塞。但听起来你并没有达到那个规模。

在MySQL中,无论两个表(即JOINed等(是在同一数据库(目录(中还是分开,基本上都没有性能差异。

至于"安全"。。。每个用户都有一个单独的数据库,可以更容易地为不同的用户授予不同的访问权限。仅此一点,就可能成为每个用户拥有数据库的原因。

表的大小可能会对性能产生影响,但我们通常谈论的是10亿行或1 TB。即便如此,索引等也可以控制问题。应该查看一个200GB的表,看看您是否有最小大小的数据类型、足够的规范化,但没有过度规范化。适当的索引,尤其是复合索引,而不是额外的索引等

CCD_ 2影响所讨论的一个表;数据库结构是什么并不重要。顺便说一句,MySQL 8.0现在有一些"即时"更改。

您的一台服务器的容量会增长吗?那你会怎么做?启动另一台服务器,并将一些用户迁移到其中?在这种情况下,每个用户拥有db可能会更方便。然后,您只需将一个数据库作为一个单元进行移动;其他一切都没有受到影响。(也就是说,你已经被用户"分片"了。(

除了Grant表之外,是否有用户共享的表?使用每个用户的数据库,使其成为自己的数据库。

至于升级模式时,有很多技术,没有一种是完美的。我会单独研究每一个案例。添加列的一种技术是构建一个平行表(垂直分区(来容纳新列。这是零停机时间,但很草率。下次你不能使用这个技巧时,你可以取消这些列的分区。

150张桌子对于一个应用程序来说似乎太多了。

一张200GB的表听起来像是你节省了比需要的更多的东西。想想汇总表吧。

或者我误解了这个问题。。。你有吗

  • 一组150个表,其中包含所有用户
  • 一个数据库包含多组150个表,每个用户一组
  • 许多数据库,每个用户一个,每个数据库有150个表

最新更新