gpt4 book ai didi

json - 将 golang map[string] 接口(interface)存储到数据存储中的最佳方式

转载 作者:IT王子 更新时间:2023-10-29 02:05:18 29 4
gpt4 key购买 nike

场景:我从 MongoDB 读取了 300 KB 到 6.5 MB 之间的任意 JSON 大小。由于它是非常任意/动态的数据,我不能在 golang 中定义结构类型,所以我使用 map[sting]interface{} 类型。使用 encoding/json 解析 JSON 数据字符串的 Unmarshal方法。一些类似于 Generic JSON with interface{} 中提到的内容.

问题:但问题在于将字符串 json 解析为 map[string]interface{} 需要更多时间(大约 30 毫秒到 180 毫秒)。 (对比php使用json_encode/decode/igbinary/msgpack解析json)

问题:请问有什么办法可以预处理后存入缓存吗?

我的意思是将字符串解析为 map[string]interface{} 并将其序列化并存储到某个缓存中,然后当我们检索它时应该不需要太多时间来反序列化并继续执行。

注意:我是 golang 的新手,非常欢迎任何建议。谢谢

更新:序列化使用Gob , binary内置包 & Msgpack implementation for Golang包已经试过了。运气不好,反序列化时间没有改善。

最佳答案

JSON 的标准库包是出了名的慢。这是有充分理由的:它使用 RTTI 来提供非常灵活且非常简单的接口(interface)。因此,解码比 PHP 慢……

幸运的是,还有一种替代方法,即在您要使用的类型上实现json.Unmarshaller 接口(interface)。如果实现此接口(interface),程序包将使用它而不是其标准方法,因此您可以看到巨大的性能提升。

为了帮助您,出现了一小部分工具,其中:

(这里列出内存中的主要参与者,肯定还有其他人)

这些工具将为您请求的类型生成定制的 json.Unmarshaller 接口(interface)实现。使用 go:generate,您甚至可以将它们无缝集成到您的构建步骤中。

关于json - 将 golang map[string] 接口(interface)存储到数据存储中的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590808/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com