【问题标题】:querying larg text file containing JSON objects查询包含 JSON 对象的大型文本文件
【发布时间】:2010-05-28 10:45:52
【问题描述】:

我有几个千兆字节的文本文件格式: {"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),但我想问是否存在更好的解决方案?

【问题讨论】:

    标签: sql database json data-structures


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我试过了(在网站上的演示外壳中),看起来很酷。但是,由于 AGPL 许可证,我可能无法在我的项目中使用它:(。//编辑:我看到驱动程序在 Apache 许可证上,所以我认为从法律的角度来看我可能可以使用它,不幸的是我'我不确定我是否能够说服我的客户。
    【解决方案2】:

    是的,把它放到一个数据库中,任何数据库。然后查询就很简单了。

    【讨论】:

      【解决方案3】:

      只想提一下,Oracle Berkeley DB 11gR2(2010 年 4 月 1 日发布)引入了对 SQL API 的支持。事实上,SQL API 就是 sqlite3() API。因此,正如 Jason 所提到的,如果您想要 SQLite 的易用性,以及 Berkeley DB 的可伸缩性和并发性,您现在可以在一个库中获得这两样东西。

      问候,

      戴夫

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2022-01-12
          • 2015-06-21
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          • 2018-09-22
          • 2017-10-14
          • 1970-01-01
          • 2016-12-05
          相关资源
          最近更新 更多