В рамках больших данных существуют три часто используемые стратегии обновления данных:
COW: копирование при записи, копирование при записи;
MOR: слияние при чтении, слияние при чтении;
MOW: слияние при записи, слияние при записи;
В платформах хранилищ озер данных, таких как Hudi, первые два обычно используются для реализации обновлений данных. Дорис в основном использует последние два для обновления данных.
При записи данных создается копия исходной копии, поверх нее добавляются новые данные и создается новая версия файла данных. Файл новой версии включает в себя записи из файла старой версии, а также записи из входящего пакета (все самые последние).
Запрос на чтение данных считывает самую последнюю полную копию, что аналогично идее MVCC Mysql.
В библиотеке классов Java есть CopyOnWriteArrayList, а внутренний механизм дочернего процесса Linux также реализован через COW. Можно сказать, что COW — это широко используемое решение для обновления данных.
Вновь вставленные данные сохраняются в дельта-журнале, и дельта-журнал периодически объединяется с файлом данных паркета. При чтении данных дельта-журнал будет объединен со старым файлом данных.
Этот процесс слияния, как правило, представляет собой реализацию многосторонней сортировки слиянием: повторяющиеся ключи объединяются во время запроса, и выполняются операции агрегирования. Более высокая версия ключа перезаписывает более низкую версию ключа и, в конечном итоге, только ту, у которой есть. самая высокая версия возвращается пользователю.
В hudi тип хранения таблиц данных в основном MOR, ссылка: Типы хранения Hudi-Table и сравнение
Перезаписанные и обновленные данные будут помечены и удалены, а новые данные будут записаны в новый файл. Во время запроса все данные, помеченные для удаления, будут отфильтрованы на уровне файла, а прочитанные данные будут самыми последними, что исключает процесс агрегации данных при слиянии во время чтения и может поддерживаться во многих случаях. .
Я не нашел соответствующей информации о других платформах больших данных. Это приложение в основном работает с уникальной моделью данных Дорис, то есть обновление данных в рамках уникальной модели данных осуществляется через MOW.
План реализации MOW Дорис: Удалить + Вставить. То есть при записи данных перезаписанный ключ находится по индексу первичного ключа и помечается для удаления. Обратитесь к решению, предложенному Microsoft SQL Server, в статье «Аналитическая обработка в реальном времени с помощью SQL Server», опубликованной на VLDB в 2015 году.
В этом документе предлагается удалить старую метку данных при записи данных (с использованием структуры данных «Удалить растровое изображение») и записать новые данные в Delta Store. При запросе базовые данные, «Удалить растровое изображение» и данные в Delta Store будут объединены. , Получите последние данные. Общий план показан на рисунке ниже.
Преимущество состоит в том, что любой действительный первичный ключ существует только в одном месте (либо в базовых данных, либо в дельта-хранилище), что позволяет избежать использования большого количества сортировки слиянием во время процесса запроса и в то же время различного богатства в базовых данных. data Индекс хранения столбца по-прежнему действителен.
Проще говоря, процесс обработки слияния при записи выглядит следующим образом:
Причина этой статьи,В основном я хочу обновить часто используемое решение под большими данными (квази-реального времени/реального времени).,Ведь решение универсально,Только методы реализации будут другие.