我们正在执行物理量的测量并使用数据库 (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)替代方案?