Какой тип лучше подходит для больших чисел? - PullRequest
1 голос
/ 01 октября 2019

Я хотел бы создать уникальные идентификаторы транзакций, IBAN, случайно в julia.
Я получил диапазон идентификаторов транзакций в [0: 10 ^ 58] за тысячелетие, так как домен IBAN равен [AZ] {2} [0-9] {32} или [AZ] {34} (т. Е. Макс. 10 ^ 51) и предполагают максимум 10 тксн в день на счет.

Стоит ли выбирать тип идентификатора транзакции как String или Bigint и их плюсыи минусы в системе обработки TXN и системах поддержки принятия решений?

Ответы [ 2 ]

6 голосов
/ 01 октября 2019

Если то, что вы ищете, является идентификатором, системы типа UUID могут быть более подходящими. В 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)
4 голосов
/ 01 октября 2019

@ Предложение Mathieu_B об использовании UUID имеет смысл, но если вы предпочитаете что-то строго числовое, вы также можете легко использовать UInt128 s:

julia> rand(UInt128)
0xa62ff810bcd06e644f5df0a64611cc0b

Количество битов в UUID и UInt128 равното же самое, поэтому он должен быть по меньшей мере таким же уникальным, как UUID, сгенерированные uuid4() (то есть случайным образом). Основное преимущество UUID состоит в том, что реализованы и другие методы, если вам необходимо их использовать:

  • uuid1: на основе даты и времени и MAC-адреса
  • uuid4: случайный / псевдослучайный
  • uuid5: на основе хеша
...