Синхронизация (двусторонняя) распределенных баз данных с центральной базой данных в приложении VueJS / cakePHP3 - PullRequest
0 голосов
/ 03 февраля 2019

Я разрабатываю POS-приложение с VueJS (внешний интерфейс) en cakepPHP3 (внутренний интерфейс).У меня будет несколько экземпляров приложения, работающего на нескольких отдельных серверах.Таким образом, они будут иметь отдельные базы данных, в которые будут сохраняться их собственные заказы, клиенты и т. Д.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что эти отдельные серверы необходимо будет синхронизировать с центральным сервером (яделать это через API REST), например, для отображения статистики в другом приложении администрирования.Кроме того, эти отдельные серверы должны иметь возможность извлекать данные из центрального.Например, если на сервере A был создан новый клиент или заказ, он должен быть виден серверу B через некоторое время.Таким образом, разные серверы смогут редактировать клиентов, которые могут быть созданы на другом.Поэтому синхронизация должна быть двусторонней.Я планирую сделать это с помощью вызовов API.

Ответ / предложение, которое я на самом деле ищу, - это лучший сценарий для структурирования моей (mysql) базы данных.Нам нужно было бы найти решение, чтобы у нас не было первичных ключей, которые сталкиваются при синхронизации с центральной системой.Я читал некоторые статьи в Интернете, которые предлагают использовать GUID / UUID в качестве первичного ключа, но, очевидно, это может отразиться на довольно медленной базе данных, поскольку они не последовательны?Кроме того, это не гарантируется на 100% уникальность, но, по-видимому, близко к ней?

Возможно, другим вариантом будет использование составных первичных ключей.Может быть, мы могли бы использовать комбинацию «id» и «server_id»?И использовать server_id, в который была вставлена ​​конкретная запись?

PS В данный момент я использовал отдельные таблицы базы данных (local_customers & customer) в каждом приложении.В таблице «local_customers» я бы сохранил клиентов, которые были созданы в отдельном приложении.Таблица «клиенты» будет содержать всех клиентов, которые были извлечены из центрального приложения, а также клиентов, которые были созданы на других серверах.Данные в этой таблице «клиенты» - это то, что пользователи будут искать в своем интерфейсе.Позже «local_customers» будет передан в центральное приложение, а также объединены «клиенты».

Но это приведет к задержке между данными, и если кто-то создаст / обновит нового клиента вВ POS-приложении они не увидят, что их изменения будут немедленно отражены во внешнем интерфейсе, поскольку они будут ждать завершения всего процесса синхронизации.Это то, что я хотел бы предотвратить, поэтому я ищу лучшее решение для решения этой проблемы.

Что было бы наилучшим для решения этой хитрой ситуации?

Спасибо!

...