Используйте два разных адаптера в одной модели

Я хочу использовать mongo для хранения данных глобального канала, но я хочу кэшировать самые последние сообщения в памяти с помощью Redis. Есть ли способ настроить одну модель на использование двух адаптеров? Если нет, думаю, я попытаюсь использовать один контроллер для двух моделей.


person Teeknow    schedule 13.03.2014    source источник


Ответы (1)


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

В модели Sails v0.9.x с mongo и redis, определенными в /config/adapters.js:

module.exports = {

    adapter: ['mongo', 'redis']
    attributes: {...}

}

В модели Sails v0.10.x с mongo и redis, определенными в /config/connections.js:

module.exports = {

    connections: ['mongo', 'redis']
    attributes: {...}

}

Однако вы не можете указать, что некоторые атрибуты используют одно соединение, а другие атрибуты используют другое. Если задействовано более одного адаптера и адаптеры имеют одинаковые методы, то они будут объединены. Это будет иметь место при использовании sails-mongo и sails-redis в одной и той же модели; оба адаптера имеют find, create, update и destroy, поэтому в вашей модели будет использоваться только один из методов адаптера (sails-redis в приведенном выше примере).

Какой тогда смысл в нескольких адаптерах? Это способ добавить в модель внешние методы API. Например, если у вас есть модель File, представляющая файл, хранящийся на Amazon S3, вы можете использовать адаптер sails-s3 с методами upload и download вместе с sails-mongo для хранения метаданных о файле.

Кэширование также является функцией, которая находится в активной разработке, но пока лучше всего использовать отдельный модель для кеша, как вы предложили.

person sgress454    schedule 13.03.2014
comment
Это было именно то, что я искал. Было бы неплохо выбирать между атрибутами (для каждого сообщения в Redis мне понадобятся имя пользователя, изображение пользователя и некоторые другие конкретные данные, хотя я думаю, что хотел бы иметь только идентификатор пользователя в моем mongo db), но это должно быть достаточно хорошо. - person Teeknow; 14.03.2014
comment
Чтобы указать, что я имел в виду, мне нужен только идентификатор пользователя в моей базе данных mongo. Я имел в виду, что хочу, чтобы идентификатор пользователя сохранялся только в их сообщениях. - person Teeknow; 01.08.2014
comment
Это все еще экспериментально или я могу использовать его в рабочем приложении? - person theblang; 24.11.2014