大数字最适合的类型是什么?
What is the best suited type for big numbers?
我想在 julia 中随机创建一个唯一的交易 ID,IBAN。
由于 IBAN 域是 [A-Z]{2}[0-9]{32} 或 [A-Z]{34}(即最大 10^51)和假设每个帐户每天最多 10 个交易。
我是否应该 select 交易 ID 类型为 String 或 Bigint 以及它们在 txn 处理系统和决策支持系统中的优缺点?
如果您要查找的是标识符,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)
@Mathieu_B 关于使用 UUID 的建议是有道理的,但如果您更喜欢严格的数字,您也可以轻松地使用 UInt128
s:
julia> rand(UInt128)
0xa62ff810bcd06e644f5df0a64611cc0b
UUID 和 UInt128 中的位数相同,因此这至少应该与 uuid4()
生成的 UUID(即随机)一样唯一。 UUID 的主要好处是可以实现其他方法,如果您需要使用它们:
uuid1
:基于日期时间和 MAC 地址
uuid4
: random/pseudo-random
uuid5
:基于散列
我想在 julia 中随机创建一个唯一的交易 ID,IBAN。
由于 IBAN 域是 [A-Z]{2}[0-9]{32} 或 [A-Z]{34}(即最大 10^51)和假设每个帐户每天最多 10 个交易。
我是否应该 select 交易 ID 类型为 String 或 Bigint 以及它们在 txn 处理系统和决策支持系统中的优缺点?
如果您要查找的是标识符,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)
@Mathieu_B 关于使用 UUID 的建议是有道理的,但如果您更喜欢严格的数字,您也可以轻松地使用 UInt128
s:
julia> rand(UInt128)
0xa62ff810bcd06e644f5df0a64611cc0b
UUID 和 UInt128 中的位数相同,因此这至少应该与 uuid4()
生成的 UUID(即随机)一样唯一。 UUID 的主要好处是可以实现其他方法,如果您需要使用它们:
uuid1
:基于日期时间和 MAC 地址uuid4
: random/pseudo-randomuuid5
:基于散列