在Oracle中将浮点数存储为BLOB

时间:2009-06-29 20:10:44

标签: database oracle database-design blob

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

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

问题:

BLOB中的数据是否可以使Oracle只使用SQL或PL / SQL来处理数据本身?

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

注意:此邮件是Storing Waveforms in Oracle的子问题。

3 个答案:

答案 0 :(得分:1)

  • 确定最大,最小,平均等
  • 首先获取值的索引 超过500
  • 检索第400个号码

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

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

答案 1 :(得分:0)

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

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

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

当然,XML会慢一点,但是如果你不能解析二进制数据,它就是另一种选择。

答案 2 :(得分:0)

您可能还希望考虑VARRAY类型。您必须使用整个阵列(没有子集的撤销,部分更新等),但您可以定义最大长度,Oracle将仅存储您使用的内容。您可以声明大多数数据类型的VARRAY,包括BINARY_FLOAT或NUMBER。 BINARY_FLOAT将最小化您的存储空间,但会遇到一些小的精度问题(尽管在财务应用程序中很重要)。它采用IEEE 754格式。

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

请参阅PL/SQL Users Guide and Reference了解如何使用它们。