【发布时间】:2019-11-19 09:53:35
【问题描述】:
我有一个 JSON,它可以包含超过一百万条记录(每条记录都是一个包含一些字段的简单对象,但得到它的层次结构包含大约 5 个级别)。我需要找到包含字段值的记录,最好是在 node.js 中以通用方式。
我尝试了jsonpath-plus,这正是我想要的。问题是处理这么多数据大约需要 25 秒(如果我只返回数据,不返回路径,则需要 10 秒)。
我尝试了json_query(这是 DOJO JSonQuery 对 node.js 的改编)。这工作非常快(1s),但只返回数据而不是数据的路径。
我想知道你是否能想到我可以使用的替代方案,或者我怎样才能让 jsonpath-plus 工作得更快。
澄清:我不生成数据。我无法控制它。我收到了完整的 JSON blob,然后我必须对其执行一些(大约 5 个)查询,然后才能获得一个新的。
真诚地, 埃拉德
【问题讨论】:
-
这里的任何解决方案都只是主要问题的解决方法;数据权重。将一百万条记录的 JSON 文件作为实时数据存储真的不是一个好主意。我建议使用更好的更具可扩展性的解决方案,即。一个数据库。
-
您绝对应该使用数据库来存储如此大量的数据。为这么大的 JSON blob 编写优化查询仍然需要对每个查询进行全面扫描。这就是数据库的价值;索引数据段。另一种方法是编写一个链式过滤器,在每个级别上键入一个特定值,这可能比 jsonpath-plus 提供的要慢。相比之下,即使是优化的 MongoDB 文档也开始滞后于第三级嵌套。
-
澄清:我不生成数据,我收到它时无法控制它。我可以将它放在数据库中,但这样做会产生索引损失,并且我经常收到新数据(替换旧数据)(在我必须重新插入数据库之前,我只会做很少的查询)