我看过很多类似的问题,但是没人能解决我的特殊问题:
我想拥有自己的基于JSON的数据库,类似于MongoDB和firebase拥有BSON数据库的方式,我想出了最简单的方法是:将一些JSON数据存储在文件中, node.js应用程序启动(进入node.js服务器的内存中),每当我进行某种搜索时,只需使用.find(如果它在大数组中变小)和.sort搜索服务器中加载的JSON对象。对于Object.keys()等,然后进行每次更改,请创建一个队列(甚至在另一个线程上)以将数据存储回文件中,这样就不能一次存储2个整体(因为它们是主要只是在已经存储在内存中的JSON对象中访问它,而不是每次都从文件中读取)。
问题:如果数据库很大,那会不会导致服务器在内存中存储那么多(例如2GB)JSON数据而崩溃?
MongoDB和其他nosql数据库实际上如何存储数据?他们是否对每个文档/数据库都有单独的文件,并且仅将所需的文件加载到内存中?还有其他方法可以将数据库表/文档存储到文件中以供以后使用(并且仍然能够(几乎)立即访问嵌套的JSON对象吗?)BSON在某种程度上不同于它可以比JSON数据更快地访问吗?将整个数据库加载到内存中时是什么?
答案 0 :(得分:0)
如果您正在寻找具有DBMS提供的所有操作的真实数据库,那么我建议您使用像Mongo这样的成熟数据库。
如果您正在寻找一种使用某种基于文件的存储来组织JSON数据的方法,则可以使用fs模块来实现。它带有一个名为createReadStream
的函数,可以让您使用缓冲区读取大文件,即不将整个文件加载到内存中。有一个名为createWriteStream
的类似函数,用于将数据写入大文件而不会遇到内存问题。
但是,如果您能够将大文件分为多个小文件,那么在不使用流的情况下进行读写操作非常简单。我自己完成了此操作,即读取并排序/修改JSON文件中的数据,然后使用fs包将其写入。这种方法最好的部分是,您无需做任何阅读工作。您所需要的只是需要文件,它就像JSON一样易于使用,您可以像解析任何其他JSON对象一样对其进行解析。