什么是最适合大数的类型?

时间:2019-10-01 07:40:28

标签: julia bigint

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

在txn处理系统和决策支持系统中,我是否应该选择交易ID类型为String或Bigint以及它们的优缺点?

2 个答案:

答案 0 :(得分:6)

如果您要查找的是标识符,则像UUIDs这样的系统可能更合适。在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差不多。这是使用BenchmarkTools.jl的快速基准测试,运行时估计未考虑setup部分:

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)

答案 1 :(得分:4)

@Mathieu_B关于使用UUID的建议是合理的,但是如果您喜欢严格数字的内容,也可以轻松使用UInt128 s:

julia> rand(UInt128)
0xa62ff810bcd06e644f5df0a64611cc0b

UUID和UInt128中的位数相同,因此它至少应与uuid4()生成的UUID一样唯一(即随机)。 UUID的主要好处是,如果需要使用其他方法,还可以使用它们:

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