处理php / mysql中的大量数据

时间:2010-11-27 07:09:46

标签: php mysql

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

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

3 个答案:

答案 0 :(得分:3)

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

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

您应该使用加密安全哈希算法(例如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的注意事项。

答案 1 :(得分:0)

那么,如果他们超过3k呢? MySQL可以处理大量的东西,不用担心。只需使用两个表,例如:

Users
 - id
 - other info..

Identifiers
 - random_str
 - foreign key to user

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

答案 2 :(得分:0)

首先 - 看看Loren Segal对一些好主意的回答。

第二 - 为什么你会随意使用任何东西以确保独特性?随机值并不能保证单一性 - 即使它们使你不太可能发生碰撞。

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

如果您需要单个值来唯一标识某些内容,请查看Loren提到的单一内容。

相关问题