【问题标题】:Please suggest data storage for single user application请为单用户应用程序建议数据存储
【发布时间】:2013-02-05 07:54:14
【问题描述】:

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

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

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

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

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

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

寻找实用的建议。

谢谢,

维克拉姆

【问题讨论】:

  • 您的应用是单用户应用还是需要并发访问?
  • 我的应用程序是单用户的,但有时会有多个线程在存储上运行(读取和写入)。

标签: .net sqlite storage hdf5


【解决方案1】:

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

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

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

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

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

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

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

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

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

对于在 .NET 中使用 HDF5,您可以查看此thread

【讨论】:

  • 很抱歉这么晚才接受这个回复。不知怎的,我从来没有看到回复的通知。 HDF5 似乎是一个不错的选择。我去看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2017-10-12
  • 1970-01-01
  • 2012-12-16
  • 2018-10-12
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多