【问题标题】:Erlang JSON libraries: serialization performance?Erlang JSON 库:序列化性能?
【发布时间】:2018-02-02 16:10:32
【问题描述】:

有许多可用于 Erlang 的 JSON 库,我不清楚哪些具有最佳性能特征(其次是易用性),尤其是对于 erlang-to-json 序列化。

我的用例需要 JSON 解析和序列化,但 Erlang 代码产生的 JSON 输出(即序列化)可能至少比接收输入多两个数量级。

作为参考,我知道的库包括以下(可能还有其他我没有找到):

【问题讨论】:

标签: json erlang


【解决方案1】:

我使用rfc4627.erl(我偶然发现它,性能不是问题)

但是,我确实希望不同的本机 erlang 库能够同样出色地执行。他们分享想法(正如code comments 所见证的那样)。 AFAIK mochijsonrfc4627 共享相同的源 erlang 格式。

eep018 是 C,因为它正在努力实现 ... hrm ... eep-0018term_to_json 本机编码器可能会包含在 Erlang 的未来版本中。从未尝试过,而且似乎没有积极维护。

我的最终建议是使用 mochiweb 的 mochijson(2)。它是事实上的标准,并且被 CouchDB 和 Facebook 等积极维护和使用。

至于在mochijsonmochijson2 之间进行选择,this 可能会对您有所帮助。

【讨论】:

    【解决方案2】:

    我最近一直在使用jsonerl。它基于 mochijson2,使用起来更加简单直观。

    【讨论】:

      【解决方案3】:

      尝试https://github.com/si14/erl_json_test erlang json 基准测试。它包括以下基准:

      • 列表项

      • JSONX

      • 飞快

      • Mochijson2

      • JSX

      【讨论】:

        【解决方案4】:

        但希望这个答案不会受到不良欢迎:

        我也研究了一个项目的 JSON 解析和序列化。我必须并行处理大量数据,所以 Erlang 听起来很棒!但其中很多都是以 JSON 数据的形式处理字符串,这就是问题所在。

        您可能知道 Erlang 中的字符串是完整的字符列表。与大多数语言中的字符串(一个字符“大约”一个字节)不同,Erlang 中的每个字符都由一个完整的 32 位整数表示!所以,你的字符串已经很大了。

        因为它是一个列表,所以访问字符串的给定元素是 O(N) 而不是 O(1),正如您在 Chars 数组中所期望的那样。而且,因为字符串在 Erlang 中是不可变的,所以简单的连接最终会是一个非常缓慢的过程。最后我意识到我只是在尝试使用错误的语言。

        您很可能已经知道所有这些事情,但我觉得将其作为答案留给将来可能会到达您的帖子的其他人很有用。

        【讨论】:

        • 在这种情况下你应该使用二进制文件,不是字符串。
        • 而且你应该学习一些关于编码 unicode 字符串的知识,例如 utf-8,当访问字符时立即变成 O(N)。
        • 您应该查看各种字符串处理基准,这些基准表明使用列表通常更快。
        猜你喜欢
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 2012-06-10
        相关资源
        最近更新 更多