我正在寻找一种数据存储选项,用于存储心电图(1000个样本/秒)和其他患者数据(例如血压,体温等 - 以低得多的采样率采样)在我的c#.net应用程序的可查询存储中。
我已经评估了SQLite(这本身就是一个很好的选择),但我正在寻找一些符合以下要求的选项:
小存储空间 - ECG通常以1000个样本/秒进行采样,我需要存储24-48小时的ECG数据(~82到约1.62亿个数据样本)。在SQLite上,它占用了大量的空间。
我应该能够快速阅读部分数据(从 - 到时间戳)。
我应该能够修改部分数据而无需从该点开始写入所有数据。
我也看过HDF5,但还没有真正了解如何在C#.net中使用它。
寻找实用的建议。
谢谢,
维克拉姆
答案 0 :(得分:2)
您的使用案例似乎非常适合HDF5。
- 小存储空间 - 心电图通常以1000个样本/秒采样,我需要存储心电图数据24 - 48小时(~82到约1.62亿) 数据样本)。在SQLite上,它占用了大量的空间。
醇>
HDF5可实现高效,紧凑的存储。此外,您可以启用不同的压缩算法/过滤器(gzip,bzip等),而不会影响性能。
- 我应该能够快速阅读这部分数据(从 - 到时间戳)。
醇>
这实际上是HDF5中的主要用例。从数据集中切片数据可以非常快速地完成。
- 我应该能够修改部分数据而无需从该点开始写入所有数据。
醇>
可以扩展数据集并修改数据(很难说它不像SQLite中的UPDATE语句那样方便)。但是有一些关于删除数据的警告。 (有关更多信息,请参阅here)
如果你有很多元信息,你可以考虑将它们存储在SQLite中,并将这些recod连接到包含原始数据的HDF5文件。或者,您也可以将这些元信息作为属性存储在HDF5中的节点/数据集上,并避免一起使用SQLite。
关于HDF5的唯一重大问题/挑战是并发写操作。因此,如果您需要对单个HDF5文件进行并发写入操作,则会变得更加复杂。
要在.NET中使用HDF5,您可以查看此thread。