Как иметь полную автономную функциональность в веб-приложении с базой данных PostgreSQL?

Я хотел бы предоставить веб-приложение с базой данных PostgreSQL на 100% в автономном режиме. В идеальном случае база данных должна быть полностью реплицирована в браузере для каждого пользователя и синхронизирована в режиме онлайн. Так что один и тот же код можно использовать для связи как с автономной, так и с онлайн-базой данных. Я знаю, что это возможно с PouchDB и CouchDB, но не нашли решения, которые работают с PostgreSQL. Возможно ли это?

Ответ 1

Короткий ответ: я не знаю ничего подобного, что в настоящее время существует.

Однако теоретически это может быть сделано для работы... (длинный ответ:)

  • Напишите бэкэнд PostgreSQL для levelup (существует один для MySQL: https://github.com/kesla/mysqldown)
  • Подключите пакет-сервер для чтения/записи из вашего PostgreSQL db с использованием существующего адаптера leveldb с помощью pouchdb (который, в свою очередь, должен быть настроен на используйте бэкэнд postgres). Поздравляем, теперь вы можете синхронизировать данные с помощью PouchDB!

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

Вам может быть интересно, например, "смогу ли я синхронизировать существующую сложную схему с несколькими таблицами для клиента с помощью этого подхода?" Ответ, вероятно, не таков: реализация mysqldown leveldown использует одну таблицу MySQL с тремя полями: id, key и value (source), и я предполагаю, что любой универсальный PostgreSQL-адаптер будет похож (ничего не говорит о том, что вы не можете использовать специальный адаптер только для своего приложения!).

С другой стороны, если вы должны были внедрить совместимый с couchdb API (или подмножество - например, вам могут не понадобиться вложения) по вашей существующей схеме базы данных, ничего не мешает вам использовать PouchDB на клиенте для разговора прямо к этому, как если бы это был фактический CouchDB - просто введите URL-адрес и вызовите replicate()! Реализация протокола репликации может быть справедливой работой, поскольку вам нужно отслеживать изменения и так далее, но опять же, технически не невозможно!

Существуют также реализации базового хранилища levelup, которые предназначены для браузеров. См. level.js, что может быть другим способом синхронизации между серверным сервером Postgres levelup и браузером.


TL; DR. В настоящее время в базах данных Javascript ведется множество работ. Не синхронизируется ли с Postgres? возможно нет. Было бы много работы? Определенно. Стоило того? Кто знает, но было бы круто.

Ответ 2

Без установки PostgreSQL на клиенте? Нет. Очевидно, вы можете кэшировать данные для использования в автономном режиме, но все RDBMS + процедурные языки в Javscript, no.