微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

平面文件NoSQL解决方案

如何解决平面文件NoSQL解决方案

可以通过使用JSON1扩展来查询存储在列中的JSON数据,是的:

sqlite> CREATE TABLE test(data TEXT);
sqlite> INSERT INTO test VALUES ('{"name":"john doe","balance":1000,"data":[1,73.23,18]}');
sqlite> INSERT INTO test VALUES ('{"name":"alice","balance":2000,"email":"a@b.com"}');
sqlite> SELECT * FROM test WHERE json_extract(data, '$.balance') > 1500;
data
--------------------------------------------------
{"name":"alice","balance":2000,"email":"a@b.com"}

如果您要查询大量相同的字段,可以通过在表达式上添加索引来提高效率:

CREATE INDEX test_idx_balance ON test(json_extract(data, '$.balance'));

将在上面的查询中使用该索引,而不是扫描每一行。

解决方法

对于小型项目,是否有内置的SQLite(或类似方法)保持SQL / NoSQL的优点,即:

  • 存储 像SQLite这样 的(平面)文件中 (没有客户端/服务器方案,没有要安装的服务器;更精确的是:除了,无需安装其他任何东西pip install <package>
  • 可以将行存储为dict 无需为每行都具有通用的结构,例如NoSQL数据库
  • 支持简单查询

例子:

db = NoSQLite('test.db')
db.addrow({'name': 'john doe','balance': 1000,'data': [1,73.23,18]})
db.addrow({'name': 'alice','balance': 2000,'email': 'a@b.com'})
for row in db.find('balance > 1500'):
    print(row)

# {'id': 'f565a9fd3a','name': 'alice','email': 'a@b.com'}   # id was auto-generated

注意:这些年来,我一直惊讶于SQLite在几行代码中实际上有多少有趣的功能,这就是为什么我问我在这里描述的内容是否可以仅通过使用SQLite就能简单地使用SQLite。一些SQLite核心功能。

PS: 可能 看起来像一个解决方案,但实际上它只是一个持久的键/值存储,并且它不具有查询/功能;
也(BerkeleyDB的Python的)看起来过时,有一个类似的API没有查询功能。shelve
__findbsddb

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。