2013-11-12 2 views
5

Мы использовали гибридную архитектуру в Windows Azure, сохраняя большинство объектов в базе данных SQL Azure, но бросая все, что может потребовать значительных объемов пространства для хранения в Azure Table Storage.Альтернативы для хранения лазурных таблиц

С этой архитектурой мы сталкиваемся с множеством проблем с Azure Table Storage, которая в лучшем случае поражает меня как незрелого и неполного продукта. Самое большое ограничение заключается в том, что для всех практических целей это хранилище данных только для записи. Консенсус в том, что возможности его записи очень хорошо масштабируются, но его возможности запросов и индексирования настолько удивительно ограничены (несмотря на годы users complaining and Microsoft promising), что я пришел к выводу, что вы должны в основном пытаться извлечь данные из ATS в чрезвычайная ситуация. Получение данных из него для сложного, реального времени, транзакционного приложения для производства намного сложнее, чем должно быть. Конечно, есть обходные пути, например, сохранение нескольких копий данных с разными стратегиями индексирования для каждой копии или разделение ваших запросов и их параллельное выполнение, но это добавляет сложности, когда вся точка облачного сервиса заключается в ее минимизации.

Это говорит о том, что мы привержены Azure, и я хотел бы иметь хорошее представление о том, какие альтернативы и подводные камни есть, предпочтительно от людей, которые фактически были на этой дороге в производстве.

Я вполне хорошо знаю, что есть много вариантов NoSQL (например, все перечисленные в этом вопросе: What NoSQL solutions are out there for .NET?), которые я могу запускать либо на виртуальной машине, либо в каком-либо другом облаке. Но мне особенно интересно узнать, есть ли что-то, что хорошо вписывается в модель PAAS от Azure. Другими словами, если я нахожусь на Azure и не хочу управлять своими собственными виртуальными машинами и хочу как можно ближе к почти автоматической и почти бесконечной масштабируемости, обещанной (хотя и не доставляемой) ATS, какие варианты имеют люди нашли ценный? Является ли MongoDB/Azure wrapper простой и жизнеспособной альтернативой? Или я должен просто укусить пулю и развернуть свои собственные ВМ? Или переключиться на AWS? Или придерживаться Azure SQL?

(Чтобы дать вам чувство наших требований к размеру:.. Мы думаем, что мы будем нуждаться для хранения свыше миллиарда строк не огромный, но не пренебрежимо мало либо)

+1

Я точно понимаю, о чем вы говорите, с запросом ATS. К сожалению, у меня нет ответа, но это именно то, что мне нужно будет рассмотреть в ближайшее время, и надеюсь, что кто-то ответит вам. Я кратко посмотрел на MongoLab, но их цены выглядят довольно высокими. –

ответ

2

Мы прошли через аналогичную ситуацию и исследовали несколько вариантов, которые предлагают варианты Azure и nosql.

Мера, которую мы взяли, заключалась в использовании Azure Blob Storage и Lucene.Net. Мы сериализуем наши объекты в Json, а затем сохраняем их в AzureBlobs.

Мы используем Lucene.Net для создания индексов, Lucene.Net возвращает данные, необходимые для получения блоков, содержащих данные, которые мы хотим найти. У нас нет разработки в области производства с этой комбинацией, но в тестах, которые мы сделали, это работает очень хорошо.

3

Хотя хранилище таблиц Azure не поддерживает вторичные индексы и не имеет набора функций SQL, оно не пытается решить ту же проблему.

Я бы избегал SQL Azure (или что бы то ни было, что он называется сейчас), и сосредоточиться на создании слоя данных, который использует то, что Azure подходит (blobs, tables, and queues).

Мы обнаружили, что столовое хранилище является более чем достаточным для крупного производственного решения. За последние 18 месяцев он стал намного лучше. V2 клиентской библиотеки .NET намного лучше, чем v1.

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

Я согласен с предыдущим сообщением, что что-то вроде Lucene может быть хорошим, если вам нужно индексировать большое количество данных. Мы находим, что с помощью таблиц и blobs мы можем обойтись без, но это определенно вариант в вашем наборе инструментов.

