当前位置: 首页 > 面试题库 >

平面文件NoSQL解决方案

章乐逸
2023-03-14
问题内容

对于小型项目,是否有内置的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', 'balance': 2000, 'email': 'a@b.com'}   # id was auto-generated

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

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


问题答案:

可以通过使用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'));

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



 类似资料:
  • 我有一个包含多个项目的解决方案,其中一个项目是 Web 应用程序,我希望在使用 MSBuild 构建解决方案时能够使用 web.release.config 转换 web.config。当我打电话时 MSBuild"WebProject.csproj" /t:TransformWebConfig /p:配置=发布 在 Web 项目上,我将转换后的 web.config 输出为 ...\obj\Re

  • 本文向大家介绍Linux中文件/文件夹无法删除的解决方案,包括了Linux中文件/文件夹无法删除的解决方案的使用技巧和注意事项,需要的朋友参考一下 前言 最近我们的服务器被黑客攻击,然后有些文件的属性被修改,导致我们无法删除病毒文件,同时采用 root 用户也无法删除,现在把解决方案记录下来。 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以删除 如果无法删除,则尝试使用 root 用户

  • 问题内容: 我正在使用AngularJS与Web服务进行交互,用于提取公开的各种实体。其中一些实体是图像,因此我需要能够使用“对象” 的动作在同一请求中发送二进制数据和文本字段。 如何在单个请求中使用AngularJS的服务发送数据并将图像上传到宁静的Web服务? 问题答案: 我进行了无数次搜索,尽管可能会错过它,但找不到该问题的解决方案:使用$ resource操作上传文件。 让我们举个例子:R

  • 本文向大家介绍ASP.NET对大文件上传的解决方案,包括了ASP.NET对大文件上传的解决方案的使用技巧和注意事项,需要的朋友参考一下 首先,我们需要下载这个名为 RanUpLoad 的组件。 下载完成之后,两个 dll 文件添加到项目的引用中区,xml 文件也要复制在项目中的 bin 文件夹下,也就是最后三个文件都要存在于 bin 文件夹中。 接着,上传控件还是用 ASP.NET 中自带的 Fi

  • 对VS/DevOps/pipelines非常陌生,在给定项目中遇到失败: D:\a\1\s\test.sln.metaproj(0,0):错误 MSB4126:指定的解决方案配置“发布|x86”无效。请使用“配置”和“平台”属性(例如 MSBuild.exe 解决方案.sln /p:配置=调试 /p:平台=“任何 CPU”)指定有效的解决方案配置,或将这些属性留空以使用默认解决方案配置。 当我排队

  • 我想写一个C++程序来计算球体和平面之间的碰撞。 规则是下落物体的角度等于反射角度。 我对Sphere有什么看法: 平面用平面方程系数来描述: 对于球面碰撞检测,我没有问题。但碰撞后如何求速度? 我发现了什么: 因此,最终我需要计算的更新值。