Julia 什么类型最适合大数字?

Julia 什么类型最适合大数字?,julia,bigint,Julia,Bigint,我想创建一个唯一的事务ID,在julia中随机创建IBAN。 我到达了每千年[0:10^58]的事务ID范围,因为IBAN域是[A-Z]{2}[0-9]{32}或[A-Z]{34}(即最大10^51),并假设每个帐户每天最多10个TXN 在txn处理系统和决策支持系统中,我应该选择事务id类型为String还是Bigint,以及它们的优缺点?如果您要查找的是标识符,那么像这样的系统可能更合适。在Julia中,标准库中的UUIDs模块可以帮助: julia> using UUIDs: uui

我想创建一个唯一的事务ID,在julia中随机创建IBAN。
我到达了每千年[0:10^58]的事务ID范围,因为IBAN域是[A-Z]{2}[0-9]{32}或[A-Z]{34}(即最大10^51),并假设每个帐户每天最多10个TXN


在txn处理系统和决策支持系统中,我应该选择事务id类型为String还是Bigint,以及它们的优缺点?

如果您要查找的是标识符,那么像这样的系统可能更合适。在Julia中,标准库中的
UUIDs
模块可以帮助:

julia> using UUIDs: uuid4

julia> import Random

julia> Random.seed!(43);

julia> uuid4()
UUID("7d6398a5-f5bb-4164-8552-1668b964e46f")

julia> uuid4()
UUID("93938d68-980f-40b1-b1f9-789c5230116c")
与uuid相比,使用
String
的速度更快,与
BigInt
大致相同。这里是一个快速基准测试,使用
设置
部分不考虑运行时估计:

julia> using BenchmarkTools: @btime

julia> @btime s1 == s2 setup=(s1=string(uuid4()); s2=string(uuid4()))
  5.685 ns (0 allocations: 0 bytes)

julia> @btime s1 == s2 setup=(s1=uuid4(); s2=uuid4())
  1.640 ns (0 allocations: 0 bytes)

julia> @btime s1 == s2 setup=(s1=BigInt(rand(Int)); s2=BigInt(rand(Int)))
  2.976 ns (0 allocations: 0 bytes)

如果您正在寻找的是一个标识符,那么像这样的系统可能更合适。在Julia中,标准库中的
UUIDs
模块可以帮助:

julia> using UUIDs: uuid4

julia> import Random

julia> Random.seed!(43);

julia> uuid4()
UUID("7d6398a5-f5bb-4164-8552-1668b964e46f")

julia> uuid4()
UUID("93938d68-980f-40b1-b1f9-789c5230116c")
与uuid相比,使用
String
的速度更快,与
BigInt
大致相同。这里是一个快速基准测试,使用
设置
部分不考虑运行时估计:

julia> using BenchmarkTools: @btime

julia> @btime s1 == s2 setup=(s1=string(uuid4()); s2=string(uuid4()))
  5.685 ns (0 allocations: 0 bytes)

julia> @btime s1 == s2 setup=(s1=uuid4(); s2=uuid4())
  1.640 ns (0 allocations: 0 bytes)

julia> @btime s1 == s2 setup=(s1=BigInt(rand(Int)); s2=BigInt(rand(Int)))
  2.976 ns (0 allocations: 0 bytes)

@Mathieu_B关于使用UUID的建议是有道理的,但如果您喜欢严格数字的东西,也可以轻松地使用
UInt128
s:

julia> rand(UInt128)
0xa62ff810bcd06e644f5df0a64611cc0b
UUID和UInt128中的位数相同,因此这应该至少与由
uuid4()
(即随机)生成的UUID一样唯一。UUID的主要好处是,如果您需要使用其他方法,还可以实现其他方法:

  • uuid1
    :基于日期时间和MAC地址
  • uuid4
    :随机/伪随机
  • uuid5
    :基于哈希的

    • @Mathieu\B使用uuid的建议是有道理的,但是如果您更喜欢严格的数字,您也可以轻松地使用
      UInt128
      s:

      julia> rand(UInt128)
      0xa62ff810bcd06e644f5df0a64611cc0b
      
      UUID和UInt128中的位数相同,因此这应该至少与由
      uuid4()
      (即随机)生成的UUID一样唯一。UUID的主要好处是,如果您需要使用其他方法,还可以实现其他方法:

      • uuid1
        :基于日期时间和MAC地址
      • uuid4
        :随机/伪随机
      • uuid5
        :基于哈希的