Могу ли я использовать одну и ту же базу данных для нескольких приложений Meteor?

Вариант использования: приложение, которое я создал на app.foo.com, и экземпляр telescope на community.foo.com на разных серверах приложений. Единственная коллекция, которой они поделятся, это users. Я бы дал один и тот же URL-адрес mongo и URL-адрес oplog для обоих приложений и убедился, что кроме users имена коллекций не перекрываются между двумя приложениями.

Это должно работать нормально? Любые проблемы с производительностью?


person Loren    schedule 25.01.2015    source источник
comment
@DavidWeldon, я не думаю, что это дубликат, он просто хочет, чтобы часть базы данных была общей.   -  person Peppe L-G    schedule 25.01.2015


Ответы (3)


Проблема в том, что вы должны делиться именами коллекций.

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

Что вы можете сделать, так это только поделиться коллекцией users, если хотите.

Код на стороне сервера (не требуется на клиенте)

Accounts.connection = DDP.connect("https://<telescope app url>");

Meteor.users = new Mongo.Collection("users", {
    _preventAutopublish: true,
    connection: Accounts.connection
});

Или более прямо (не предпочтительнее, если вы разрешаете вход в систему OAuth)

var database = new MongoInternals.RemoteCollectionDriver("<mongo url of telescope app>");
Meteor.users = new Mongo.Collection("users", { _driver: database });

Таким образом, это приложение теперь использует коллекцию пользователя приложения Telescope.

person Tarang    schedule 22.02.2015

С этим вообще не было бы проблем. Например, обычно используется приложение для пользователя и приложение для администратора, использующие один и тот же db.

person Nick Lammertyn    schedule 25.01.2015
comment
Ага. Без проблем. Вы можете публиковать и подписываться, как обычно. Оплог mongo будет синхронизировать все приложения. - person benstr; 26.01.2015

Это не должно быть сделано на уровне базы данных:

Когда любое из двух приложений развивается, они могут сломать себя или другое.

Это функция, принадлежащая уровню API или отдельной службе.

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

Могу порекомендовать несколько:

  • Firebase
  • Разобрать
  • Hull.io (отказ от ответственности: я основатель)
  • Auth0
  • ЛогинРадиус

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

Некоторые также предлагают, чтобы одно приложение было главным и аутентифицируло пользователей, а затем сообщало службе, кто вошел в систему, чтобы вы могли получать данные из другого приложения (в корпусе мы называем это «Принеси своих собственных пользователей»).

person user2721711    schedule 22.02.2015