NodeJS лучший способ для хранения файловой базы данных JSON? - PullRequest
0 голосов
/ 01 апреля 2019

Я видел много похожих вопросов, но ни один не может ответить на мой конкретный запрос:

Я хочу иметь свою собственную базу данных на основе JSON, аналогично тому, как MongoDB и firebase имеют базы данных BSON ', и я подумал, что самое простоеспособ сделать это - просто сохранить некоторые данные JSON в файле, загрузить файл при запуске приложения node.js (в память сервера node.js) и всякий раз, когда я выполняю какой-либо поиск, просто выполняю поиск вJSON-объект загружается на сервер с использованием .find (если он продается в большом массиве) и .sort для Object.keys () и т. Д., А затем для каждого изменения создает очередь (возможно, даже в другом потоке) для хранения данныхобратно в файл, так что 2 объекта не могут быть сохранены одновременно (так как они в основном просто обращаются к нему в объекте JSON, уже сохраненном в памяти, не читая из файла каждый раз).

проблема: если это огромная база данных, разве это не приведет к сбою сервера для хранения в памяти такого большого количества (например, 2 ГБ) данных JSON?

как MongoDB и другие базы данных nosql на самом деле хранят данные?У них есть отдельный файл для каждого документа / базы данных, и они загружают в память только то, что им нужно?Есть ли какой-то другой способ хранить таблицы / документы базы данных в файлах для последующего использования (и при этом иметь возможность (почти) мгновенного доступа к вложенным объектам JSON? Отличается ли BSON тем, что к нему можно получить доступ быстрее, чем данные JSON?вся база данных в память при ее загрузке?

1 Ответ

0 голосов
/ 01 апреля 2019

Если вы ищете настоящую БД со всеми операциями, которые предоставляет СУБД, то я бы рекомендовал использовать полноценную БД, такую ​​как Mongo.

Если вы ищете способЧтобы организовать ваши данные JSON с помощью какого-либо файлового хранилища, вы можете сделать это с помощью модуля fs.Он поставляется с функцией createReadStream, которая позволяет вам читать большой файл, используя буфер, т.е. не загружая весь файл в память.Существует аналогичная функция под названием createWriteStream для записи данных в большой файл без проблем с памятью.

Однако, если вам удастся разделить ваш большой файл на несколько маленьких файлов, тогда с ним действительно просто работать.читает и пишет без использования потоков.Я сделал это сам, то есть прочитал, а затем отсортировал / изменил данные в файле JSON и записал их, используя пакет fs .Лучшая часть этого подхода в том, что вам не нужно ничего делать для чтения.Все, что вам нужно, это просто запросить файл, и он легко доступен как JSON, который вы можете анализировать, как и любой другой объект JSON.

...