2

我有一个数据采集系统,它从一些工业设备中读取值并将值记录到 Microsoft SQL Server 2008 R2 数据库中。数据记录间隔约为 20 秒。每个记录数据包含大约 600 字节的数据。

现在我需要从一个新硬件插入数据,但是这个时间记录间隔必须是 1 秒。换句话说,我每秒将 1 条 600 字节的记录插入 SQL Server 数据库。

我有两个问题:

  1. 每秒插入数据时我可能会遇到任何问题吗?我认为 Microsoft SQL 服务器对于这种插入频率来说是相当不错的,但我不确定很长一段时间。

  2. 程序是一个长时间运行的应用程序。我大约每周都会清除数据表。当我每秒记录数据时,表中每小时将有 3600 行,每天有 86400 行,周末大约有 600K 行。这对于读取数据的良好水平是否可行?或者我应该尝试改变我的方法以避免表中有这么多的行吗?

顺便说一句,我使用 LinqToSQL 进行所有数据库操作,使用 C# 进行编程。

4

4 回答 4

1

每秒插入数据时我可能会遇到任何问题吗?我认为 Microsoft SQL 服务器对于这种插入频率来说是相当不错的,但我不确定很长一段时间。

如果数据库设计得当,那么您应该不会遇到任何问题。我们以更快的速度保存 GIS 数据,没有任何问题。

这对于读取数据的良好水平是否可行?或者我应该尝试改变我的方法以避免表中有这么多的行吗?

这取决于,如果您需要所有数据而不是如何更改方法?如果您不需要它,为什么要保存它?

于 2013-08-14T12:29:29.083 回答
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();

        }
于 2013-08-14T12:41:06.430 回答
0

虽然我认为你应该没问题,因为你显然使用的是 .NET 平台,你可以查看 StreamInsight:http ://technet.microsoft.com/en-us/library/ee391416.aspx

于 2013-08-14T12:46:43.817 回答
0

首先,您必须考虑插入数据的表上的现有索引,因为索引会减慢插入过程。其次,如果你有FULL恢复模式,那么每个插入过程都会写入事务日志,你的日志文件会迅速上升。

考虑将您的恢复模式更改为 SIMPLE,并禁用您的索引。

当然,从该表中选择行会更慢,但我不知道您的要求是什么。

于 2013-08-14T12:31:20.233 回答