我有一个数据采集系统,可以读取某些工业设备的值,并将值记录到Microsoft SQL Server 2008 R2数据库中。数据记录间隔约为20秒。每个记录数据包含大约600字节的数据。
现在我需要从新硬件插入数据,但这个时间记录间隔必须是1秒。换句话说,我每秒在SQL服务器数据库中插入1条600字节的记录。
我有两个问题:
在每秒插入数据时可能会遇到任何问题吗?我认为Microsoft SQL服务器对于这种插入频率是相当不错的,但我不确定很长一段时间。
程序是一个长期运行的应用程序。我大约每周清理数据表。当我每秒记录数据时,我每小时会在表中有3600行,每天有86400行,而在每周结束时会有大约600K行。这对于高水平的阅读数据是否可以?或者我应该尝试更改我的方法,以便在表格中没有这么多行?
顺便说一句,我使用LinqToSQL进行所有数据库操作,使用C#进行编程。
答案 0 :(得分:1)
在每秒插入数据时可能会遇到任何问题吗?我认为Microsoft SQL服务器对于这种插入频率是相当不错的,但我不确定很长一段时间。
如果数据库设计得合理,则不应该遇到任何问题。我们以更快的速度保存GIS数据,没有任何问题。
这对于良好的阅读数据水平是否可以?或者我应该尝试改变我的方法,以便在表中没有这么多的行?
这取决于,如果您需要所有数据而不是如何更改方法?如果你不需要它为什么要保存呢?
答案 1 :(得分:0)
首先,您必须考虑插入数据的表上的现有索引,因为索引会降低插入过程的速度。其次,如果你有完整的恢复模型,那么每个插入过程都将写入事务日志中,你的日志文件将迅速上升。
考虑将恢复模式更改为SIMPLE,并禁用索引。
当然,从该表中选择行会比较慢,但我不知道你的请求是什么。
答案 2 :(得分:0)
根据我在大学的论文经验,如果您的系统完全稳定且不会崩溃或溢出等等。您可以使用SqlBulkCopy
来避免每条记录的I / O操作。
这是DataTable
批量复制的示例代码,此方法应每隔1小时调用一次:
private void SaveNewData()
{
if (cmdThesis.Connection.State == ConnectionState.Open)
{
cmdThesis.Connection.Close();
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(@"Data Source=.;Initial Catalog=YourDb;Integrated Security=True");
bulkCopy.BatchSize = 3000;
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col1", "Col1"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col2", "Col2"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col3", "Col3"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Col4", "Col4"));
bulkCopy.DestinationTableName = "DestinationTable";
bulkCopy.WriteToServer(Result);
Result.Rows.Clear();
}
答案 3 :(得分:0)
虽然我认为你应该没问题,因为你显然使用的是.NET平台,你可以查看StreamInsight:http://technet.microsoft.com/en-us/library/ee391416.aspx