Как удалить все существующие края и повторно вставить их из CSV-файла

#gremlin #amazon-neptune #gremlinpython

#гремлин #амазонка-нептун #гремлинпитон

Вопрос:

В настоящее время я использую массовый загрузчик Neptune для загрузки данных из CSV в базу данных Neptune с помощью Python. Я получал только измененные записи. Так что я просто вставлял данные.

Теперь файл содержит полные/исторические записи, и требуется удалить все существующие ребра для данной записи в файле CSV и перезагрузить все ребра из файла CSV. Я думал об удалении всех ребер на основе определенного свойства из базы данных, а затем вызвать метод массового загрузчика Neptune.

У меня есть несколько (разных меток) ребер, которые загружаются из CSV-файлов (хранятся в корзине s3). Поэтому мне, возможно, придется удалить несколько ребер, прежде чем я смогу начать загрузку CSV-файлов.

Однако, если я удалю края, а затем произойдет сбой массовой загрузки CSV, у меня не будет возможности вернуть удаленные данные.

Как я могу убедиться, что мое удаление и массовая вставка происходят в блоке транзакций? Есть ли у нас такая возможность на Нептуне? Я использую Python Gremlin.

Ответ №1:

TLDR; Нет, Вы не можете сделать это в Нептуне.

Хотя вы можете достичь этого с помощью ряда шагов.

  1. Сделайте снимок базы данных.
  2. Инициируйте удаление края.
  3. Инициируйте массовую загрузку.

Если массовая загрузка завершится успешно, то вы в порядке.

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

Очевидно, что это решение предполагает, что вас устраивает время простоя, возникающее при создании нового кластера, и ваше приложение получает обновления об этой новой конечной точке кластера.

Комментарии:

1. Я понимаю, что вы не читали вопрос, это не вся база данных, только определенные края, поэтому ваш подход не сработает.

2. Шаг 2. инициирование удаления края зависит от вас. Вы можете частично удалить края или удалить все края. какое это имеет значение ? В нептуне нет такого блока транзакций, с помощью которого вы могли бы выполнять массовую загрузку и ручное удаление ребер в одной транзакции. Извините, что я пропустил, когда вы сказали, что я не читал вопрос ?

3. Есть шаги, которые я делаю сейчас, чтобы начать и посмотреть, как это происходит ежедневно. 1. Сделайте резервную копию всех существующих ребер на основе «от» из вершины. 2. Удалите существующие ребра 3. Массовая загрузка всех ребер из входящего файла. 4. Если шаг 3 завершится неудачно, создайте уведомление для пользователя и перезагрузите все ребра из файлов резервных копий. 5. Если шаг 4 также завершится неудачей по какой-либо причине, создайте уведомление для администратора. Также будет пользовательский интерфейс, в котором администратор может перейти и вручную загрузить файлы резервных копий, когда шаг 4 завершится неудачно.