【问题标题】:How to generate a lot of unique random strings in Scala如何在 Scala 中生成大量唯一的随机字符串
【发布时间】:2016-05-06 03:34:46
【问题描述】:

我想生成许多彼此唯一且在 MySQL 中唯一的随机字符串,并指定生成的数量如 10,000。

我可以确保字符串在每次生成的字符串中都是唯一的,只需检查List[String] 是否包含每次生成的字符串。
但我不知道如何确保它在 MySQL 中的唯一性,我已经在 MySQL 中设置了唯一索引,如 ALTER TABLE Code ADD UNIQUE INDEX `codeUnique` (`code`);

但是如果唯一保证是在向 MySQL 中插入数据时,插入会失败。
并且如果每次insert都检查insert failure,那么在生成的数量很大的情况下,生成的时间会很长。

【问题讨论】:

    标签: mysql performance scala unique


    【解决方案1】:

    使用List.fillrandomUUID 作为@Sudhir 注释:

    scala> List.fill(10000)(java.util.UUID.randomUUID.toString)
    res0: List[String] = List(
      3c789851-975c-499d-8b0b-5bc60dee7497, 
      9511fb41-a42e-47d8-a5f3-ba1a6f3847f2,
      61263421-59de-4538-87c6-eb98ccf1e19d, 
     ...)
    

    您可以通过将其转换为集合并检查大小来仔细检查它们的唯一性:

    scala> List.fill(10000)(randomUUID.toString).toSet.size
    res1: Int = 10000
    

    【讨论】:

      【解决方案2】:

      您可以简单地使用Java 的java.util.UUID.randomUUID.toString 方法来获得唯一的String。请参阅文档here。使用这种方法获得重复键的机会非常低(我从来没有得到重复键)。所以你也不必维护一个集合。

      如果您想使用自己的随机密钥生成器并确保它是唯一的,您不应该选择List[String],因为List 可以有重复项,并且要检查密钥是否已经存在,您需要迭代每个元素,这是一个昂贵的操作。您应该改用Set[String],然后使用Setcontains() 方法检查密钥是否已经存在。

      【讨论】:

        【解决方案3】:

        遍历 10000 个整数,取每个数字的 MD5 或 SHA1。

        【讨论】:

          猜你喜欢
          • 2012-11-21
          • 2010-10-18
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多