3

我正在寻找一种数据存储选项,用于在我的 C# 应用程序的可查询存储中存储 ECG(1000 个样本/秒)和其他患者数据(例如血压、体温等 - 以低得多的采样率采样)。

我已经评估了 SQLite(这本身就是一个很好的选择),但我正在寻找一些可以满足以下要求的选项:

  1. 存储空间小 - ECG 通常以 1000 个样本/秒的速度进行采样,我需要将 ECG 数据存储 24 - 48 小时(约 82 至约 1.62 亿个数据样本)。在 SQLite 上,它占用了大量空间。

  2. 我应该能够快速读取这些数据的一部分(从 - 到时间戳)。

  3. 我应该能够修改部分数据,而不必从那时起写入所有数据。

我也看过 HDF5,但还没有真正了解如何从 C#.net 使用它。

寻找实用的建议。

谢谢,

维克拉姆

4

1 回答 1

2

您的用例似乎非常适合 HDF5。

  1. 存储空间小 - ECG 通常以 1000 个样本/秒的速度进行采样,我需要将 ECG 数据存储 24 - 48 小时(约 82 至约 1.62 亿个数据样本)。在 SQLite 上,它占用了大量空间。

HDF5 允许非常高效和紧凑的存储。此外,您可以启用不同的压缩算法/过滤器(gzip、bzip 等),而不会对性能造成太大影响。

  1. 我应该能够快速读取这些数据的一部分(从 - 到时间戳)。

这实际上是 HDF5 中的一个主要用例。从数据集中切片数据可以很容易地非常快速地完成。

  1. 我应该能够修改部分数据,而不必从那时起写入所有数据。

可以扩展数据集并就地修改数据(虽然它不如 SQLite 中的 UPDATE 语句方便)。但是,关于删除数据有一些注意事项。(有关更多信息,请参见此处)

如果你有很多元信息,你可以考虑将它们存储在 SQLite 中,并将这些记录连接到包含原始数据的 HDF5 文件。或者,您也可以将这些元信息作为属性存储在 HDF5 中的节点/数据集上,并避免一起使用 SQLite。

关于 HDF5 的唯一大问题/挑战是并发写入操作。因此,如果您需要对单个 HDF5 文件进行并发写入操作,它会变得更加复杂。

要在 .NET 中使用 HDF5,您可以查看此线程

于 2013-02-05T09:35:56.957 回答