1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiaochengtech-dbsync

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 02:26 7752781

Это реализация инкрементной синхронизации таблиц MySQL с одинаковыми полями.

  • Поддерживает инкрементное получение данных из таблицы, которые необходимо синхронизировать, в определённом формате.
  • Поддерживает пакетную вставку данных, ожидающих синхронизации, в таблицу базы данных по именам столбцов.

Конфигурация базы данных

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

update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Получение инкрементальных обновлений данных

Можно получить самые свежие данные из одной таблицы пакетами. Метод выглядит следующим образом:

func DoFetch(db SQLCommon, tableName string, options FetchOptions) (FetchResult, error)

Параметры:

  • db: дескриптор операции с базой данных.
  • tableName: имя таблицы.
  • options: информация о конфигурации во время получения, формат FetchOptions следующий:
    • IgnoreFields: имена столбцов, которые нужно игнорировать при получении данных; результат получения данных не будет содержать этот столбец.
    • PageNumber: номер страницы для получения инкрементных данных, начиная с 1.
    • PageSize: размер страницы для получения инкрементных данных; чтобы определить, завершена ли разбивка на страницы, достаточно проверить, меньше ли количество полученных результатов размера страницы.
    • UpdateTimeFieldName: имя столбца, содержащего поле времени обновления (update_time), описанное выше.
    • LastUpdateTime: временная метка последнего обновления; если она равна 0, то будут получены все данные; в противном случае будут получены данные, начиная с указанной временной метки.
    • WhereSqlStmt: пользовательский оператор SQL WHERE, связанный с условием времени обновления ([UpdateTimeFieldName] > ?), который имеет отношение AND.
    • WhereSqlArgs: список параметров пользовательского оператора SQL WHERE.

Результат получения — структура FetchResult:

  • columns: список имён столбцов.
  • data: самые свежие данные, двумерный массив, каждая строка представляет собой запись, а значения внутри соответствуют именам столбцов один к одному.
  • count: количество данных.

Примечание: столбцы типа времени будут преобразованы в временные метки при получении, что позволяет сэкономить место для хранения данных.

Вставка одной строки обновлённых данных

Интерфейс:

func DoUpdateOne(db SQLCommon, tableName string, data []interface{}, options UpdateOptions) error

Параметры:

  • db: дескриптор операции с базой данных.
  • tableName: имя таблицы.
  • data: одна запись данных, значения которой соответствуют options.Columns один к одному.
  • options: конфигурация вставки, формат UpdateOptions следующий:
    • Columns: список имён столбцов, соответствующий результату DoFetch.
    • TimeFields: список имён столбцов типа time.Time.
    • FixedFields: фиксированные столбцы для вставки, поскольку некоторые столбцы могут быть настроены на игнорирование в DoFetch, поэтому здесь можно задать значения для этих столбцов.
    • UniqueFields: список имён уникальных или первичных ключей; при сбое операции вставки обновление не затрагивает уникальные или первичные ключи.
    • SqlType: тип базы данных, в настоящее время поддерживаются MySQL и SQLite.

Данный интерфейс не возвращает значение.

Вставка или обновление выполняется с помощью оператора SQL вида INSERT INTO ... VALUES (...) ON DUPLICATE KEY UPDATE .... Причина отказа от использования REPLACE INTO заключается в том, что его обновление сначала удаляет старые данные, а затем вставляет новые, что может привести к изменению некоторых игнорируемых полей.

Пакетная вставка обновлённых данных

Интерфейс:

func DoUpdate(db SQLCommon, tableName string, data [][]interface{}, options UpdateMultiOptions) error

По сравнению с интерфейсом вставки одной строки обновлённых данных, данные становятся двумерным массивом, а в options добавляется ещё одна конфигурация:

  • BatchCount: количество строк для пакетной вставки за раз, используется для ускорения выполнения операций вставки или обновления.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xiaochengtech-dbsync.git
git@api.gitlife.ru:oschina-mirror/xiaochengtech-dbsync.git
oschina-mirror
xiaochengtech-dbsync
xiaochengtech-dbsync
master