2

我们正在执行物理量的测量并使用数据库 (MSSQLSERVER2014) 来分析数据。数据从文件(二进制/文本)中读取到我们的数据库中。

我们目前有以下数据表的数据结构:

  • 数据ID(PK,Bigint)
  • 文件 ID (FK, int)
  • 参数 ID (FK, int)
  • UnitID (FK, smallint)
  • 时间(日期时间)
  • 价值(真实)

该表变大(> 1.000.000.000 行),但大多数 SELECT 语句在可接受的时间内执行。

当一个文件或一组文件的分析完成后,我们删除数据以防止数据库堵塞。由于我们保留了原始文件,因此我们始终可以取回数据。使用“DELETE FROM [Data] WHERE [FileID] IN (...)”删除这些行需要很长时间(> 1 天并不罕见)。我还没有尝试过将我们想要保留的数据复制到临时表、截断 [Data] 表并从临时表中恢复数据的性能,因为感觉不对。

为了提高 DELETE 和 SELECT 语句的性能,我正在考虑为每个文件创建一个表,而不是将所有数据转储到一个大表中。这套新表的设计可能如下:

  • 数据ID(PK,Bigint)
  • 参数 ID (FK, int)
  • UnitID (FK, smallint)
  • 时间(日期时间)
  • 价值(真实)

TableName 可以存储在我们的表中,该表跟踪所有文件。要删除文件的数据,我们可以 DROP 表。

这是这种情况的好习惯还是有其他(更好的)技术?

由于我们还使用 EntityFramework 将数据库映射到对象,这些“动态”表会使事情复杂化,但让它工作并非不可能。

其他选项可能是完全放弃 SQL 并使用(noSQL)替代方案?

4

0 回答 0