Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在单个数据库服务器上跨多个数据库分片用户数据_Mysql_Database_Architecture_Scale - Fatal编程技术网

Mysql 在单个数据库服务器上跨多个数据库分片用户数据

Mysql 在单个数据库服务器上跨多个数据库分片用户数据,mysql,database,architecture,scale,Mysql,Database,Architecture,Scale,我是一个自学成才的程序员,我总是遵循某些设计参数,这些参数更多地基于常识,而不是研究,当涉及到构建这样规模的系统时。然而,我刚刚意识到我的系统的一个组件可能不是必需的 一般来说,我将用户数据分组,并将其分配给特定的mysql服务器。当负载平衡器后面的内容服务器收到请求时,我使用来自请求的数据(如用户ID)通过查询存储在DynamoDB上的中心表来解析存储用户数据的数据库,该表可以处理大量的负载 但是,我也将用户数据分配给服务器中的数据库。就像我将在每台服务器中有100个数据库,它们都具有相同的表

我是一个自学成才的程序员,我总是遵循某些设计参数,这些参数更多地基于常识,而不是研究,当涉及到构建这样规模的系统时。然而,我刚刚意识到我的系统的一个组件可能不是必需的

一般来说,我将用户数据分组,并将其分配给特定的mysql服务器。当负载平衡器后面的内容服务器收到请求时,我使用来自请求的数据(如用户ID)通过查询存储在DynamoDB上的中心表来解析存储用户数据的数据库,该表可以处理大量的负载

但是,我也将用户数据分配给服务器中的数据库。就像我将在每台服务器中有100个数据库,它们都具有相同的表结构,并且我将为每个数据库分配250个用户

最初的逻辑是,一个每个用户有2k个条目的表在500k个条目超过5000万个的情况下运行得更快。然而,我突然想到,以这种方式分解用户数据可能毫无意义。
索引非常有效。我确信数据库实际上有某种内部逻辑,允许它以基本相同的速度访问数据,对吗?我已经做了十年了,我刚刚意识到这可能根本没有必要。有什么想法吗?我可以只创建一个包含所有表的数据库,还是应该继续按照我一贯的方式,在一台服务器上共享100个数据库

这有点理论性,因此可能值得理解时间复杂性的概念

单个项的聚集B树索引查找为O(log(n)),其中n是表中的行数。DynamoDB是一个基于散列的实现,这使它更接近O(1),这意味着它的性能不会随着内容大小而发生明显的变化

现在进行数学计算,log(500k)=5.7,其中log(50mil)=7.7单行查找的扩展非常好,只要您避免点击磁盘以将索引加载到内存中

因此,您所说的是单行查找有25%的差异。这很重要,但仍然可能比往返到另一个db系统(如DynamoDB)的开销要小


当然,您的里程数可能会有所不同,因为存在一些问题,如将索引保留在内存中等。。。因此,您可能会在生产环境中看到差异。我强烈建议您设置一个测试,并验证您的性能。

因此,您与dynamoDB讨论的往返过程就是我用来跨多个数据库服务器共享用户数据的过程。500万vs 5000万是分布在同一服务器上的100个数据库中的数据,而该服务器上的所有数据都存储在一个数据库中。然而,你的回答一针见血。根据您所说的,在同一台服务器上跨多个数据库进行切分会通过减少单个表的大小产生一些积极的影响。谢谢你的回复!