c# - 存储恒定数据流的最佳实践

标签 c# .net sql database

我当前项目的主要要求是每天接收、解析和存储数百万条 radio 消息。这意味着每秒处理许多消息。目前,存储已解析消息的方法对每条消息使用简单的 SqlCommandExecuteNonQuery

鉴于每个项目都由多个 TcpClient 组成,在不同的线程中读取,因此将执行以下 block 的许多并发实例:

query.Append(string.Format("INSERT INTO {0} ({1}) VALUES ({2})", this._TABLE_, col, val));
sqlCmd = new SqlCommand(query.ToString(), sql);
sqlCmd.ExecuteNonQuery();

我知道另一种方法可能是缓存已解析的消息并在预定时间执行批量插入。

使用 Entity Framework 是一种选择,但对于简单的要求来说可能有点矫枉过正。

该程序每天 24 小时都需要持久连接,因此永远不会关闭数据库连接。

所以我的问题是,我目前的做法有多合理?我应该为每条消息关闭和打开连接吗?还是继续使用通过引用共享和传递的全局数据库连接?

最佳答案

您为什么使用 Sql Server 作为您的数据存储?我不是说这个修辞。我的意思是,插入后查询数据有什么要求?是否会对现有数据进行更新?删除?在不久的将来是否有针对此数据的标准化表格?

这些答案将告知您当前方法的合理性。

The program requires a persistent connection 24 hours per day and therefore never closes the db connection.

无论如何,您都应该在代码中打开和关闭数据库连接。 ADO.NET 汇集连接,因此您不必手动保持连接打开:

using (SqlConnection sql = new SqlConnection("...")) {
    query.Append(string.Format("INSERT INTO {0} ({1}) VALUES ({2})", this._TABLE_, col, val));
    using (SqlCommand sqlCmd = new SqlCommand(query.ToString(), sql) {
        sql.Open();
        sqlCmd.ExecuteNonQuery();
    }
}

关于c# - 存储恒定数据流的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18534375/

相关文章:

c# - 如何在上下文绑定(bind)对象中链接消息接收器(面向方面​​的编程)

sql - Mysql - 修改结果数据集

c# - 是否可以将没有结构和有限泛型的 C# 编译到 JVM 中?

c# - 测量下载速度

c# - 声明属性时 "=>"在 .Net C# 中做什么?

一次更新中的 SQL 多个 SET?

SQL:将数据用作列

c# - 将int写入byte,长度为4

c# - OpenCV FileStorage - 如何在 C# 中使用 EmguCV?

c# - 如何使用 .NET 创建包含多个文件的 7-Zip 存档?