内存数据库速度较慢 - 从数据库中检索数据

时间:2013-03-27 13:25:29

标签: sql-server in-memory-database brightstardb

我一直在尝试为我的项目评估BrightStar DB,我最初做的是 -

使用brightstar 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)
        {
        }
}

1 个答案:

答案 0 :(得分:2)

我认为这里存在误解。 BrightstarDB不是内存数据库 - 实际上它是一个完全事务性的持久数据存储。因此,您仍需要支付磁盘访问权限。在我的测试中,我发现BrightstarDB通常是磁盘绑定的......在快速磁盘/ SSD上运行它确实有助于提高性能,不过我猜你会发现SQL Server也是如此。

正如alroc所提到的,我认为您最好对应用程序将使用的查询类型进行基准测试,并在性能考虑与BrightstarDB提供的其他功能之间取得平衡,您可能(或可能不会)决定超过性能损失。特定类型的查询。

您还应该考虑使用SPARQL而不是LINQ来编写BrightstarDB查询。使用LINQ会产生性能损失,因为LINQ查询在执行之前会转换为SPARQL。