Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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
Php 用于插入的随机化数据库_Php_Mysql_Registration_Sharding - Fatal编程技术网

Php 用于插入的随机化数据库

Php 用于插入的随机化数据库,php,mysql,registration,sharding,Php,Mysql,Registration,Sharding,晚上好,我最近读了以下关于Pinterest切分的博客文章,我认为其中有一些很棒的东西 但我不确定的是,如何最好地决定在哪里插入一个全新的用户 因此,对于那些不知道或费心阅读上述文章的人来说,Pinterest有许多碎片,每个碎片上都有许多数据库。它们基于64位移位生成对象的id,该移位确定碎片、对象类型(用户、pin等)以确定表以及相关对象的本地自动增量id。现在,他们试图把引脚等放在与他们所在的“电路板”相同的数据库中。但是对于一个全新的物体,什么是确定它所生活的“碎片”的最佳方法 对于通过

晚上好,我最近读了以下关于Pinterest切分的博客文章,我认为其中有一些很棒的东西

但我不确定的是,如何最好地决定在哪里插入一个全新的用户

因此,对于那些不知道或费心阅读上述文章的人来说,Pinterest有许多碎片,每个碎片上都有许多数据库。它们基于64位移位生成对象的id,该移位确定碎片、对象类型(用户、pin等)以确定表以及相关对象的本地自动增量id。现在,他们试图把引脚等放在与他们所在的“电路板”相同的数据库中。但是对于一个全新的物体,什么是确定它所生活的“碎片”的最佳方法

对于通过Facebook登录的用户,他们使用模数,例如

shard = md5(“1.2.3.4") % 4096 //4096 is the number of shards
但是,如果我有一个简单的电子邮件/密码注册表,你认为在电子邮件地址上使用类似的方法是否可以解决初始碎片的问题?我假设在这种情况下它必须是电子邮件,否则他们将无法知道要针对哪个数据库验证日志凭证。我也知道post是从2015年开始的,所以不会太老,计算能力也会很快提高,但有没有比使用md5更好的选择呢?我知道发生冲突的可能性很小——特别是我们在这里讨论的是对电子邮件地址进行散列,但是否值得使用不同的算法?我基本上对在这里确定碎片的最佳方法感兴趣,并研究如何返回碎片(因此我认为它必须是电子邮件地址)

希望这一切都有意义


(p.s没有将其与Pinterest标记一起使用,因为它看起来只是针对api开发人员的,但是如果有人认为它可能会更好地“关注”这个问题,那么可以随意添加它)

当使用MD5确定碎片时,没有冲突的风险:如果发生冲突,那么它只会在同一个碎片中结束。MD5不是该分片中的键(因此,冲突风险将从中消除)


这种分片方法的主要问题是分片的数量是固定的,因此最终的性能可能是一个问题(重新分配运行环境并不容易,因此在这种设计中,如果增长超过预期,您仍然依赖于速度更快的机器)。

@NorbertvanNobelen谢谢,我很清楚这一点,不知道为什么我自己没有想到这一点(其中的一个时刻!)如果你将此作为答案发布,我会接受这是一个智力问题吗?或者,您正在构建一个需要扩展到一台服务器之外的系统?2015年——自本世纪之交以来,CPU没有太大改进。数据库工具变化不大。在过去几年中,唯一重大的变化是SSD的广泛采用。1亿封电子邮件地址可以存储在一台服务器上——可能不需要分片。(有没有可能你把“碎片”和“分区”搞混了?)没有,那是碎片。这更像是一个智力问题,我知道你可以在一台服务器上存储很多东西,但这是一篇有趣的文章,我试图更深入地理解一些更精细的细节。就在这个例子中,我认为如果由于某种原因发生冲突,电子邮件会作为密钥丢失,这显然是错误的,因为这只是意味着他们将坐在同一台服务器上,而电子邮件是唯一的。当然,在使用%时会有相同的碎片id,这是您想要的,正如在回答中所指出的。还值得注意的是,当MD5字符串数据非常低以至于几乎不存在时,即使按照一般的哈希冲突标准,也会遇到冲突的可能性。