mysql数据库中的随机代码

时间:2014-05-05 18:42:28

标签: mysql random key

我想我最好不要在没有任何实验的情况下猜测这个问题。

我们计划添加一个新列作为代码

代码需要具备以下功能:

  1. 必须是独一无二的。
  2. 最好是成为字符串,我们更容易迁移数据
  3. 必须随机有足够的空间以避免碰撞。
  4. 我打算只使用UUID。

    create table code(
      id char(36),
      unique index index1 (id)
    ) type=innodb;
    

    我们的操作行为:

    1. 插入新代码(每天最多20​​K)
    2. 逐行获取(非常重要,我们可能需要在有限的时间内获取数据库中的每一行,如10分钟)。
    3. 现在我对性能有点担心。我们的数据库中已有400K行。在未来它可能会增长到10M或30M。

      您有任何建议或看到任何问题吗?

      BTW:我无法使用自动递增的int,因为它没有随机化。

2 个答案:

答案 0 :(得分:0)

继续。你不会在使用mysql和UUID时遇到任何问题。

随机生成的UUID有足够的状态,某些没有冲突。 (事实上​​它仍然是一个偶然的机会,但是在30M条目的情况下它超过10 ^ 31。)

另一方面:当你可以轻松地使用SecureRandom只生成16个字节的值并使用它们时,为什么还要使用uuid(将你的随机分为5组,根本没有任何意义)呢?

根据这个答案:How to store uuid as number?将它们存储在mysq中的二进制文件中会更快。

您也希望阅读此内容:UUID performance in MySQL?

使用mysql时,您应该考虑备份的概念。 Mysql可以轻松处理大数据库,但导出/导入30M行可能需要一些时间。

对于mysql行限制,请参阅此问题:How many rows in a database are TOO MANY?

答案 1 :(得分:-1)

我建议不要在这些情况下使用MySQL(至少不是你主动搜索的主存储器)。

有许多不同的其他技术,例如:

  • Apache Lucene
  • Apache Solr
  • 弹性搜索
  • 以及更多其他人......

这些工具可用于快速搜索大数据集。上面看起来有点过分你可能只是使用一个NoSQL dbs,它会为你提供更多的性能。

有大量文章比较所有这些之间的性能和限制。