2013-03-27 44 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会有性能损失。