繁体   English   中英

查询包含JSON对象的larg文本文件

[英]querying larg text file containing JSON objects

我有几千GB格式的文本文件:{“user_ip”:“xxxx”,“action_type”:“xxx”,“action_data”:{“some_key”:“some_value”...},...}

每个条目都是一行。

首先,我想轻松找到给定ip的条目。 这部分很简单,因为我可以使用grep例如。 然而即便如此,我希望找到更好的解决方案,因为我希望尽快得到答复。

下一部分更复杂,因为我想从选定的ip和所选类型中找到条目,并在action_data中找到some_key的特定值。

可能我必须将此文件转换为SQL db(可能是SQLite,因为它将是桌面APP),但我会问是否存在更好的解决方案?

是的,将它放入数据库,任何数据库。 然后查询它将是直截了当的。

你可以看一下基于文档的数据库MongoDB 有了它,你实际上存储了JSON对象,然后你可以索引并轻松地以有效的方式查询。 您可以在文档中找到有关如何查询的信息: 查询

只是想提一下,Oracle Berkeley DB 11gR2(2010年4月1日发布)引入了对SQL API的支持。 实际上,SQL API sqlite3()API。 因此,正如Jason所说,如果你喜欢SQLite的易用性,再加上Berkeley DB的可扩展性和并发性,你现在可以将它们放在一个库中。

问候,

戴夫

如果您需要基于SQL的数据库的关系保证,请务必继续使用SQLite 它可以实现快速查询,连接,聚合,排序以及您可能想到的任何类型的搜索。 听起来这只是用户在某些IP上执行的操作的大列表,因此您可能希望使用某种序列作为主键,因为其他任何属性都不是好的候选者。

另一方面,如果您只需要进行非常简单的查询,例如按IP查找条目,按操作类型查找条目等,您可能需要查看Oracle Berkeley DB 只要您不需要任何过于花哨的搜索,Berkeley DB就会让您存储太字节数据并以创纪录的速度访问它们。

所以,看看两者,看看什么是最适合您的用例。 它们适用于不同的东西,这可能就是为什么两者都可以作为Android上的存储系统使用的原因。 我认为SQLite可能会胜出,但在考虑嵌入式本地数据库系统时,您应该始终至少考虑这两种技术。

暂无
暂无

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

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