NodeJS最佳文件存储JSON数据库的方法是什么?

5

我看到了许多类似的问题,但没有一个能回答我的特定问题:

我想要拥有自己的基于JSON的数据库,就像MongoDB和firebase有BSON数据库一样,并且我认为最简单的方法就是:把一些JSON数据存储在文件中,在node.js应用程序启动时加载该文件(加载到node.js服务器的内存中),每当我进行某种搜索时,只需使用.find(如果它在一个大数组中)和.sort查询服务器中加载的JSON对象,例如Object.keys()等等,然后对于每个更改,使队列(甚至在另一个线程上)将数据存储回文件,以便不能同时存储2个条目(因为它们主要只是在已经存储在内存中的JSON对象中访问它,而不是每次从文件中读取)。

问题在于:如果它是一个巨大的数据库,将会因为在内存中存储那么多(比如2GB)的JSON数据而导致服务器崩溃吗?

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

1个回答

0
如果你正在寻找拥有DBMS提供的所有操作的真正DB,那我建议选择像Mongo这样的完整DB。
如果你想要使用某种基于文件的存储方式来组织JSON数据,可以使用fs模块。它带有一个名为`createReadStream`的函数,该函数可以让您使用缓冲区读取大文件,即不将整个文件加载到内存中。还有一个类似的函数叫做`createWriteStream`,用于向大型文件写入数据而不遇到内存问题。
但是,如果您能够将大文件分成多个小文件,则处理读写变得非常简单,无需使用流。我自己做过,即读取然后在JSON文件中对数据进行排序/修改并使用fs包编写它。此方法的最佳部分是无需进行任何阅读。您所需要的就是要求该文件,它就可以作为JSON立即可用,可以像任何其他JSON对象一样进行解析。

嗯,将JSON文件分解并要求它们是一个非常好的想法,但具体应该如何做呢?分解每个数据库,每个表吗?如果在特定表条目中有嵌套对象,这些对象本身比所有其他表条目更多,那么就会遇到内存过多的问题。你是否知道像Mongo这样的数据库是如何工作的?我想理论上尝试重新创建类似的东西,这不仅仅是魔术,一定有一些可以复制的技术吧? - Yaakov5777
Mongo的做事方式有点复杂。老实说,与其重新创建类似的东西,选择Mongo会更好。 - VPaul
但我喜欢从头开始做 :) 你知道有没有任何文章、地方或技巧可以入门吗?对我来说这只是一个巨大的谜团,你了解他们至少做事情的方式吗? - Yaakov5777
我也对你感兴趣,想要开发类似Firebase和MongoDB的东西。如果有人能回答你的问题,我会非常感激。我也卡住了XD。 - Hard Code Programmer
我还建立了自己的数据存储(称之为数据存储,因为它并不是真正的数据库)。我还添加了版本控制功能,因此您可以返回到以前的“版本” - 它只保存更改;您可以在我的gist上找到它:https://gist.github.com/erdesigns-eu/3f25506b15f6e6884143ab2735106899 - eXXecutor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接