65.9K
CodeProject 正在变化。 阅读更多。
Home

云的方法 – SQL 数据服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (7投票s)

2008年11月9日

CPOL

6分钟阅读

viewsIcon

43053

downloadIcon

301

概述 Microsoft 的云平台

引言

想象一下,您有自己的公司。业务运作良好,您的企业不断发展。但是,您的网络基础设施会是什么样子?面临许多业务挑战,如增长、灵活性、存储和创新,都需要合适的基础设施。如今,有一种方法称为云计算,它似乎是应对这些挑战的答案。这样的概念不仅需要正确的硬件,还需要合适的软件 – SQL 数据服务 (SDS)。

背景

云计算是一种新的应用程序支持方式。在云计算概念中,存在一个云平台,它允许开发人员编写在云中运行的应用程序,或者使用从云中提供的服务,或者两者兼有。

与本地应用程序不同,云中的应用程序具有不同的架构。虽然本地平台支持企业级应用程序,但云平台运行在互联网级别,可处理更多并发用户。这种高可伸缩性迫使云平台以不同的方式提供功能。

SDS 就是这样一个云平台。它基于 HTTP,并使用 SOAP 和 REST 协议在云和客户端之间进行查询和数据传输。SDS 因其服务接口和简单的数据模型而非常灵活。为了轻松处理和操作数据,还有一个与服务接口和数据模型配合使用的查询语言。我们真的需要查询语言吗?这仅仅是开销吗?

在云平台上,存在一些限制。例如,无法访问底层操作系统功能来处理数据,但这是为什么呢?

“云计算之所以如此吸引人,部分原因在于其潜在的可伸缩性,但要使基于云基础构建的应用程序能够处理互联网级别的负载,就需要对其进行某些方面的限制。” [DavChap08]

The ACE Concept

这些限制导致平台必须自己提供功能,并且必须以灵活高效的方式提供这些功能,以处理大量用户请求并实现可伸缩性。因此,数据存储的访问是通过查询语言进行的。

还有一种不同的数据存储方式。SDS 使用三层包含模型 – ACE Concept。这是一个灵活的数据模型,存储数据无需模式。它有三个级别 – 权限 (authority)、容器 (container) 和实体 (entity)。权限是地理位置的单位,包含一组容器。容器包含一组实体,是一致性和搜索的单位。实体是名称-值对的属性包,因此是更新和更改的单位。这种数据模型允许云进行任意扩展。

使用 SDS 和 REST

首先,您需要 注册 SDS。一旦您拥有账户,就需要下载 SQL 数据服务 SDK。您会在其中找到一个名为 SDS Explorer 的应用程序,我将在此演示中使用它。

打开 SDS Explorer 后,您将看到以下界面。顶部是地址栏,您需要通过它在三个包含级别之间导航。然后有一些按钮用于支持模板和与服务交互。还有一个用于输入查询的文本框,如果您按下左下角的箭头按钮,您将获得有关请求和响应的额外信息。

SDS Explorer

SDS Explorer 使用 REST 协议连接到服务。我首先创建一个权限,它位于 ACE 概念的顶层。因此,我使用权限模板并将其 ID 命名为 **msp-goes-sds**。然后,通过按下“post”按钮将此语句发送到服务。您可以在窗口底部看到请求和响应。在这里,您会发现 REST 基于 HTTP。

注意:您必须明智地选择您的权限 ID,因为目前您无法删除或撤销它。

下一步是创建一个容器;因此,我选择适当的模板按钮。我将这个容器命名为 _actiongames_ 并将其发布。现在,我在三层包含模型中深入了一步。您可以在 URI 中看到这一点,或者通过比较这些语句来了解。

https://{authority id}.data.beta.mssds.com/v1/{container id}
https://msp-goes-sds.data.beta.mssds.com/v1/actiongames

是时候添加一些实体了;还有一个特殊的模板按钮用于此。在底部的框中,您可以看到实体的基本结构。实体可以有两种类型的属性:元数据属性和灵活属性。ID 标签是一个元数据属性,而另外两个,_Name_ 和 _ReleaseDate_,是灵活属性。

<Entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:x="http://www.w3.org/2001/XMLSchema" 
        xmlns:s="http://schemas.microsoft.com/sitka/2008/03/">
  <s:Id>1</s:Id>
  <Name xsi:type="x:string">Halo 3</Name>
  <ReleaseDate xsi:type="x:dateTime">2008-10-18T10:54:27.2712064Z</ReleaseDate >
