Потоковая передача JSON в Redis - PullRequest
0 голосов
/ 04 марта 2019

У меня есть большой JSON-файл, который я хотел бы сохранить в Redis.Проблема заключается в том, что когда я анализирую его, у меня заканчивается память в Node.Js

Я увеличил объем памяти кучи с 1,39 ГБ до 4 ГБ, это все еще происходит, и я считаю, что я делаю это неправильно.

После долгих поисков я обнаружил, что потоковое вещание - моя лучшая ставка.Дело в том, что я не очень хорошо разбираюсь в Streaming и Я не уверен, что даже это решит мою проблему

Я много читаю и много разрозненной информации.Мне было интересно спросить, если вы думаете, если это вообще возможно, или это правильно?

Смогу ли я передать поток объекта JSON в Redis?Нужно ли мне это делать или это будет автоматически?Должен ли я структурировать мой кусок JSON по частям?или поток в Redis окажется строкой?

Я использую клиент ioRedis для взаимодействия с Redis.

Заранее благодарен за вашу помощь.

1 Ответ

0 голосов
/ 04 марта 2019

Если вы можете гарантировать, что только один процессор будет обновлять этот ключ, вы можете использовать SETRANGE .При анализе файла вы можете сохранить ссылку на следующее смещение:

(псевдо-код)

offset = 0
offset = redis.set_range(key, offset, "string")

Затем вы можете загружать части файла до Redis без необходимостизагрузить все в память сразу.

SETRANGE возвращает длину строки после того, как она была изменена.

Это также предполагает, что вы можете загружать части содержимого файла, не анализируя всекак JSON, а затем преобразовать его обратно в строку.Также предполагается, что только один процесс обновляет этот ключ - если несколько процессов пытаются обновить его, значение JSON может быть повреждено.

...