Я рефинансирую бэкэнд приложения Node/Express от MongoDB до Redis.Сложные структуры данных в Redis
Мои данные в настоящее время состоят из нескольких десятков (~ 70) документов, каждый из которых состоит из NAME, аббревиатуры ABBR, местоположения GeoJSON и массива целочисленных ПАРАМЕТРОВ. ПАРАМЕТРЫ для каждого документа обновляются каждые несколько минут, но остальные атрибуты остаются фиксированными. Длина атрибута PARAMETER может отличаться (и может также быть пустым). Я хотел бы выполнить множество запросов по данным для проверки ближайших местоположений в заданной точке и отобразить имя, аббревиатуру и параметры.
Пример документа:
{
_id: ObjectId("1"),
name: 'A place',
abbr: 'PLC',
location: { type: "Point", coordinates: [ -130.922, 33.289 ]},
parameters: [3 4 28],
}
Я знаком с командой GEOADD в Redis, но я не вижу, как использовать его, чтобы создать более сложную структуру данных для хранения своих данных, учитывая, что, если я используйте команду GEOADD для указания местоположения, а затем попытайтесь использовать HMSET для добавления полей для имени и аббревиатуры, я получаю ошибку WRONGTYPE.
Я ценю ошибку, потому что я ценю ссылочную прозрачность, и мне нравится, когда типы воспринимаются всерьез. Но я также думаю, что могу принципиально не понимать, как Redis хранит данные. Когда я первоначально начал рефакторинга после изучения Redis концептуально, я предполагал возможность хранить свои данные в форме что-то вроде
1 name 'A Place' abbr 'PLC' location -130.922 33.289 parameters 3 4 28
Или, если не совсем, что способ легко запросить близость места в моем наборе вместе с другими атрибутами.
практический подход состоял в том, чтобы сохранить местоположение в виде строки «-130.922,33.289» в хэш-ключе и добавить идентификатор к геосети с помощью GEOADD, поэтому он будет служить индексом. –