繁体   English   中英

在php / mysql中处理大量数据

[英]Dealing with large amount of data in php/mysql

所以我有类似拍卖的东西,对于每笔交易或拍卖,我必须生成随机标识符代码并分配给用户。 因此,我想出了类似的方法用于数据库存储{1:XKF3325A|ADSTD2351;7:ZARASR23;12:3290OASJX} -所以我有一个用户ID:随机码,有些用户可以用|分隔多个随机码。

我的问题是我应该为数据库使用哪种存储类型? 我为用户生成的代码可能超过2k至3k。

也许您问错了问题。 您根本不应该使用这种大小的标识符。 答案是通过使用更好的标识符生成算法来处理较小的标识符。 您的表索引将感谢您。

因此,您应该问的问题是: 如何创建简短但唯一的标识符? 答案如下:

您应该使用加密安全的哈希算法(例如SHA-1 )来生成您的标识符,或者仅使用UUID实现来执行此操作。 PHP具有一个称为uniqid的UUID实现(可能必须在其中编译),因此实际上不需要自己动手。 两种方法给您的ID都比您所使用的ID短,并且都可以在巨大的样本量中“保证”唯一性(并且比您的算法更有效)。 当我说的更短时,我所说的最多是16-64个字节之间的任何位置(SHA-1会生成40个字节的哈希)。

如果您使用SHA-1哈希路由,则方法将是对一些随机(但对用户唯一的输入)进行哈希,例如sha1(timestamp+username+itemname+randomseed) 您还可以在此处使用uniqid (请参见PHP文档中的函数注释)并执行: sha1(uniqid()) 确保阅读有关uniqid()的注释,以了解有关每秒生成多个ID的警告。

那如果他们超过3k呢? MySQL可以处理很多事情,不用担心。 只需使用两个表,例如:

Users
 - id
 - other info..

Identifiers
 - random_str
 - foreign key to user

然后,您可以获取ID的标识符,获取标识符所属的用户,等等。

首先-有关一些好主意,请参阅Loren Segal的答案。

第二-为什么要使用任何随机数来确保唯一性? 随机值不能保证唯一性-即使它们可以使您不太可能发生碰撞。

在大多数情况下,关系数据库可以毫无问题地解决您的问题。 索引和组合键旨在有效解决此类问题。

如果您需要一个值来唯一地标识事物,请查看Loren提到的独特知识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM