Hashmap в Node.JS для 350М+ объектов, что выбрать?

Пишу сервис на node.js, который обрабатывает большие объемы геоданных. В частном случае, есть массив точек, у каждой точки есть числовой id и координаты (lat, lng) и мне нужно быстро по id получить координаты. Первое, что пришло в голову, просто создать в памяти Object и добавлять туда значения, где ключ это id а значение - массив [lat, lng]. Проблема в том, что когда количество элементов в объекте переваливает за 9 миллионов то производительность резко падает, операция добавления становится все более долгой пока в конце концов все не стопарится. Нагуглил, что нодовские объекты, да и даже простые индексные массивы не предназначены для такого количества данных. Нашел в npm модуль, который реализовывает хэшмап на с++, автор обещал супер скорость и супер объемы, в реале либа так же начинала тормозить уже на 13 миллионе и чем дальше тем хуже. Оперативной памяти на машине хватает. Мне нужно сохранить порядка 350 миллионов записей. id точек это целые числа уже отсортированные по возрастанию.
Какой инструмент мне лучше использовать чтобы сохранить такой массив данных и в последующем быстро доставать их по id? Желательно без использования "тяжелой артиллерии" типа postgress или mongodb.
  • Вопрос задан
  • 489 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Если есть возможность переиндексировать геоданные так, чтобы id лежал в диапазоне [0..N-1] - так и сделай. И храни свои [lat, lng] в массиве[0..N-1], лучше в двух: lat[0..N-1], lng[0..N-1]

Если нет - сохрани все отсортированные id в массиве, и при обращении по id бинарным поиском находишь его положение в массиве, а по нему выбираешь координаты из lat[0..N-1] и lng[0..N-1].
Ответ написан
alexfilus
@alexfilus
Senior backend developer
А поиск по ним не понадобится? Может лучше взять, например монгу с её геоиндексами?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы