我正在设计一个新的实验室数据库。对于某些测试,我有几个波形,同时获得约10,000个数据点。在应用程序(用C编写)中,波形存储为浮点数组。
我相信我想将每个波形存储为BLOB。
问题:
BLOB中的数据是否可以使Oracle只使用SQL或PL / SQL来处理数据本身?
注意:此邮件是Storing Waveforms in Oracle的子问题。
答案 0 :(得分:1)
关系数据模型是为这种分析而设计的 - 如果您正确地建模数据,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了解如何使用它们。