我有一个数据采集系统,它从一些工业设备中读取值,并将值记录到Microsoft 2008 R2数据库中。数据记录间隔约为20秒。每个记录数据包含大约600个字节的数据。
现在,我需要从一个新的硬件插入数据,但这一次的记录间隔必须是1秒。换句话说,我每秒钟向SQL server数据库插入1条600字节的记录。
我有两个问题:
顺便说一下,我所有的数据库操作都使用LinqToSQL,编程使用C#。
发布于 2013-08-14 12:31:20
首先,您必须考虑插入数据的表上的现有索引,因为索引减慢了插入过程。其次,如果您有完整的恢复模型,那么每个插入进程都将写入事务日志,日志文件将迅速上升。
考虑将恢复模型更改为简单,并禁用索引。
当然,从该表中选择行要慢一些,但我不知道您的请求是什么。
发布于 2013-08-14 12:29:29
在每秒钟插入数据时,是否会遇到任何可能的问题?我认为Microsoft SQL server对于这种插入频率是很好的,但我不确定是否需要长时间的插入。
如果数据库设计正确,则不会遇到任何问题。我们以更快的速度保存GIS数据,没有任何问题。
这样可以很好地读取数据吗?还是我应该尝试改变我的方法,以避免在表中有这么多行?
这取决于,如果您需要所有的数据,那么您如何才能改变方法呢?如果你不需要它,你为什么要保存它?
发布于 2013-08-14 12:41:06
根据我在大学的论文经验,如果你的系统是完全稳定的,并且不会崩溃或溢出等,你可以使用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();
}https://stackoverflow.com/questions/18231704
复制相似问题