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

Python:JSON与sqlite上的查询性能?,python,json,sqlite,Python,Json,Sqlite,我有一个JSON文件,其格式如下: { "items": { "item_1_name": { ...item properties... } "item_2_name": { ...item properties... } ... } } 在我最后一次统计中,JSON文件中存储的项目可能超过13K,而该文件本身在磁盘上的容量接近75MB 现在,我有一个程序需要查询(只读)数据。每个查询操作都有一个项目名称,需要读取其属性。该程序的每次调用可能涉及几到几十

我有一个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
或真正简单的
redis
服务的python字典。这两种方法都允许通过ID进行查询,比读取一个大的json字符串更快

当我不得不做类似的事情时,尽管是使用XML而不是JSON,我还是创建了一个SQLite数据库。其基本原理是,为了只对数据执行一些查询,您需要读取远远小于读取整个JSON/XML所需的SQLite DB的比例。我没有比较性能,但我使用SQLite得到的结果令人满意。SQLite是一个数据库,您描述的内容听起来与数据库的用途完全一样。。。但是对于您的特定用例,唯一真正的答案是实际地分析它。我要指出的是,除了将JSON解析为嵌套dict的开销之外,您不会比几次哈希查找更快。但同样,您需要检查和查看。这取决于您的用例。使用真正的数据库(mysql、postgres、“内存中的数据库”如redis)是否有任何限制,这正是它们的用途。那PyPy呢?我想它比cpython快得多。@MauriceMeyer它只是一个命令行生产力实用程序,不是作为服务运行的工具,所以我希望它尽可能减少依赖项。