【问题标题】:Storing Waveforms in Oracle在 Oracle 中存储波形
【发布时间】:2023-03-10 21:54:01
【问题描述】:

我正在设计一个新的实验室数据库。我想将所有测试的原始结果存储在一起。然而,结果可以是单次测量或原始波形。 (转帖见页脚)

以下哪种情况是理想的(为什么)? ...或提供您自己的理想选择。

TEST
  test_id*
  (other TEST fields)

选项 1: 分离单个值和波形结果

TEST (1 -- many) MEASUREMENT
     ( \-- many) RAW_HEADER 1 -- many RAW_POINT

MEASUREMENT             RAW_HEADER
  measurement_id*         raw_header_id*
  test_id (FK)            test_id (FK)
  rec_time as DATE        start_time as DATE
  measurement             sample_rate

                        RAW_POINT
                          raw_header_id* (FK)
                          point_index*
                          raw_measurement

选项 2: 重叠选项 1 中的常用字段

TEST (1 -- many) MEASUREMENT (1 -- many) RECORDING_POINT

OPTION 1 相同,除了:
MEASUREMENT: measurement 对于信号是 sample_rate
RAW_POINT:raw_header* (FK)改成measurement_id* (FK)
RAW_HEADER:不需要

选项 3: 将信号编码为 BLOB 测试(1 -- 许多)测量

MEASUREMENT
  measurement_id*
  test_id (FK)
  rec_time as DATE
  measurement
  signal as BLOB

对于单个值,measurement 是测量值,signalNULL
对于信号measurement 是sample_rate,signal 存储编码数据点

选项 4: 重叠公共字段,但使用 BLOBS

TEST (1 -- many) MEASUREMENT (1 -- many) RAW_DATA

MEASUREMENT             
  measurement_id*      
  test_id (FK)         
  rec_time as DATE     
  measurement

RAW_DATA        
  measurement_id* (FK)
  raw_data as BLOB

对于单个值measurement 是测量值
对于信号measurement 是sample_rate

传奇:

  • __*_ 后跟星号的字段是 完整的主键。
  • (FK) 后跟(FK) 的字段表示字段有外键约束。
  • ____ 除非另有说明,否则所有字段的类型均为 NUMBER

其他信息: 原始波形数据将以多种方式使用: - 绘制(情节看起来是否正确) - 过滤/平滑(为了更好的展示) - 获取值(最大值时间、最小值、下降时间等)

此外,数据将通过多个通道同时采集。当通道 1 首次达到 500(某个单位)时,了解通道 2 的值会很有用。

一个波形通常有大约 4,000 - 25,000 个数据点。

其他想法/问题: 可以退回 BLOB 的一部分吗?换句话说,我可以从字节 4000 开始拉出 4 个字节吗?

blob 是否可以是打包的 Oracle 类型,以便 Oracle 本身可以读取值(即:获取最大值、最小值等)

注意:这是General Oracle Data Collection Storage 的转贴,提供了更好的开发选项。

【问题讨论】:

  • 我喜欢选项 1,因为它将单个值和信号分开。我什至可以添加 raw_point_id 并将数据点的数量存储在 RAW_HEADER 中以更快地检索数据点。选项 2 结合了常用字段以将所有内容放在一个位置。关于选项3,如果我错了,请纠正我。 Oracle(而不是程序检索)很难解码存储在 BLOB 中的原始数据以用于其他计算。
  • 一个典型波形中有多少个点?
  • 4000 - 25000(见编辑的主要问题)

标签: database oracle database-design


【解决方案1】:

信不信由你,我认为这里没有足够的信息可以肯定地说。例如,通常如何处理结果?它们会被绘制出来,或者可能会对它们进行某种数值分析吗?你的波形有多大?

除非您的原始结果通常很小,否则我不喜欢此应用程序的选项 1。存储一个数据点需要大量存储开销。

在较小程度上,同样的反对意见也适用于选项 2。

选项 3 是我可能会采用的方式。我曾经开发了一个用于查看雷击波形的应用程序——每个波形有数百万个点。唯一可行的选择是这种数据集的 BLOB。而且(再次,取决于一些未知数)我会认真考虑将数据存储为二进制浮点数或双精度数,并使用 java 或外部 C 程序处理它们。说真的,您是否需要对您的个人数据点进行密钥访问?加载一个数组并对其进行索引不是更简单、更紧凑、更高效吗?

【讨论】:

  • 在编辑主要问题时回答的问题。你有什么想法?
【解决方案2】:

您以后将如何分析这些数据?

假设您稍后要进行 FFT 或类似操作,只需选择选项 3——它会更容易、更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2012-03-27
    相关资源
    最近更新 更多