NodeJS 存储基于文件的 JSON 数据库的最佳方式?

Posted

技术标签:

【中文标题】NodeJS 存储基于文件的 JSON 数据库的最佳方式?【英文标题】:NodeJS best way to store a file-based JSON database? 【发布时间】:2019-08-22 03:23:04 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

嗯,分解 JSON 文件并要求它们是一个非常好的主意,尽管应该如何去做呢?分解每个数据库、每个表?如果一个人在一个特定的表条目中嵌套了对象,而这些对象本身比所有其他表条目的数量还要多,那么就会遇到同样的内存过多问题。你碰巧知道像 Mongo 这样的数据库是如何工作的吗?我想从理论上尝试重新创造类似的东西,它不仅仅是魔法,一定有某种可以复制的技术? Mongo 的处理方式有点复杂。老实说,你最好使用 Mongo,而不是重新创建类似的东西。 但我喜欢从头开始制作东西 :) 你知道任何类型的文章或任何地方或任何一种开始的技术吗?对我来说,这只是一个很大的谜,你至少知道他们做事的方式吗? 即使我对你到底是什么也很感兴趣。我也想开发像firebase和mongodb这样的东西。如果有人可以发布您的问题的答案,将不胜感激。我也卡住了XD

以上是关于NodeJS 存储基于文件的 JSON 数据库的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs下值mangoDB

nodejs读取json文件,写入mongodb数据库

将 pcap 转换为 JSON 的最简单方法

在 Nodejs 中解析大型 JSON 文件

AngularJS、NodeJS:将数据保存到 Json 文件或数据库

如何在 TypeScript 中引用 JSON 文件?