查询包含JSON对象的大型文本文件

时间:2010-05-28 10:45:53

标签: sql database json data-structures

我的格式文件文件很少: {“user_ip”:“x.x.x.x”,“action_type”:“xxx”,“action_data”:{“some_key”:“some_value”...},...}

每个条目都是一行。

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

问候,

戴夫

答案 3 :(得分:0)

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

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

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