Как синхронизировать Azure SQL с хранилищем BLOB-объектов Azure? - PullRequest
2 голосов
/ 20 марта 2012

У меня есть файлы, которые сохранены в хранилище BLOB-объектов Azure, и у меня есть база данных, в которой хранятся URI этих файлов.Есть ли какой-нибудь стандартный способ их синхронизации?Я имею в виду, что не должно быть способа удалить файл без удаления записи в базе данных, и наоборот.

Ответы [ 5 ]

1 голос
/ 20 марта 2012

Я согласен со scripni, вы также можете проголосовать по следующему запросу:

http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting/suggestions/469736-event-handler-support-for-blob

Если в хранилище BLOB-объектов были события, вы могли знать, когда оно было вставлено, и затем обновить базу данных.,Вы также можете иметь рабочую роль или просто локальное задание cron, которое время от времени запрашивает хранилище BLOB-объектов и соответственно обновляет SQL.

1 голос
/ 20 марта 2012

Нет инструмента, который мог бы обеспечить ссылочную целостность между записями базы данных и хранилищем BLOB-объектов Azure.

В качестве альтернативы вы можете использовать рабочую роль, которая будет синхронизировать файлы с базой данных (но здесь у вас определенно будет задержка).

Другим подходом, требующим ясного обсуждения, было бы иметь только одну точку входа для добавления / удаления файлов BLOB-объектов и обрабатывать синхронизацию с базой данных в этом месте.

0 голосов
/ 30 мая 2014

Мое решение состоит в том, чтобы иметь единую точку входа, как предложено scripni, и добавить к ней подход, подобный транзакции.

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

1) пометить записи базы данных как «shouldBeDeleted» = true.

2) попробуйте удалить капли.

3) если произошла ошибка, и BLOB-объекты не были удалены, у вас все еще есть записи, и вы знаете, что BLOB-объекты, на которые они указывают, должны быть удалены. и вы можете попытаться удалить их позже, что более важно, вы можете игнорировать записи в запросах на чтение, как если бы вы использовали подход мягкого удаления.

4) если BLOB-объекты удалены, теперь вы можете удалить записи.

5) если это не удается, записи по-прежнему помечаются как «shouldBeDeleted», что позволяет игнорировать их и очистить позже.

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

Вы можете реализовать ту же идею для вставки / обновления почти таким же образом.

* Немного поздно, но я считаю, что проблема все еще актуальна, и другие столкнулись с ней.

0 голосов
/ 25 июля 2012

Нет нестандартного способа сделать это, поэтому вам нужно написать свой собственный. Я нашел этот пример монитора файлов полезным: http://ben.onfabrik.com/posts/monitoring-files-in-azure-blob-storage

0 голосов
/ 20 марта 2012

Одним из способов реализации транзакций на платформе Azure является использование очередей. Поместить сообщение в очередь и удалять его только после его успешной обработки.

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

...