Azure
30 марта 2010 г. 17:00 19:00
Часовой пояс: (GMT+03:00) Москва
Москва, Россия. Точный адрес будет сообщен дополнительно
Общая информация о мероприятии
Продукты: Microsoft SQL Server
На мероприятии будут обсуждаться вопросы перевода решений с MySQL на Microsoft SQL Server.
Особое внимание будет уделено инструментарию для автоматизированного переноса баз
Microsoft SQL Server Migration Assistant for MySQL (CTP), который автоматически
конвертирует типы данных в ближайшие совместимые, а также переносит ключи и индексы
(поддерживаются SQL Server 2005, 2008 и SQL Azure).
В ходе встречи будет рассмотрена работа программы на примере реального веб-приложения
- форума PhpBB 3, а также проведены оценки выигрыша в производительности от перехода
на SQL Server. Под SQL Server понимается бесплатная редакция SQL Server 2008 Express,
которую можно свободно скачать с веб-сайта.
К участию в семинаре приглашаются директора по разработке, архитекторы, специалисты
по разработке и тестированию.
Участие в мероприятии бесплатное. Допускается участие нескольких человек от компании.
По вопросам участия во встрече вы можете обращаться по адресу: isvrus@microsoft.com.
Получить информацию о ресурсах Microsoft, доступных компаниям-разработчикам, вы можете на портале
www.microsoft.ru/isv.
Параметры регистрации
Дополнительная информация
Вопросы относительно участия в мероприятиях можно адресовать в Информационный центр
Microsoft Россия:
8-800-200-8001 (бесплатные звонки из городов России)
7 (495) 916-71-71 (для звонков из Москвы)
Факс: 7 (495) 641-10-40
Электронная почта: russia@microsoft.com
Код мероприятия: 1032446895
Читать далее
Категория:
SQL Server, Новости, Семинары, SQL Server 2008, SQL Server Configuration, sqlserver, Evangelism, MS SQL Server 2005, Azure, x64, Конференции и доклады, Презентации, Tips & Tricks, SQL Server 2008 R2, Примеры, Tips and Tricks, Анонсы
|
|

