5

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

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

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

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

感谢您的回答,欢迎利弊。

感谢您的时间。

4

4 回答 4

3

好吧,如果您使用一个 CSV 中的数据来获取另一个 CSV 中的数据,我猜想 SQL Server 会比您想出的任何东西都要快。我怀疑 SQL Server 在大多数情况下会更快,但我不能肯定地说。Microsoft 已投入大量资源来制作一个完全符合您的要求的 DBMS。

根据您的描述,听起来您几乎已经根据表数据和文件夹结构创建了自己的 DBMS。我怀疑,如果您改用 SQL Server,您可能会发现许多领域的事情变得更快、更容易。

可能的优点:

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

可能的缺点:

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

祝你好运!

于 2012-06-21T17:48:37.110 回答
1

我想试着把这些问题打得有点乱。

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

立即地。数据库经过优化(假设您已完成作业)以惊人的速度读取数据。

其中一种方法是否比另一种方法占用更多的存储空间?

在您处理数以万计的文件之前,它可能不会有太大的不同。空间很便宜,对吧?但是,一旦您进入大联盟,您会注意到数据库占用的空间要少得多。

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

好问题。数据库中的所有内容总是回归到可伸缩性。如果您只有一个 CSV 文件要读取,那么您就可以开始了。不需要数据库。几十个也没问题。

看起来您最终可能会扩展到您肯定希望数据库引擎很快支持您的数据的级别。如有疑问,创建数据库是安全的选择,因为您仍然可以在一秒钟内查询 100 GB 的数据。

于 2012-06-21T18:20:17.430 回答
0

在我工作的地方,我们的许多客户都有这个问题。除非您需要现有基础架构的平面文件,或者您认为自己无法计算出 SQL Server,或者如果您只有几个文件需要管理少量数据,那么使用 SQL Server 会更好。

于 2012-06-21T17:53:32.260 回答
0

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

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

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

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

于 2012-06-21T17:57:02.837 回答