首页 > 解决方案 > NodeJS 存储基于文件的 JSON 数据库的最佳方式?

问题描述

我见过很多类似的问题,但没有一个可以解决我的特定问题:

我想拥有自己的基于 JSON 的数据库,类似于 MongoDB 和 firebase 拥有 BSON 数据库的方式,我想最简单的方法就是:将一些 JSON 数据存储在文件中,在 node.js 时加载文件应用程序启动(进入 node.js 服务器的内存),每当我进行某种搜索时,只需使用 .find (如果它在一个大数组中销售)和 .sort 搜索加载在服务器中的 JSON 对象。 keys() 等,然后对于每次更改,创建一个队列(甚至可能在另一个线程上)将数据存储回文件,这样就不能一次存储 2 个整体(因为它们主要只是访问它已经存储在内存中的 JSON 对象中,而不是每次都从文件中读取)。

问题:如果它是一个巨大的数据库,那么在内存中存储那么多(可能是 2GB)JSON 数据的服务器不会崩溃吗?

MongoDB 和其他 nosql 数据库实际上是如何存储数据的?他们是否为每个文档/数据库都有一个单独的文件,并且只将他们需要的内容加载到内存中?是否有其他方法可以将数据库表/文档存储到文件中以供以后使用(并且仍然能够(几乎)立即访问嵌套的 JSON 对象?BSON 有什么不同之处在于它可以比 JSON 数据更快地访问吗?他们还存储加载时将整个数据库放入内存?

标签: node.jsjsondatabasebson

解决方案


如果您正在寻找具有 DBMS 提供的所有操作的真实数据库,那么我建议您使用像 Mongo 这样的成熟数据库。

如果您正在寻找一种使用某种基于文件的存储来组织 JSON 数据的方法,您可以使用 fs 模块来实现。它带有一个名为的函数createReadStream,可以让您使用缓冲区读取大文件,即不将整个文件加载到内存中。有一个类似的函数createWriteStream用于将数据写入大文件而不会遇到内存问题。

但是,如果您能够将大文件分成多个小文件,那么在不使用流的情况下处理读取和写入非常简单。我自己完成了,即读取然后排序/修改 JSON 文件中的数据,并使用fs包编写它。这种方法最好的部分是您不需要为阅读做任何事情。您所需要的只是要求该文件,它可以作为 JSON 轻松获得,您可以像解析任何其他 JSON 对象一样对其进行解析。


推荐阅读