demoshop

demo, trying to be the best_

官方網站
http://www.microsoft.com/Sqlserver/2005/en/us/compact.aspx

SQL Compact是一個輕量級的關聯式資料庫引擎,整個安裝起來只需要2M的硬碟空間,執行的時候記憶體只需要5M,微軟給它的定位在於手機程式,因為你不可能在手機上安裝其他版本的SQL所以會有SQLCE的出現,因為它的輕量化,所以demo想要測試在網頁上使用的可能性,於是出現了此篇文章,內容包含了SQLCE的簡單介紹、在WEB專案使用SQLCE的方法,LINQ to SQLCE的解決方案,以及最後的測試效能,期望此篇後對於也想利用SQLCE來開發網頁的網友有直接的益處,也可以對於觀望者一個決定的考量。

先來介紹一下SQLCE是什麼,全名為SQL Server Compact Edition,定位是小型應用,手機、好處在於檔案小,所需資源小,是SQL server的子版本,所以可以很容易的和其他的SQL Server溝通,比如說你在PDA上面的應用程式使用了SQLCE那你可以很方便的把資料同步、轉換到桌面程式來用,想要了解更詳細請參考下方連結。

除了2008官網以外都是中文,不過你真的想看的白皮書都是連結回洋文哈=.=


取得SQLCE的方式很簡單,只要你有裝SQL Server2008、Visual Studio 2008 sp1你的電腦通常都會有SQLCE了,最快的方法直接去找到它!!

X:\Program Files\Microsoft SQL Server Compact Edition

看看你此路徑有沒有檔案,有的話順便把ReadmeSSCE35_CHT.htm檔案打開來看一遍,如果你真的想用SQLCE開發,相信我,裡面的資訊對你很有幫助。

如果你找不到該路徑那就自己到 SQL Server 2005 SQL Server Compact 3.5版(官網) 下載吧

你去SQL Server 2008官網也可以抓,反正SQLCE的版本都是3.5 SP1,而且下載頁面都是洋文=.=


走到這一步就表示你已經有SQLCE了,如果你立刻想要嘗試利用WEB App建立一個SQLCE檔,你會發現你根本找不到它,因為基於微軟官方說得SQLCE本來就不是開發在多人環境下用的,所以你無法直接在WEB這種多人專案上新增出SQLCE檔,你可以參考保哥的最新文章【如何在 ASP.NET 專案中使用 SQL Server Compact 資料庫】利用以下方法來把它找回來,如果你不想這樣用,可以先新增一個Windows Form,建立一個SQLCE的資料庫然後在拿回WEB App使用如下方的步驟。


建立了Windows Form你新增一個項目,裡面就可以看到SQLCE的資料檔案了。


預設中建立好了SQLCE系統會自動帶出新增DataSet的視窗,看你要不要順便建立好強型別的DataSet。


接下來你可以直接開始建立你的Table或是就把SQLCE檔案移動回你的WEB App來使用,利用Visuat Studio就可以直接對SQLCE檔案做操作了,這是建立新Table的畫面

我覺得這介面比較友善耶...


建立好了之後,一定會馬上來測試,第一個遇到的問題就來啦


前文就說過他不適合WEB所以自然會被擋住,參考【MSDN】有詳細的說明,我們必須在Global.asax的Application_Start 事件中送它

AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);

就可以讓ASP.NET支援SQLCE了。


再來你可能想利用LINQ來操作SQLCE,建立了一個LINQ TO SQL後卻發現SQLCE的資料表拖曳不進來,會顯示錯誤不支援,但是不是SQLCE不支援LINQ而是精靈無法自動產生而已,所以我們必須使用SQLMETAL指令來建立DBML檔案(MSDN參考)

假設我們的SQLCE檔案名稱為data.sdf那建立的指令就是

SQLMETAL /dbml:data.dbml data.sdf   ---建立data.dbml檔
SQLMETAL /code:data.cs data.sdf   ---建立data.dbml.cs檔

請注意執行上面指令之前請先將目錄移至檔案所在目錄,不然你就必須要在檔名和建立的檔案前面加上完整路徑,而且利用以上的指令建立出來的並不會有連線指令(因為我沒打...)

如果你使用上面的指令會出現「'SQLMETAL' 不是內部或外部命令、可執行的程式或批次檔。」請直接進入VS的命令提示字元來輸入。


再來就是效能測試的問題了雖然這比較很不公平,但是demo電腦沒有安裝SQL Express所以沒辦法啦...

資料欄位

【Uniqueidentifier】:隨機新增

【nvarchar(500)】:我就是爽

【datetime】:寫入的時間

【int】:123

  • SQL Server Compact 3.5 SP1  --  單一遊覽器執行1000次寫入的速度測試五次
    1. 15.8593750 秒
    2. 15.6250000 秒
    3. 15.5312500 秒
    4. 15.5312500 秒
    5. 15.6875000 秒
    6. 15.4531250 秒
  • SQL Server Compact 3.5 SP1  --  兩個遊覽器(模擬兩個使用者)執行1000次寫入的速度測試五次
    1. 20.1562500 秒
      20.2812500 秒
       
    2. 19.4687500 秒
      19.6250000 秒
       
    3. 19.6093750 秒
      19.7187500 秒
       
    4. 19.6875000 秒
      19.8281250 秒
       
    5. 21.0156250 秒
      20.0937500 秒
  • SQL Server Compact 3.5 SP1  --  三個遊覽器(模擬三個使用者)執行1000次寫入的速度測試五次
    1. 27.1406250 秒
      28.3750000 秒
      27.4218750 秒
       
    2. 32.0625000 秒
      32.0468750 秒
      32.1875000 秒
       
    3. 27.7343750 秒
      30.5625000 秒
      29.3750000 秒
       
    4. 28.3281250 秒
      29.5937500 秒
      28.4375000 秒
       
    5. 29.2500000 秒
      27.4843750 秒
      28.9062500 秒

而在SQL 2008 內相同的測試只需要2~3秒以上的測試報告就給各位參考啦

測試環境

CPU:DualCore Intel Pentium D 945, 3400 MHz (17 x 200)

主機板晶片:Intel Lakeport-G i945G

系統記憶體:3072 MB (DDR2-667 DDR2 SDRAM)

硬碟:ST3320620AS (320 GB, 7200 RPM, SATA-II)

 

Microsoft SQL Server Compact 3.5 Service Pack 1 線上叢書和範例

回應討論