【问题标题】:Converting from binary to string to then query an int value从二进制转换为字符串,然后查询一个 int 值
【发布时间】:2016-06-28 05:44:04
【问题描述】:

我知道从二进制转换为字符串是一项缓慢而昂贵的操作。

我们的项目要求,以大数据解决方案为模型,将采用传入的二进制数据流。

大多数大数据解决方案建议使用 NO SQL 数据库,例如 Mongo 或 Raven,并将数据解析为 JSON 以便稍后查询……这就是我感到困惑的地方。我认为它仅适用于非结构化数据的 JSON。

传入的数据已经是半结构化的,但忽略了这一点,如果我将其转换为 JSON,那么这肯定是二进制到字符串的转换,并且在发生这种情况时我会受到延迟的惩罚吗?如果我想查询现在是字符串的 int 值,我必须再次将它们转换回来。

我知道 JSON 会比转换更快地可能映射值。

如果我将二进制数据转换为 JSON 以便于处理(可读性/维护等),但随后需要查询数值(最初可以以二进制格式查询),那么我肯定会进行两次转换(二进制到字符串和然后字符串回到二进制)?或者当我们在JSON中查询数字值时,它不是将其转换回二进制吗?

【问题讨论】:

    标签: json mongodb binary


    【解决方案1】:

    MongoDB 实际上使用BSON 数据进行通信,因此它已经是二进制的。您可以在应用程序中显式读取它,而无需“正确”解析 JSON。 但是,即使您愿意,我相信“惩罚”也足够小,可以忽略不计。

    记住 - Premature optimization is the root of all evil - 你现在确实在这样做。

    【讨论】:

    • Premature optimization is the root of all evil - 是的,我同意,但我们假设基于我们的传入流大约是每秒 3GB 的事实,因此这 似乎 是一个不错的假设优化 :) 但是,BSON 的链接非常棒! +1
    • @MyDaftQuestions 是我真正尝试优化的最后一件事。在我最近对 ​​mongo 数据(反)序列化的测试中,处理时间不到 0.1%。您可以从适当的分片、索引和应用程序架构(可能是响应式堆栈)中获得更多收益。直接回答 - 大多数 Mongo 驱动程序已经使用二进制协议,所以无论如何也没有什么收获。
    • 感谢您抽出宝贵时间与我聊天!
    【解决方案2】:

    与互操作性和查询方面的收益相比,序列化/反序列化的成本很小。

    例如,如果您要使用 Azure DocumentDB (https://azure.microsoft.com/en-us/services/documentdb/),将二进制属性转换为其代表性 JSON 类型(int、string)将使您能够更好地查询它(范围查询、空间查询等)。 ) - https://azure.microsoft.com/en-us/documentation/articles/documentdb-sql-query/

    (完全披露我在 Microsoft 的 DocumentDB 工作 - 很乐意随时进行一对一聊天!)

    【讨论】:

    • 我们每秒记录超过 3GB 的二进制数据。序列化的目的是什么(如果是 JSON,则序列化为字符串),其中大部分信息是整数值。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多