php - php/mysql中处理大量数据

标签 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 的注意事项。

关于php - php/mysql中处理大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290545/

相关文章:

php - 在 CakePHP 中多次提交请求后将变量设置为静态?

mysql - mysql的时间戳类型

.net - 亚音速 MySQL 版本

javascript - 按钮 onclick ajax 调用

javascript - 使用 Google Maps API 根据邮政编码和门牌号将地址填充到 php 表单中

php - APC 和 PHP - 由于缓存混合而损坏的站点

mysql - 如何解决CentOS中的 "Failed to connect to MySQL Host"错误

mysql - 在不使用临时表的情况下将两个查询合并为一个查询

android - Android登录,但从mysql获取数据并添加sqlite

PHP `DateTime::days` 返回垃圾?