繁体   English   中英

将golang map [string]接口存储到数据存储中的最佳方法

[英]Best way to store golang map[string]interface into data store

场景 :我从MongoDB读取的JSON大小介于300 KB-6.5 MB之间。 由于它是非常任意/动态的数据,因此我无法在golang中定义结构类型,因此我正在使用map[sting]interface{}类型。 JSON数据字符串通过使用encoding/jsonUnmarshal方法进行解析。 一些类似于与interface {}的通用JSON中提到的内容。

问题 :但是问题在于,将字符串json解析为map[string]interface{}花费更多的时间(大约30ms至180ms)。 (与使用json_encode / decode / igbinary / msgpack解析json的php相比)

问题 :有什么方法可以对其进行预处理并存储在缓存中?

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

注意:对于Golang,我是新手,任何建议都应予以高度重视。 谢谢

更新 :已尝试使用Gob序列化, binary内置软件包和Msgpack对Golang软件包的实现 没有运气,没有序列化的时间没有改善。

众所周知,JSON的标准库包非常慢。 这样做有一个很好的理由:它使用RTTI提供了非常简单的非常灵活的界面。 因此,解组比PHP的慢。

幸运的是,还有另一种方法,可以在要使用的类型上实现json.Unmarshaller接口。 如果实现了此接口,则程序包将使用它而不是其标准方法,因此您可以看到性能的极大提高。

为了帮助您,这里出现了一小组工具,其中包括:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM