Как я могу реализовать однонаправленную синхронизацию структуры данных с несколькими клиентами через Веб и собственные приложения?

#node.js #firebase #synchronization #open-source

#node.js #firebase #синхронизация #с открытым исходным кодом

Вопрос:

Нам нужно совместно использовать общую структуру данных на внутреннем сервере, веб-клиентах, собственных приложениях iOS и собственных приложениях Android. Внутренний сервер написан на NodeJS и использует базу данных Postgres под ним.

Я рассмотрел базу данных Firebase в реальном времени, поскольку она удовлетворит всем требованиям в том смысле, что серверная часть сможет выполнять запись в базу данных Firebase, и все клиенты смогут использовать базу данных.

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

— Вот предположения и требования —-

  1. Серверная часть служит главной, поэтому изменения в структуре данных могут выполняться только серверной частью.

  2. Структура данных может быть принята за простой список пар ключ-значение, простой массив объектов или полноценную древовидную структуру, подобную объекту json. Мы можем работать со всеми решениями.

  3. Размер структуры данных будет очень ограничен, скажем, менее 100 КБ.

  4. Любое обновление структуры данных на сервере должно распространяться на всех клиентов, которые подписались на структуру данных, практически в режиме реального времени.

  5. Если клиент некоторое время находится в автономном режиме, он должен обновляться сразу после подключения.

  6. У каждого типа клиентов должен быть надежный способ подписки на изменения в структуре данных. Следовательно, как только локальная версия структуры данных обновляется, в то же время она должна быть уведомлена о том, что изменилось.

  7. По возможности клиенты, получая уведомления об обновлении структуры данных, должны знать, какая «часть структуры данных» была обновлена.

  8. Мы хотим написать как можно меньше кода и предпочитаем решение, в котором есть серверная библиотека для NodeJS и клиентские библиотеки для web, родной iOS и родной Android.

  9. Собственные приложения не могут запрашивать разрешение на push-уведомления.

  10. Это должно работать в любом современном браузере, поддерживающем websockets или аналогичный.

Комментарии:

1. Firebase выполняет практически все это, поэтому возникает вопрос; почему бы вам просто не использовать Firebase Realtime Database или FireStore?

2. Я нашел это сравнение, которое кажется весьма уместным для моего вопроса: medium.com/@brenda.clark /…

3. @Jay Я обеспокоен блокировкой поставщика, будущими расходами, выходящими из-под контроля, и так далее. Кроме того, мне не требуется двунаправленная синхронизация, поэтому у меня такое ощущение, что должно существовать радикально более простое решение в виде нескольких простых библиотек, построенных на основе websockets или поддерживающих http-соединения.

4. Во многих утверждениях эта статья бессмысленна; утверждение, что Firebase сложна для навигации, неорганизованна, к ней сложно обращаться с запросами и что ваши данные легко удаляются, не очень точное (удаление данных в три клика может произойти с большинством баз данных), поэтому я бы не стал вдаваться в подробности. (IMO!). блокировка поставщика была бы проблемой для любой серверной базы данных, предоставляющей API. Parse — хороший пример. Если приложение создано, все данные обернуты вокруг PFObject , вы как бы привязаны к этому без серьезной перезаписи. Итак, немного изучите FB и посмотрите, как вам это понравится.

Ответ №1:

интересный вопрос. Я не знаю ни одной системы с открытым исходным кодом, которая бы это делала, я полагаю, что Firebase сама была разработана на основе такой системы, называемой Parse. Теперь, что я могу вам сказать, это то, что Firebase — надежный выбор, и, возможно, вам не следует так быстро отказываться от него:

  1. Firestore — это новая система баз данных. База данных реального времени будет постепенно прекращена. И firestore превосходит по возможностям.

  2. Firebase бесплатна для запуска и до очень высокого уровня, то есть вполне доступна.

  3. Это УПРАВЛЯЕМО. Я не могу не подчеркнуть важность этого. Защита или обслуживание системы — не ваша проблема, как это было бы, если бы вы внедрили свое собственное решение.

  4. Это автоматическое масштабирование, то есть не ваша проблема планировать емкость, или покупать, или развертывать, или синхронизировать дополнительные серверы, или заботиться о памяти или диске. Обо всем этом позаботились за вас.

  5. «Функции, которые вам могут не понадобиться», значительно экономят время и средства, такие как управляемая аутентификация у разных поставщиков, мобильные push-уведомления, аналитика, хранилище файлов и другие.

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

Тем не менее, могу я узнать, почему вы об этом спрашиваете? Я хорошо знаком с Firebase и, вероятно, смогу помочь вам с развертыванием.

Приветствия

Комментарии:

1. Firebase не имеет отношения к Parse, и у них совершенно другой подход, но в целом хороший ответ.

2. lol, правда, у меня была идея, что это был ее предшественник, но рад, что вам понравился мой ответ: P

3. Спасибо за ответ @SergioFlores. Мою мотивацию задать вопрос можно рассматривать как комментарий к моему первоначальному вопросу.

4. @NikolaSchou Я прочитал сравнение, которое вы опубликовали. Прежде всего, что это за излишество? Такого понятия не существует. Это гибкий инструмент, разработанный для нормальной динамики изменений на ранней стадии запуска. Блокировка поставщика? Мммм, не совсем, если и когда вам нужно что-то другое, так это потому, что у вас есть деньги, чтобы это произошло.

5. medium.com/@saft.industries/…