Можно ли запустить SQL Express в веб-роли Azure?

Я работаю над проектом, в котором используется реляционная база данных (SQL Server 2008). Локальное (локальное) приложение выполняет чтение и запись в базу данных. Я работаю над другим внешним интерфейсом для Azure (веб-роль MVC2), который будет использовать те же данные, но только для чтения. Если бы я развертывал традиционное веб-приложение, я бы использовал SQL Express в качестве локальной базы данных и развертывал изменения с обновлениями приложения (данные изменяются очень медленно) или через какую-либо систему синхронизации.

С Azure картинка немного мутная (извините, пришлось). Кажется, я не могу найти никакой информации, чтобы указать, будет ли SQL Express работать внутри веб-ролей, и если да, то как это сделать. Кто-нибудь знает, возможно ли использование SQL Express в веб-роли Azure?

Другие варианты, которые я мог бы сделать, если их заставят: SQL CE или использовать SQL Azure. Оба имеют ряд недостатков и определенно далеки от совершенства.

Спасибо, Эрик

Изменить Я думаю, что мой сценарий недостаточно ясен.

Эти данные не меняются между развертываниями и доступны только из веб-роли; это в основном статический кеш. Локальная часть является своего рода отвлекающим маневром, поскольку она не влияет на данные в веб-роли (помимо того, что является ее источником). По сути, я хочу иметь локальное хранилище/кеш данных, с которым я использую существующий код T-SQL/DAL.

Хотя я мог бы использовать SQL Azure, он ничего не добавляет, а если и добавляет, то только дополнительные накладные расходы и точки сбоя. Я также мог бы использовать роль виртуальной машины, но это слишком дорого/сложно.

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


person Erick T    schedule 13.03.2011    source источник


Ответы (5)


Возможно, вы сможете запустить SQL Express, используя пользовательский виртуальный жесткий диск, но вы не сможете полагаться на какие-либо данные, каждый из которых присутствует на этом виртуальном жестком диске. Виртуальные машины полностью сбрасываются при перезагрузке — физического сохранения при перезагрузке нет.

При желании вы можете найти всю установку SQL Server в хранилище BLOB-объектов Azure.

Однако при выполнении всего этого у вас будет только одна рабочая/веб-роль, которая может использовать эту базу данных. Помните: база данных SQL Server может быть одновременно подключена только к одному SQL Server. Если вы хотите масштабироваться, вам придется создавать новые экземпляры SQL Server для каждой сетевой/рабочей роли.

Помимо соображений стоимости, я не могу придумать ничего в SQL Express, что могло бы стать препятствием для 99,9% существующих приложений.

person Jeremiah Peschka    schedule 13.03.2011
comment
Джереми - Спасибо за ответ. Я не думал о том, чтобы хранить файлы SQL Server в хранилище больших двоичных объектов (худшее из обоих миров). Я мог бы использовать SQL Azure, но это данные только для чтения, локальные для экземпляра веб-роли. Использование SQL Azure только замедлит его и добавит дополнительные точки отказа. К тому же это лишнее и дороже. - person Erick T; 14.03.2011
comment
Итак, вы предлагаете предварительно загружать данные в SQL Server на локальной виртуальной машине и никогда их не изменять? Если это так, вы должны быть в порядке. Однако на самом деле кажется, что SQLite или SQL Server CE послужат вам лучше. - person Jeremiah Peschka; 14.03.2011
comment
Иеремия - это именно то, что я пытаюсь сделать. Я мог бы сократить свой пост, чтобы быть более ясным. :) Проблема в том, что вы не можете получить SQL Express для веб-роли Azure. Мне придется переписать весь мой T-SQL во что-то, что сможет понять CE. Такова жизнь. - person Erick T; 14.03.2011
comment
К сожалению, веб-роли и рабочие роли довольно ограничены, поэтому я упомянул роль виртуальной машины/пользовательский виртуальный жесткий диск. Я не знаю, какова цена на них, но это всегда возможность. - person Jeremiah Peschka; 14.03.2011

Добавление к ответу Иеремии: SQL Azure должен предоставить вам почти все, что сегодня делает SQL Express, и вы можете использовать службу синхронизации для синхронизации локального SQL Server с SQL Azure.

Если вы установили SQL Express в роль виртуальной машины, вы будете потреблять около 90 долларов в месяц только для этого экземпляра, плюс хранилище BLOB-объектов (для надежности вам понадобится облачный диск). По определению роль виртуальной машины (или любая другая роль) должна поддерживать горизонтальное масштабирование; если вы по какой-либо причине масштабируетесь до 2 экземпляров, обоим экземплярам потребуется собственная копия базы данных, поэтому вам нужно будет создать моментальный снимок большого двоичного объекта для каждого экземпляра.

Имейте в виду, однако, что если вы решите установить SQL Express на виртуальную машину: когда у вас будет 2 экземпляра, а также, скажем, 20 ГБ на каждый экземпляр хранилища BLOB-объектов, вы будете получать около 200 долларов в месяц, и вы будете поддерживать свои виртуальные машины. Исправления ОС, конфигурация и обновления SQL Express, процедуры восстановления после сбоя и т. д. В отличие от этого, SQL Azure объемом 20 ГБ при стоимости тех же 200 долларов предлагает более высокую производительность и работает со службой синхронизации, полностью удаляя любые задачи управления ОС или сервером базы данных. от тебя.

person David Makogon    schedule 14.03.2011
comment
Спасибо, Дэвид. Я должен был уточнить, что запуск виртуальной машины полностью исключен по причинам, которые вы упомянули. Хотя SQL Azure подойдет для этого сценария, на самом деле он не подходит. Данные являются локальными для экземпляра веб-роли, доступны только для чтения и не должны быть устойчивыми (например, было бы хорошо, если бы они были частью cspkg). - person Erick T; 14.03.2011

Чтобы добавить к уже существующим ответам и для тех, кто интересуется, стоит ли запускать SQL Express в облаке: это имеет смысл в качестве временного хранилища. Рассмотрим такой архитектурный подход: скажем, вы запускаете узлы для выполнения заданий. Хранение огромного количества результатов вычислений может быть хорошей идеей внутри локального SQL Express для каждого узла и предоставлять агрегированные ответы сразу после завершения задания на узле. Передача уже не актуальных результатов на внешний SQL-сервер для будущих отчетов и т. д. может быть выполнена после слов. SQL Azure может быть не оптимальным с точки зрения объема/задержки/стоимости для хранения огромного количества результатов, и ATS не всегда будет соответствовать всем требованиям, особенно когда речь идет о реляционных данных, производительности или существующем коде.

person Igorek    schedule 14.03.2011
comment
Спасибо за комментарий. Это один из сценариев, в котором я вижу, что это полезно. Кажется, что есть ряд мест, где это было бы неплохо, но похоже, что это не будет началом. - person Erick T; 14.03.2011

Чтобы расширить то, что упомянул Дэвид, вы можете зарегистрироваться для SQL Azure Data Sync CTP2, которая позволит синхронизировать SQL Server с SQL Azure, здесь: http://www.microsoft.com/en-us/SQLAzure/datasync.aspx

Обязательно используйте CTP2, поскольку CTP1 не поддерживает SQL Server.

person Voclare    schedule 14.03.2011

Если это локальный кеш только для чтения - SQL CE 4 или SQLite.

У обоих есть поставщики Entity Framework.

Если вы пишете на него — SQL Azure

person Doobi    schedule 21.03.2011