Python:JSON 与 sqlite 上的查询性能?



我有一个具有以下格式的 JSON 文件:

{
"items": {
"item_1_name": { ...item properties... }
"item_2_name": { ...item properties... }
...
}
}

根据我上次的统计,JSON 文件中可能存储了超过 13K 个项目,文件本身在磁盘上接近 75MB。

现在,我有一个需要查询(只读(数据的程序。每个查询操作都采用一个项名称,并且需要读取其属性。该程序的每次调用可能涉及几个到几十个查询操作。

当然,从磁盘加载 JSON 文件并解析它需要时间和空间:加载和解析需要 0.76 秒,解析的数据需要 197 MB 的内存。这意味着在每次调用该程序时,我需要先等待近一秒钟,然后它才能对结果执行任何其他操作。我想让程序响应更快。

所以我有另一种方法:从该 JSON 文件创建一个 SQLite 数据库文件。之后,程序需要针对数据库进行查询,而不是针对直接从 JSON 文件解析的数据进行查询。

但是,SQLite 方法有一个缺点:与 json.load(( 不同,它不会解析整个文件并将其保存在内存中(假设缓存未命中(,我不确定查询操作在磁盘 IO 上花费的时间是否会抵消不使用 JSON 方法的好处。

所以我的问题是:根据你的经验,这个用例适合SQLite吗?

我认为这完全取决于您查询数据的方式。从您描述它的方式来看,您仅通过 ID 进行查询,因此您无法通过效率获得 sqlite 所能提供的最佳功能。它应该适用于您的用例,但它擅长返回与值匹配的所有记录、值在两个整数之间的所有记录等。值得考虑的第三个选项是最小的键/值存储,例如存储为pickle的 python 字典或非常简单的redis服务。这两者都允许按 ID 查询比读取大型 json 字符串更快。

最新更新