SQL数据库VS.多个平面文件(数千个小CSV)

时间:2012-06-21 17:41:10

标签: c# sql-server database c++-cli flat-file

我们正在设计对当前系统(C ++ \ CLI和C#)的更新。 该系统将从~10K设备(在不久的将来)收集少量(~1Mb)数据量。目前,它们用于将设备数据保存在CSV(表格)中,并将所有这些数据存储在一个宽文件夹结构中。

仅插入数据(创建/附加到文件,创建文件夹),从不更新/删除。 通过将许多CSV读取到外部程序(如Matlab)来完成数据处理。主要用于统计分析。

可以选择开始将此数据保存到MS-SQL数据库。 处理时间(将CSV读取到外部程序)可能需要几分钟。

  • 我们应该如何选择使用哪种方法?
  • 其中一种方法是否比另一种方法占用更多的存储空间?
  • 粗略地说,何时从数据库中读取原始数据比读取CSV更快? (10个文件,100个文件?...)

我很感激你的回答,欢迎优点和缺点。

感谢您的时间。

4 个答案:

答案 0 :(得分:3)

好吧,如果您使用一个CSV中的数据来获取另一个CSV中的数据,我猜想SQL Server会比您提供的任何内容都快。我怀疑在大多数情况下SQL Server会更快,但我不能肯定地说。微软已经投入了大量资源来建立一个完全符合你要求的DBMS。

根据您的描述,您似乎已经基于表数据和文件夹结构创建了自己的DBMS。我怀疑如果你转而使用SQL Server,你可能会发现许多领域的事情变得更快更容易。

可能的优点:

  • 访问速度更快
  • 易于管理
  • 如果您需要
  • ,则易于扩展
  • 更容易实施数据完整性
  • 更容易设计更复杂的关系

可能的缺点:

  • 您必须重写现有代码才能使用SQL Server而不是当前系统
  • 您可能需要为SQL Server付费,您必须检查是否可以使用Express
祝你好运!

答案 1 :(得分:1)

我想尝试点那些问题。

  

粗略地说,什么时候从数据库中读取原始数据   比阅读CSV更快? (10个文件,100个文件?...)

立即。数据库经过优化(假设您已完成作业),以令人难以置信的速率读取数据。

  

其中一种方法的存储空间是否大于   其他

直到你成千上万的文件,它可能不会产生太大的差异。空间很便宜吧?但是,一旦你进入大联盟,你会发现数据库占用的空间更多,而且空间更小。

  

我们应该如何选择使用哪种方法?

好问题。数据库中的所有内容总是回归到可伸缩性。如果你只有一个CSV文件可供阅读,你就可以去了。无需数据库。甚至几十个,没问题。

看起来你最终可能会扩展到你绝对希望数据库引擎很快就能完成的水平。如果有疑问,创建数据库是安全的选择,因为您仍然可以在一秒钟内查询100 GB的数据。

答案 2 :(得分:0)

这是我们的许多客户在我工作的地方遇到的问题。除非您需要现有基础架构的平面文件,或者您认为自己无法找到SQL Server,或者您只需要管理少量数据的文件,否则最好使用SQL Server。

答案 3 :(得分:0)

如果您可以选择使用ms-sql数据库,我会这样做。

在宽文件夹结构中维护数据绝不是一个好主意。读取数据将涉及读取多个文件。这些可以存储在磁盘上的任何位置。你的文件时间会非常高。作为生产数据库的SQL服务器已经解决了这些问题。

你在这里重新发明轮子。这就是foxpro管理数据的方式,每个表一个文件。除非您实际构建数据库服务器,否则使用经过验证的技术通常是个好主意。

我这里没有任何测试统计信息,但如果您处理任何大量数据,那么读取几个文件几乎总是比数据库慢。鉴于您的大约10k设备,您应该考虑使用标准数据库。