</Entity>

在图片中,您可以看到两个实体。这些实体的灵活属性在类型上有所不同;并且其中一个实体比另一个具有更多的属性。

Flexible Properties

我多次重复此步骤,在我的 _actiongames_ 容器中添加了几个游戏。现在我可以使用查询语言查询它们。但首先,我必须回到容器级别。这意味着什么?在创建新实体后,URI 会自动移至实体级别。**1** 是当前创建实体的 ID。如果您想返回到容器,只需删除这个 1。

https://{authority id}.data.beta.mssds.com/v1/{container id}/{entity id}
https://msp-goes-sds.data.beta.mssds.com/v1/actiongames/1

现在,我可以查询容器中的实体。我首先创建一个查询,其中使用了一个元数据属性。您应该会识别出访问属性数据的区别。

  • 元数据属性: from e in entities where e.Id=="1" select e
  • 灵活属性: from e in entities where e["Name"]=="Halo 3"

使用 SDS 和 SOAP

这部分需要 Visual Studio 2005 / 2008。我会在 Visual Studio 中创建一个新的控制台应用程序,并希望从 SDS 服务查询数据。创建控制台应用程序后,我需要一个 SDS 的服务引用,所以我会在解决方案资源管理器中转到项目并添加一个服务引用。接下来,我必须通过输入地址来查找服务,然后按“GO”。我将此服务引用命名为 SDSClient 并按“Ok”。

Add a service reference

服务地址: http://data.beta.mssds.com/soap/v1?wsdl

之后,我必须通过在源代码顶部添加一个 using 语句来添加命名空间,并在主块中添加以下代码来查询 SDS 服务。

using MSP_SSDS_Demo.SSDSClient;

static void Main(string[] args)
{
    using (SitkaSoapServiceClient proxy = new 
                   SitkaSoapServiceClient("SitkaSoapEndpoint"))
    {
        // 1 - Access to SSDS
        proxy.ClientCredentials.UserName.UserName = _YourUserName;
        proxy.ClientCredentials.UserName.Password = _YourPassword;
                
        // 2 - Definition of the scope
        Scope myContainerScope = new Scope();
        myContainerScope.AuthorityId = "msp-goes-ssds";
        myContainerScope.ContainerId = "actiongames";
        // 3 - Sample Query
        string sampleQuery = @"from e in entities where e.Id > 
                                      ""1"" select e";
        // 4 - Process Query
        IEnumerable<Entity> games = proxy.Query(myContainerScope, 
        sampleQuery);
        // 5 - List response
        foreach (Entity e in games)
            Console.WriteLine(e.Properties["Name"]);
        Console.Write("Press any key...");
        Console.ReadKey(true);
    }
} 

首先,我创建了一个 using 块,并在其中实例化了一个 SitkaSoapServiceClient 对象。这个对象是我的服务的代理。现在我必须提供我的凭据给代理才能访问 SDS。接下来我需要一个范围,因为 ACE 概念。我在第 2 点定义了这个范围。通过 myContainerScope.AuthorityIdmyContainerScope.ContainerId,我明确指定我想在 _actiongames_ 容器中查找实体。之后,我创建查询。我想要所有 ID 大于 1 的游戏。所以,我使用查询语言来构建这样的结构。所以现在,我只需要处理这个查询。我在第 4 点执行此操作。最后,我将响应列出到输出。

注意:在本文中,有时您会看到缩写 SSDS 而不是 SDS,尤其是在演示截图或服务 URL 中。这是因为名称从 Microsoft SQL Server Data Services (SSDS) 更改为 Microsoft SQL Data Services (SDS)。也可能在 Beta 状态后某些 URL 会有所不同。

[DavChap08] Chappell, David: Cloud Platforms – An enterprise oriented overview. Chappell & Associates, 2008
[JasLee08] Lee, Jason: Microsoft SQL Data Services – Under the Hood. Microsoft, 2008
[MSDN08]

MSDN Library – SQL Data Services Primer
版本:2008。 [最后检查于 2008 年 11 月 5 日]

历史

  • 2008 年 11 月 9 日:初始发布
© . All rights reserved.