0

我正在设计一个新的实验室数据库。对于一些测试,我有几个波形,同时采集了大约 10,000 个数据点。在应用程序(用 C 语言编写)中,波形存储为浮点数组。

我相信我想将每个波形存储为一个 BLOB。

问题:

BLOB 中的数据能否以 Oracle 仅使用 SQL 或 PL/SQL 处理数据本身的方式进行结构化?

  • 确定最大值、最小值、平均值等
  • 当值首次超过 500 时检索索引
  • 检索第 400 个号码
  • 创建 BLOB,它是第一个 BLOB 的派生

注意:此消息是在 Oracle 中存储波形的子问题。

4

3 回答 3

1
  • 确定最大值、最小值、平均值等
  • 当值首次超过 500 时检索索引
  • 检索第 400 个号码

关系数据模型就是为这种分析而设计的——如果你正确地为你的数据建模,Oracle 的 SQL 完全有能力做到这一点。我建议您专注于将浮点数数组转换为数字表 - 我怀疑您会发现在 SQL 中执行这些类型的查询的速度可以弥补所花费的时间。

另一种方法是尝试编写无论如何都会在运行时有效地执行此转换的 SQL - 每次运行 SQL 时;这可能会效率低得多。

于 2009-06-30T01:17:15.407 回答
0

我认为您可能可以创建将 blob 作为参数并返回有关信息的 PL/SQL 函数。

如果您可以将 XMLType 用于该字段,那么您绝对可以在 PL/SQL 中解析并编写您想要的函数。

http://www.filibeto.org/sun/lib/nonsun/oracle/11.1.0.6.0/B28359_01/appdev.111/b28369/xdb10pls.htm

当然,XML 会慢一些,但是如果你不能解析二进制数据,它是一个替代方案。

于 2009-06-29T20:22:46.050 回答
0

您可能还希望考虑 VARRAY 类型。您确实必须使用整个数组(不检索子集、部分更新等),但您可以定义最大长度,Oracle 将只存储您使用的内容。您可以声明几乎任何数据类型的 VARRAY,包括 BINARY_FLOAT 或 NUMBER。BINARY_FLOAT 将最小化您的存储,但会遇到一些小的精度问题(尽管在金融应用程序中很重要)。它采用 IEEE 754 格式。

由于您计划使用 PL/SQL 操作数据,因此我可能会退出 BLOB 设计。VARRAY 使用起来会更方便。BLOB 可以非常方便地存储原始 C 浮点数组,以便以后在另一个 C 程序中使用。

有关如何使用它们,请参阅PL/SQL 用户指南和参考。

于 2009-06-29T21:21:40.767 回答