+0

Я согласен с тем, что Azure Table Storage не пытается решить те же проблемы в SQL Azure. Моя жалоба заключается в том, что она плохо справляется с проблемами, которые она * пытается решить :-). Я хочу, чтобы MS либо исправила, либо предоставила какую-то другую альтернативу, как первоклассный гражданин Azure. –

+0

Из любопытства, как вы работаете с отсутствием вторичных индексов и чрезвычайно ограниченными возможностями запросов? Я не нашел никого в кругу друзей, которые используют ATS для чего-то большего, чем (в основном) аварийного хранилища, поэтому мне любопытно, как будет работать приложение, фактически сконструированное вокруг ATS, и будет ли это так же неудобно, как Я должен был бы представить, что это будет так. –

+0

Я видел, как Azure Table Storage широко использовалось в нескольких важнейших корпоративных приложениях. Мы склонны использовать архитектуры, подобные CQRS, где Table Storage является одним из аспектов нашей общей архитектуры хранения. Он не пытается быть реляционной базой данных, а скорее хранилищем ключей/значений. – Adrian

1

Azure добились больших успехов в NoSQL, так как это было опубликовано. Теперь вы можете раскручивать Raven и MongoDB в качестве аддонов из Azure, и они недавно объявили «Azure DocumentDB» своим собственным предложением. Это в общественном просмотре - блог здесь: http://azure.microsoft.com/blog/2014/08/21/new-azure-services-and-updates-expand-openness-choice-and-flexibility/

Дополнительная информация и документация доступна здесь: http://azure.microsoft.com/en-gb/services/documentdb/

Как уже упоминалось, Lucene в качестве возможного решения поиск/индекс. У меня есть веб-сайт на сайтах Azure, которые используют индекс Lucene для поиска, и я смог хранить и запрашивать индекс непосредственно на веб-пространстве веб-сайта, поэтому не нуждался в выделенной виртуальной машине или беспокоиться о том, как я показываю индекс через провод. Очевидно, что это может оказаться сложным, если вы хотите поддерживать несколько веб-боксов (при масштабировании), но это может стоить вам знать как возможность. Мой веб-экземпляр поставляется с 50 ГБ дискового пространства, из которых лишь небольшая часть используется веб-сайтом, поэтому индекс Lucene использует его. Я никогда не слышал, чтобы это была официальная стратегия, YMMV.

+0

Я был очень взволнован DocumentDB, пока не прочитал критику Айене Рахиена: http://ayende.com/blog/168034/azure-documentdb. Он все еще находится в предварительном просмотре, поэтому, надеюсь, MS определит некоторые из наиболее очевидных проблем. Но им нужно будет добиться более быстрого прогресса, чем в хранилище таблиц. –

+0

Я также рассмотрел альтернативы Raven и MongoDB через Azure Store. Меня беспокоит то, что они, похоже, оцениваются примерно на том же уровне, что и Azure SQL, с аналогичными целями масштабируемости. Я мог ошибаться в этом, но мне было бы интересно услышать от других людей, которые управляли теми, кто был в производстве в каком-то масштабе. –

1

Может быть, немного от темы.

Существует несколько вариантов использования, где ATS - отличный инструмент.

В одном случае хранятся метаданные, которые вы обычно храните как сериализованные объекты XML (JSON) в вашей обычной RDB. Это данные, которые не требуют индексации, но структурированы. Например, все метаданные клиента. Причиной использовать скорее ATS, чем SQL, является способность ATS добавлять, удалять столбцы таких данных на ходу. Поэтому всякий раз, когда вы меняете структуру метаданных, вам не нужно перебирать все записи клиента, десериализовать XML (JSON), воссоздавать дерево данных, сериализовывать его в XML (JSON) и хранить обратно в таблицу. Это потрясающе. Нижняя сторона монеты - вы должны сохранить плоскую структуру метаданных вместо древовидной структуры, которую вы можете достичь, используя классическую сериализацию XML (JSON).

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

Смежные вопросы