Есть ли способ использовать OT или CRDT (или что-то подобное) для реляционных данных?

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

Я знаю, что для текстовых документов существуют алгоритмы / технологии для обработки конфликтов, такие как OT и CRDT:

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

  • элементы - идентификатор, имя, отдел_идентификатор
  • отделы - идентификатор, название

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

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

На определенном уровне некоторые из этих конфликтов похожи на те, которые могут возникнуть в тексте с использованием OT. Кто-то меняет название, а кто-то удаляет его. Или кто-то добавляет элемент в маркированный список, а кто-то перемещает список в другую часть документа.

Мой вопрос: можете ли вы использовать OT или CRDT для реляционных данных, и если да, то как бы вы это сделали? Если нет, существуют ли другие подобные алгоритмы или методы для обработки конфликтов в реляционных данных?

1 ответ

В последнее время появилось несколько инструментов, предоставляющих реляционные базы данных, которые синхронизируются с использованием CRDT. Те, о которых я знаю:

  • VLCN: расширение SQLite, которое синхронизирует базы данных по произвольным сетям (например, WebSocket с центральным сервером).
  • ElectricSQL: платформа, которая синхронизирует клиентские базы данных SQLite и серверную базу данных Postgres.
  • TinyBase: хранилище данных браузера с возможностью синхронизации данных с помощью плагинов CRDT.

С академической точки зрения в этих статьях описываются «Бесконфликтные реплицируемые отношения (CRR)», общий подход к моделированию реляционных данных с использованием CRDT:

  • Вейхай Ю и Клаудия-Лавиния Игнат. Бесконфликтные реплицированные отношения для мультисинхронного управления базами данных на периферии. На Международной конференции IEEE по интеллектуальным службам передачи данных , SMDS 2020, страницы 113–121. IEEE, октябрь 2020 г. Официальный , препринт .
  • Ивер Тофт Томтер и Вэйхай Ю. Дополнение SQLite для локального программного обеспечения. На Европейской конференции по достижениям в области баз данных и информационных систем , ADBIS 2021, страницы 247–257. Springer, август 2021 г. Официальный препринт .
Другие вопросы по тегам