我正在开发一个每100毫秒从硬件获取一些数据的项目。我正在使用Visual Studio 2010和C#。每轮数据大小约为50KB。客户希望记录数据库中的所有数据以用于统计目的 我更喜欢使用SQL Server 2005+,因为我很喜欢它,项目应该在大约15天内完成,这是一个小型项目。
我正在考虑System.Data.SQLite如果它不是SQL Server的话。但我不知道学习曲线和速度增强。
答案 0 :(得分:4)
每秒500kb是没有的。我使用每秒几千兆字节的Sql数据库,这完全取决于下面的硬件和服务器配置,但是假设你要在标准的办公桌面上运行它,你会没事的。即便如此,如果你看看每秒20Mb或更多,我会说你可以开始考虑新的硬件。
问题的第二部分。由于您使用的是c#,我建议您使用SQL 2008,然后使用表值参数(TVP),然后在数据集或数据表中缓冲应用程序中的数据,直到您说出10K行,然后调用proc要执行插入操作,您所做的就是将数据表作为参数传递给它。这将节省数百或数千个临时插入。
希望这是明确的,如果没有,请问我会进一步解释。
答案 1 :(得分:3)
每100毫秒50kB是每秒500kB。目前,网络以千兆位速度(每秒许多兆字节)运行,而硬盘驱动器每秒可处理数百MB。 500kB是一小部分数据,所以如果SQL服务器无法处理它,我会感到非常惊讶。
如果您与服务器的网络连接速度较慢或某些其他问题意味着它难以跟上,那么您可以尝试各种策略来改进。想法可能是:
在本地(和/或在服务器上)缓冲数据,并使用单独的线程/进程将其写入数据库。如果您不是每天24小时不断记录,那么当您完成记录时,慢速服务器会赶上。即使您连续记录,这也可以消除任何颠簸(例如,如果您的服务器处于“忙碌时间”的时段,那么它正在努力跟上记录器中的数据)
< / LI>压缩前往服务器的数据,以便发送/存储的数据更少。如果数据包相似,您可能会发现可以获得巨大的压缩率。
如果您不需要每个数据包中的所有内容,请在上传之前从数据中删除任何“无趣”内容。
可能对数据进行批处理可能有所帮助 - 通过收集多个数据包并立即发送所有数据包,您可以最大限度地减少传输开销。
只需将数据直接存储到磁盘上,然后使用数据库对数据进行索引。
...所以我建议你写一个原型,看看在你的网络挣扎之前,你可以通过你的网络在数据库中查看多少数据。