首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server Data Services (SSDS) 應用開發指南:實體、容器、授權與 Web 整合

     編輯:關於SqlServer

前言:雲端資料平台的早期探索

SQL Server Data Services (SSDS) 是微軟早期雲端資料服務嘗試 (後演變為 SQL Azure / Azure SQL Database)。本文基於預發布版本,介紹 SSDS 資料模型、實體/容器/授權機構管理、示範 Web 應用開發、類別序列化與自定義結構描述。注意:文中資訊可能已過時,僅供架構演進參考。

一、SSDS 核心資料模型

1. 三層階層架構

  • Authority (授權機構):最頂層容器,對應單一帳戶/訂閱,包含計費、配額、存取控制
  • Container (容器):Authority 內的邏輯分組,類比資料庫,擁有獨立結構描述、索引策略
  • Entity (實體):Container 內的資料單元,類比資料列,但為半結構化 (屬性包),支援動態屬性

2. 實體特性

  • 無固定結構描述:同一 Container 內實體可擁有不同屬性集合
  • 屬性類型:String、Binary、Numeric、DateTime、Boolean、Reference
  • 系統屬性:`Id` (唯一識別)、`Version` (樂觀並發控制)、`Kind` (邏輯分類)
  • 大小限制:單一實體 ≤ 1 MB (含所有屬性)

二、管理操作:RESTful 介面

1. 建立 Authority/Container

POST /{authority} HTTP/1.1
Content-Type: application/ssds+xml
Authorization: SharedKey {account}:{signature}



  MyAuthority


POST /{authority}/{container} HTTP/1.1
...

  Products
  Flexible  

2. 實體 CRUD

-- 建立/更新實體 (Upsert)
PUT /{authority}/{container}/{entityId} HTTP/1.1
Content-Type: application/ssds+xml
If-Match: "{version}"  -- 樂觀鎖


  SKU12345
  1
  Product
  
    Widget Pro
    29.99
    hot;sale;new
  


-- 查詢實體
GET /{authority}/{container}?query=Kind:Product AND Price>20 HTTP/1.1

-- 刪除實體
DELETE /{authority}/{container}/{entityId} HTTP/1.1
If-Match: "{version}"

三、示範:分類廣告 Web 應用

1. 領域模型對應

業務概念SSDS 映射Kind 值
城市Container: Cities / EntityCity
類別Container: Categories / EntityCategory
廣告列表Container: Listings / EntityListing
自定義結構描述Container 中繼資料Schema

2. 核心操作程式碼片段 (C#)

public class SsdsClient {
    private readonly string _authority, _account, _key;
    private readonly HttpClient _http;

    public async Task UpsertEntityAsync(string container, Entity entity) {
        var xml = entity.ToSsdsXml();
        var req = new HttpRequestMessage(HttpMethod.Put, 
            $"{_baseUrl}/{_authority}/{container}/{entity.Id}") {
            Content = new StringContent(xml, Encoding.UTF8, "application/ssds+xml")
        };
        req.Headers.Add("If-Match", $"\"{entity.Version}\"");
        SignRequest(req);
        var resp = await _http.SendAsync(req);
        resp.EnsureSuccessStatusCode();
        return Entity.FromSsdsXml(await resp.Content.ReadAsStringAsync());
    }

    public async Task> QueryAsync(string container, string query) {
        var resp = await _http.GetAsync($"{_baseUrl}/{_authority}/{container}?query={Uri.EscapeDataString(query)}");
        return Entity.ParseFeed(await resp.Content.ReadAsStringAsync());
    }
}

// 實體類別序列化/反序列化
[DataContract]
public class Entity {
    [DataMember(Name="Id")] public string Id { get; set; }
    [DataMember(Name="Version")] public string Version { get; set; }
    [DataMember(Name="Kind")] public string Kind { get; set; }
    [DataMember(Name="Properties")] public List Properties { get; set; }

    public string ToSsdsXml() { /* XML 序列化邏輯 */ }
    public static Entity FromSsdsXml(string xml) { /* XML 反序列化邏輯 */ }
}

3. 自定義結構描述



  Listings
  Explicit
  
    
    
    
    
  

  • `Explicit` 模式:強制結構驗證、支援索引、效能較佳
  • `Flexible` 模式:動態屬性、適合快速原型、無索引優勢

四、進階主題

1. 類別反序列化與強型別實體

public class ListingEntity : Entity {
    public ListingEntity() { Kind = "Listing"; }

    [EntityProperty("Title")] public string Title { get; set; }
    [EntityProperty("Price")] public decimal Price { get; set; }
    [EntityProperty("PostedDate")] public DateTime PostedDate { get; set; }
    [EntityProperty("Images", MultiValued=true)] public List Images { get; set; }

    // 自動映射屬性 <-> SSDS Properties
}

2. 分頁與大量資料處理

  • 查詢回傳預設 100 筆,使用 `NextLink` 分頁
  • 大量匯入:Batch 作業 (多實體單一請求) 減少網路往返

3. 一致性與並發

  • 樂觀並發:`If-Match: "version"` 標頭,版本衝突回傳 412 Precondition Failed
  • 無分散式交易:跨 Container/Authority 操作需應用層補償 (Saga 模式)

五、遷移至現代 Azure 的啟示

SSDS 概念Azure SQL Database / Cosmos DB 對應
AuthorityAzure 訂閱 / Cosmos DB 帳戶
ContainerSQL Database / Cosmos DB 容器
Entity (Flexible)Cosmos DB 項目 (JSON 文檔)
Entity (Explicit)SQL Database 資料表列
REST + XMLTDS / REST + JSON (Cosmos) / GraphQL
自定義結構描述SQL DDL / Cosmos DB 索引原則

六、總結

SSDS 雖已退役,但其核心思想——多租戶隔離、半結構化實體、RESTful 介面、樂觀並發、彈性結構描述——深刻影響了後續 Azure 資料服務架構。理解 SSDS 有助於把握雲端原生資料平台的設計基因。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved