node.js - NodeJS 存储基于文件的 JSON 数据库的最佳方式?
问题描述
我见过很多类似的问题,但没有一个可以解决我的特定问题:
我想拥有自己的基于 JSON 的数据库,类似于 MongoDB 和 firebase 拥有 BSON 数据库的方式,我想最简单的方法就是:将一些 JSON 数据存储在文件中,在 node.js 时加载文件应用程序启动(进入 node.js 服务器的内存),每当我进行某种搜索时,只需使用 .find (如果它在一个大数组中销售)和 .sort 搜索加载在服务器中的 JSON 对象。 keys() 等,然后对于每次更改,创建一个队列(甚至可能在另一个线程上)将数据存储回文件,这样就不能一次存储 2 个整体(因为它们主要只是访问它已经存储在内存中的 JSON 对象中,而不是每次都从文件中读取)。
问题:如果它是一个巨大的数据库,那么在内存中存储那么多(可能是 2GB)JSON 数据的服务器不会崩溃吗?
MongoDB 和其他 nosql 数据库实际上是如何存储数据的?他们是否为每个文档/数据库都有一个单独的文件,并且只将他们需要的内容加载到内存中?是否有其他方法可以将数据库表/文档存储到文件中以供以后使用(并且仍然能够(几乎)立即访问嵌套的 JSON 对象?BSON 有什么不同之处在于它可以比 JSON 数据更快地访问吗?他们还存储加载时将整个数据库放入内存?
解决方案
如果您正在寻找具有 DBMS 提供的所有操作的真实数据库,那么我建议您使用像 Mongo 这样的成熟数据库。
如果您正在寻找一种使用某种基于文件的存储来组织 JSON 数据的方法,您可以使用 fs 模块来实现。它带有一个名为的函数createReadStream
,可以让您使用缓冲区读取大文件,即不将整个文件加载到内存中。有一个类似的函数createWriteStream
用于将数据写入大文件而不会遇到内存问题。
但是,如果您能够将大文件分成多个小文件,那么在不使用流的情况下处理读取和写入非常简单。我自己完成了,即读取然后排序/修改 JSON 文件中的数据,并使用fs包编写它。这种方法最好的部分是您不需要为阅读做任何事情。您所需要的只是要求该文件,它可以作为 JSON 轻松获得,您可以像解析任何其他 JSON 对象一样对其进行解析。
推荐阅读
- reactjs - 如何根据数据库中的字符串呈现反应图标?
- angular - 使用 Angular 10 部署后为客户端自动重新加载
- visual-studio - Visual Studio 装饰器的文档在哪里?
- java - 如何将 Rest-Assure 反序列化到 TodoList?
- debugging - 我可以使用每条 USB 3.0 A/A 电缆进行英特尔 DCI 调试吗?
- python - 我无法安装 Urllib 模块所有其他模块都可以轻松安装,但这给了我错误
- javascript - 如何以 select2 数组形式检索或选择旧值?
- reactjs - Material ui 排版 - 字体大小翻倍 - 怎么会?
- xpages - (XPage/JS svr-side)如何计算从今天起两周的年月日?
- python - 拟合曲线似乎次优。如何解决这个问题?