二郎神:UUID发电机(erlang: uuid generator)

2019-09-03 11:00发布

你用什么模块/库来产生UUID?

Answer 1:

对于像我这样的未来的Google, 从avtobiff二郎的UUID,工作非常简单。



Answer 2:

从http://github.com/travis/erlang-uuid

-module(uuid).
-export([v4/0, to_string/1, get_parts/1]).
-import(random).

v4() ->
    v4(random:uniform(math:pow(2, 48)) - 1, random:uniform(math:pow(2, 12)) - 1, random:uniform(math:pow(2, 32)) - 1, random:uniform(math:pow(2, 30)) - 1).
v4(R1, R2, R3, R4) ->
    <<R1:48, 4:4, R2:12, 2:2, R3:32, R4: 30>>.
to_string(U) ->
    lists:flatten(io_lib:format("~8.16.0b-~4.16.0b-~4.16.0b-~2.16.0b~2.16.0b-~12.16.0b", get_parts(U))).

get_parts(<<TL:32, TM:16, THV:16, CSR:8, CSL:8, N:48>>) ->
    [TL, TM, THV, CSR, CSL, N].


Answer 3:

从CouchDB的UUID生成: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_uuids.erl



Answer 4:

我建议使用二郎山OSSP的UUID NIF绑定有钢筋支撑https://github.com/yrashk/erlang-ossp-uuid

ossp_uuid:make(v4, text)


Answer 5:

为什么使用round(math:pow(2, 48)) 我认为, 1 bsl 48将更加迅速和代码不会失去了解。



Answer 6:

试试这个: https://github.com/afiskon/erlang-uuid-v4有史以来最简单的实现。



Answer 7:

如果你并不需要遵循RFC 4122 ,你可以使用now/0呼叫不产生外部依赖的唯一ID,因为元组,由现在称之为产生的是虚拟机里面绝对是独一无二的,独特的大概率beetween节点。



Answer 8:

一个我写的风格和文档的例子 - 基于我从二郎名单上的那种,足以将要均值人收到数不胜数的建议。

图书馆: https://gitlab.com/zxq9/zuuid

文档: http://zxq9.com/projects/zuuid/docs/

PS: 非常非常感谢二郎山-问题抽空sharpshoot我的一切的时候真棒乡亲。 的lib远不如它。



文章来源: erlang: uuid generator
标签: erlang