Продолжаю традицию в начале года верстать очередной
BlogROLL. За основу
этого списка новостных лент берётся мой актуализированный OPML,
т.е. счастливым обладателям IE7 и выше достаточно просто импортировать его каналы.
Как это сделать уже было подробно и наглядно описано
в моём блоге. Тех же, кто предпочитает список блогов, я пригашаю перейти по этой
ссылке на страницу, где я сгруппировал блоги по нескольким
тематическим направлениям: SQL Server BLOGROLL 2010
Вашему вниманию предлагается актуализированный список блогов (блоги, которые не
пополнялись больше года, из него исключены). Кроме того, в списке появилось очень
много совершенно новых авторов, которые публикуют исключительно интересные материалы
и исследования, так либо иначе связанные с SQL Server. Прошлогодняя лента блогов
такде доступна, напоминаю ссылку на её страницу: SQL Server BLOGROLL 2009
Читать далее
Категория:
SQL Server, Windows Search, Operations Manager, Новости, Книги, Безопасность, Семинары, Журналы, Разработка БД, Visual Studio, SQL, SQL Server 2008, SQL Server Configuration, vs.2008, sqlserver, vs.tip, Security, Bug, Scripting, DMF, DataDude, Evangelism, Transact-SQL, MS SQL Server 2005, Проектирование баз данных, Анализ и настройка производительности MS SQL Server, Дополнения к сайту www.sql-ex.ru, Azure, x64, Документация, VSTS, SSRS, Конференции и доклады, Видео, Ответы на вопросы, Презентации, Entity Framework, SQL Data Services, sql server ssis, PowerShell, WMI, Windows, BI, Hotfix, SP, Tips & Tricks, sql server оптимизация запросов, Cluster, MSMQ, SQL Services, Uncategorized, Data mining, SqlExpress, SQL Server Profiler, SQL Server 2008 R2, Примеры, Ресурсы, Tips and Tricks
|
|
На ресурсе Way2Cloud были выложены переводы Whitepapers по Azure. Но в начале мая оригинальные документы обновили для соответствия March 2009. Поэтому переводы тоже пришлось обновлять. Сейчас доступны: Также доступен перевод документации по Azure Storage: Читать далее...
Читать далее
Категория:
Azure
|
|
Как я писал раньше, SQL Data Services будет обновлен для поддержки обычного TDS доступа и переписывать существующие приложения не потребуется. Сейчас проходит фаза внутреннего тестирования системы и получить доступ для собственных экспериментов не получается. Но уже появились первые примеры кода для работы с SDS: Общие несколько моментов: - действительно используются обычные библиотеки и Transact-SQL
- нужно обязательно использовать шифрование (включается параметром строки соединения Encrypt=true)
- параметры для соединения стоятся по принципу:
- <имя виртуального сервера>.data.dev.mscds.com (при переходе в публичную эксплуатацию будет заменено на data.database.windows.net)
- логин для подключения <логин>@<имя виртуального сервера>
Читать далее...
Читать далее
Категория:
SQL Server 2008, Azure
|
|
При построении облачных решений или при интеграции систем разных организаций часто возникает проблем обеспечить публичный доступ к службам находящимся в локальных сетях. Самым простым решением кажется “проброс”, то есть перенаправление портов на роутере, но обычно он приводит к большему число проблем, чем решает. В рамках платформы Azure доступе компонент .NET Service Bus, который позволяет представить публичный доступ к спрятанному в глубинах организации сервису. Документация доступна здесь с декабря. Но совсем недавно ее перевели на русский язык. Перевод живет здесь. Читать далее...
Читать далее
Категория:
Azure
|
|
После того как анонсировали поддержку обычной реляционной модели вместо ACE подхода. Сразу возникло множество технических вопросов: на сколько будет поддерживатся реляционная модель, на базе какой версии SQL Server, что с безопасностью, что делать со старым HTTP подходом. Детальные ответы будут 20 марта на сесии MIX’09. Для особо нетерпеливых (вроде меня) опубликовали первый этап FAQ. Некоторые выдержки: 1. Обещают максимально полную поддержку реляционной модели. Так что приложения не прийдется переписывать в области доступак данным 2. SDS базируется на SQL Server 2008 Enterprise Edition 3. Соединение с SDS будет только шифрованное 4. Старый REST и SOAP интерфейс будет убран вместо его будет базированный на ADO.NET Data Services способ. То есть поверх HTTP все-равно можно будет использовать Также в MSDN выложили немного общей архитектуры. Из которой следует, что TDS соединение будет делаться не на прямую, а через специальный gateway (что вообщем-то логично с точки зрения аутентификации и защиты от атак). Второй момент можно будет подключаться не только с приложений, размещенных в Azure, а из любых. Читать далее...
Читать далее
Категория:
Azure
|
|
Вчера нашел ссылку на Windows Azure Training Kit и решил сделать несколько лаб по SQL Data Services (старое название включало слово Server, но от него решили избавиться). Первое, что нужно это возможность создать себе учетную запись. Такая у меня уже имелась. Иначе прийдется доставать код инициации. Одной учетной записи достаточно для доступа ко всем элементам Windows Azure. REST интерфес Дальше раскрываем первую лабу и делаем создаем себе Authority (можно считать, что это что-то среднее между базой данных и экземпляром SQL Server в облаке). Для того чтобы, что-то сделать с SDS нужно послать HTTP запрос с XML содержимым говорящим, что делать. Для создания Authority по адресу https://data.database.windows.net/v1/ посылаем запрос: 1: <Authority xmlns="http://schemas.microsoft.com/sitka/2008/03/">
2: <Id>kosinskylabs</Id>
3: </Authority>
В результате мой Authority называется: https://kosinskylabs.data.database.windows.net/v1/. Если зайти по этому адресу с указанием логина и пароля, то получим что-то похожее на:
1: - <s:Authority xmlns:s="http://schemas.microsoft.com/sitka/2008/03/"
2: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns:x="http://www.w3.org/2001/XMLSchema">
4: <s:Id>kosinskylabs</s:Id>
5: <s:Version>69802</s:Version>
6: </s:Authority>
Здесь я наступил на первые грабли. Названием должно состоять только из маленьких латинских букв и цифры (об этом честно сообщают в Note к лабе, но кто ж такое читает :) ). И при создании не корректного мы получим ошибку HTTP (400) Bad Request, хотя в теле ответа будет реальное описание ошибки:
1: 400: The authority id provided results in a invalid hostname and is therefore invalid.
2: Names can only be made up of lowercase letters 'a'-'z', the numbers 0-9and the hyphen.
3: The hyphen may not lead or trail in the name.
4: <s:Error xmlns:s="http://schemas.microsoft.com/sitka/2008/03/">
5: <s:Code>6002</s:Code>
6: <s:Message>The authority id provided results in a invalid hostname and is therefore invalid.
7: Names can only be made up of lowercase letters 'a'-'z', the numbers 0-9 and the hyphen.
8: The hyphen may not lead or trail in the name.</s:Message>
9: </s:Error>
Дальше создаем контейнер. Контейнер будет хранилищем наших сущностей. Для этого посылаем на адрес нашего Authority (https://kosinskylabs.data.database.windows.net/v1/) POST запрос:
1: <Container xmlns="http://schemas.microsoft.com/sitka/2008/03/">
2: <Id>tasks</Id>
3: </Container>
Контейнер будет иметь адрес: https://kosinskylabs.data.database.windows.net/v1/tasks
Дальше создаем объекты. Их называют Entity. В отличии от таблиц базы данных свойства у них могут быть произвольные. Например, для создания задачи отсылаем на адрес нашего контейнера запрос:
1: <Task xmlns:s="http://schemas.microsoft.com/sitka/2008/03/"
2: xmlns:x="http://www.w3.org/2001/XMLSchema"
3: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4: <s:Id>task_b</s:Id>
5: <Subject xsi:type="x:string">Task B</Subject>
6: <StartDate xsi:type="x:dateTime">2008-11-02 12:20:51Z</StartDate>
7: <DueDate xsi:type="x:dateTime">2008-11-12 12:20:51Z</DueDate>
8: <Status xsi:type="x:string">In Progress</Status>
9: <Priority xsi:type="x:string">Normal</Priority>
10: <IsComplete xsi:type="x:boolean">false</IsComplete>
11: <PercentComplete xsi:type="x:decimal">0</PercentComplete>
12: </Task>
Все кроме Id не обязательно.
Чтобы вытащить данные мы должны используя GET, что-то похожее на LINQ. Например, чтобы выбрать все элементы контейнера делаем запрос:
1: from e in entities select e
Если запрашиваем: https://kosinskylabs.data.database.windows.net/v1/tasks?q=from e in entities select e, то в результате получим:
1: - <s:EntitySet xmlns:s="http://schemas.microsoft.com/sitka/2008/03/"
2: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns:x="http://www.w3.org/2001/XMLSchema">
4: - <Task>
5: <s:Id>task_a</s:Id>
6: <s:Version>59588</s:Version>
7: <Subject xsi:type="x:string">Task A</Subject>
8: <StartDate xsi:type="x:dateTime">2008-10-18T11:20:51</StartDate>
9: <DueDate xsi:type="x:dateTime">2008-10-28T12:20:51</DueDate>
10: <Status xsi:type="x:string">Finished</Status>
11: <Priority xsi:type="x:string">Normal</Priority>
12: <IsComplete xsi:type="x:boolean">false</IsComplete>
13: <PercentComplete xsi:type="x:decimal">0</PercentComplete>
14: </Task>
15: - <Task>
16: <s:Id>task_b</s:Id>
17: <s:Version>59589</s:Version>
18: <Subject xsi:type="x:string">Task B</Subject>
19: <StartDate xsi:type="x:dateTime">2008-11-02T12:20:51</StartDate>
20: <DueDate xsi:type="x:dateTime">2008-11-12T12:20:51</DueDate>
21: <Status xsi:type="x:string">In Progress</Status>
22: <Priority xsi:type="x:string">Normal</Priority>
23: <IsComplete xsi:type="x:boolean">false</IsComplete>
24: <PercentComplete xsi:type="x:decimal">0</PercentComplete>
25: </Task>
26: </s:EntitySet>
Запрос можно усложнить. Например, спросив =+DateTime("2008-11-07+00:00:00Z")+select+e'">https://kosinskylabs.data.database.windows.net/v1/tasks?q='from+e+in+entities+where+e["StartDate"]+<=+DateTime"2008-11-07+00:00:00Z")+&&+e["DueDate"]+>=+DateTime("2008-11-07+00:00:00Z")+select+e'. Получим только одну запись.
SOAP интерфейс
Кроме описанного выше REST способа доступа можно воспользоваться SOAP методами, со следующим контрактом:
1: public interface ISitkaSoapService
2: {
3: Scope Create(Scope scope, Entity entity);
4: void Delete(Scope scope);
5: Entity Get(Scope scope);
6: List<Entity> Query(Scope scope, string query1);
7: Scope Update(Scope scope, Entity entity);
8: }
Для Entity используется следующий DataContract:
1: public class Entity : IExtensibleDataObject, INotifyPropertyChanged
2: {
3: public Entity();
4:
5: public ExtensionDataObject ExtensionData { get; set; }
6: [DataMember]
7: public string Id { get; set; }
8: [DataMember]
9: public string Kind { get; set; }
10: [DataMember]
11: public Dictionary<string, object> Properties { get; set; }
12: [DataMember]
13: public long Version { get; set; }
14:
15: public event PropertyChangedEventHandler PropertyChanged;
16:
17: protected void RaisePropertyChanged(string propertyName);
18: }
Как видим у каждой Entity, есть ID, тип и версия, а также набор произвольных свойств. А Authority и Container, есть потомками от него. По этому, в SOAP варианте интерфейса мы имеем всего один метод Create, что создавать определяется текущим контекстом, то есть объектом Scope:
public struct Scope : IExtensibleDataObject, INotifyPropertyChanged
{
[DataMember(IsRequired = true)]
public string AuthorityId { get; set; }
[DataMember]
public string ContainerId { get; set; }
[DataMember]
public string EntityId { get; set; }
public ExtensionDataObject ExtensionData { get; set; }
[DataMember(EmitDefaultValue = false)]
public VersionMatch VersionMatch { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
,есть хотим создать Authority, то не задаем в контекста никаких свойств, если хотим работать с контейнерами, то задаем только AuthorityId и т.д.
В результате код для создания новой задачи выглядит:
1: //Создаем клиент
2: var client = new SitkaSoapServiceClient();
3:
4: var config = SsdsConfig.Create();
5:
6: //И контекст
7: scope = new Scope();
8: scope.AuthorityId = config.Authority;
9: scope.ContainerId = containerId;
10:
11: //Пользователь для подключения
12: client.ClientCredentials.UserName.UserName = config.Username;
13: client.ClientCredentials.UserName.Password = config.Password;
14:
15: //Создаем объект и задаем его основные свойства
16: var entity = new Entity()
17: {
18: Id = task.TaskId,
19: Kind = "Task"
20: };
21:
22: //Все остальные свойства
23: entity.Properties = new Dictionary<string, object>();
24: entity.Properties.Add("Subject", task.Subject);
25: entity.Properties.Add("StartDate", task.StartDate);
26: entity.Properties.Add("DueDate", task.DueDate);
27: entity.Properties.Add("Priority", task.Priority);
28: entity.Properties.Add("Status", task.Status);
29: entity.Properties.Add("PercentComplete", (decimal)task.PercentComplete);
30: entity.Properties.Add("IsComplete", task.IsComplete);
31:
32: //Собственно создаем
33: client.Create(scope, entity);
34:
35: //Закрываем клиента
36: client.Close();
Аналогично при обновлении объекта, вместо строки создания пишем:
1: scope.EntityId = task.TaskId;
2:
3: client.Update(scope, entity);
Запросы
Для получения объектов с сервера мы в метод Query передаем строку в LINQ формате. И конечно при этом мы можем использовать условия для where. Здесь важно помнить про обязательные и не обязательные свойства.
Для обращения к Id или Kind мы используем точку:
from e in entities where e.Kind=="Task" select e
хотя для Kind есть специальная функция OfKind, а для остальных квадратные скобочки
from e in entities where e["Priority"]=="Normal" select e
Также поддерживаются некоторые из функций, например Take:
(from t in entities where t.Kind == "Task" select t).Take(1)
и Join:
from t in entities.OfKind(“Task”)
from u in entities.OfKind(“User”)
where u[“Name”] == t[“AssignedTo”] select t
Все это можно делать без SDK. При наличии SDK и добавлении ссылки на System.Data.Services.Client, можно оперировать в терминах обычных объектов и LINQ запросов. Читать далее...
Читать далее
Категория:
Azure
|
|
|
|