2013-03-27 39 views
1

我一直在試圖評估BrightStar公司DB爲我的項目最初我所做的是檢索數據 -內存數據庫慢 - 從DB

使用明耀DB(服務器SW)我存儲在我的SQL Server數據庫表到其默認存儲即文件位置(C:\Program Files\BrightstarDB\Data),然後衡量與SQL Server數據庫相比的性能增益,我試圖查詢內存和SQL Server中的表,並試圖加載到gridview。

令我驚訝的是,我可以看到直接從SQL Server中加載數據的時間是內存數據庫的一半。我不知道這是否是正確的方法來檢查性能 - 如果任何人有經驗在內存中工作,請指導。

下面是用於從SQL Server直接加載的代碼,並且在內存中我遵循此鏈接http://brightstardb.com/documentation/Developing_With_BrightstarDB2.html

protected void BtnDatabase_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      GridView2.DataSource = null; 

      TDNdc = TextBox1.Text; 
      if (!string.IsNullOrEmpty(TDNdc)) 
       selectCommand = "select * from dbo.TD_List where ID='" + TDNdc + "'"; 

      String connectionString = @"data source=TD-abc\SQLEXPRESS;initial catalog=ScriptSave;integrated security=True"; 
      DateTime varDateTime = DateTime.Now; 
      dataAdapter = new SqlDataAdapter(selectCommand, connectionString); 
      // Create a command builder to generate SQL update, insert, and 
      // delete commands based on selectCommand. 
      SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter); 
      // Populate a new data table and bind it to the BindingSource. 
      DataTable table = new DataTable(); 
      // table.Locale = System.Globalization.CultureInfo.InvariantCulture; 
      dataAdapter.Fill(table); 
      TimeSpan result = DateTime.Now - varDateTime; 
      GridView2.DataSource = table; 
      GridView2.DataBind(); 

      Response.Write("Time Taken to load " + GridView2.Rows.Count + " Record(s) From DB : " + result); 
      //LblInMem.Text = GridView2.Rows.Count + " Record(s) From DB : " + result; 
      //Response.Write("Time Taken to load datafrom DataBase " + result.ToString() + "Total Record :" + GridView2.Rows.Count); 
     } 
     catch (SqlException) 
     { 
     } 
} 
+0

你有任何號碼來支持你的說法嗎?您是否加載了一個整數或在100列的10M行上執行復雜的一系列操作?指標? – HABO 2013-03-27 14:00:46

+0

根據你在這裏得到的代碼,我的猜測是你已經選擇了一個糟糕的方式來衡量任何數據庫的性能。您是否測試了相同的數據集,使用相同的查詢,相同的數據類型,並且多次執行操作(以消除任何首次訪問速度下降)?查詢優化器對select *'的處理方式與按名稱選擇字段不同,並不代表查詢任何數據庫的良好實踐。 – alroc 2013-03-27 14:49:29

+0

那麼我在相同的查詢和數據類型的情況下使用相同的表。我執行了n次,但結果是相同的,無論是當我選擇一些500條記錄還是一條記錄時。我知道select *不是好的做法,因爲我只是想知道我在測試場景中使用的性能和觀察結果ado對象在內存數據庫中的速度要快得多。 – Harry 2013-03-28 02:57:09

回答

2

我覺得這裏有一個誤區。 BrightstarDB不是內存數據庫 - 事實上它是一個完全事務性的持久數據存儲。所以你仍然有磁盤訪問懲罰要付錢。在我的測試中,我發現BrightstarDB通常是磁盤綁定的......在快速磁盤/ SSD上運行它確實有助於提高性能,但我想你會發現SQL Server也是如此。我想你最好基於你的應用程序將使用的查詢類型進行基準測試,並平衡性能考慮與BrightstarDB提供的其他功能,你可能(或不可能)決定的性能考慮大於性能處罰針對特定類型的查詢。

您還應該考慮使用SPARQL而不是LINQ來編寫BrightstarDB查詢。由於LINQ查詢在執行之前轉換爲SPARQL,因此使用LINQ會有性能損失。