代码之家  ›  专栏  ›  技术社区  ›  arma Mandip Darji

在php/mysql中处理大量数据

  •  0
  • arma Mandip Darji  · 技术社区  · 14 年前

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

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

    3 回复  |  直到 14 年前
        1
  •  0
  •   Gabi Purcaru BornCoder    14 年前

    如果他们超过3公里怎么办?MySQL可以处理大量的事情,不用担心。只用两张桌子,比如:

    Users
     - id
     - other info..
    
    Identifiers
     - random_str
     - foreign key to user
    

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

        2
  •  3
  •   Loren Segal    14 年前

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

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

    您应该使用加密的安全哈希算法(例如 SHA-1 )要生成标识符,或者只需使用UUID实现即可。PHP有一个名为UUID的实现 uniqid (可能需要编译),所以真的不需要自己滚动。这两种方法都为您提供了一个比您正在使用的方法要短得多的ID,并且都可以“保证”一个巨大样本大小的唯一性(而且比您的算法更有效)。当我说短一点的时候,我说的最多是16-64个字节(sha-1生成40个字节的哈希)。

    如果您使用sha-1散列路由,方法是散列一些随机的(但对于用户输入是唯一的),比如 sha1(timestamp+username+itemname+randomseed) . 你也可以利用 uniqid 这里(参见函数的php文档中的注释)并执行以下操作: sha1(uniqid()) . 请务必阅读有关 uniqid() 要了解每秒生成多个ID的注意事项。

        3
  •  0
  •   timdev    14 年前

    首先,看看洛伦·西格尔的答案,了解一些好的想法。

    第二,为什么要使用随机的方法来确保唯一性?随机值不能保证一致性——即使它们可以使发生碰撞的可能性非常小。

    在大多数情况下,关系数据库可以解决您的问题而不需要任何技巧。为了有效地解决这类问题,设计了索引和组合键。

    如果你需要一个单一的值来唯一地识别某个东西,那就去看看洛伦提到的那些没有意义的东西。