2009-06-29 77 views
0

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

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

问题:

能在BLOB数据以这样的方式,甲骨文可以只使用SQL或PL/SQL数据本身的工作结构?

  • 确定最大值,最小值,平均值,等等
  • 检索索引时值首次超过500
  • 检索第400号
  • 创建BLOB是第一BLOB

注的衍生物:此消息是Storing Waveforms in Oracle的子问题。

回答

0

你也可以考虑VARRAY类型。您必须使用整个数组(不需要删除子集,部分更新等),但可以定义最大长度,Oracle将只存储您使用的内容。您可以声明绝大多数数据类型的VARRAY,包括BINARY_FLOAT或NUMBER。 BINARY_FLOAT将尽量减少你的存储空间,但会遇到一些小的精度问题(尽管在金融应用中很重要)。它采用IEEE 754格式。

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

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

+0

...所以一个BLOB有点像一个空隙的指针,以所分配的存储器中C. ...和VARRAY更像C中的一个类型数组,除非你只能从数据库条目中检索完整的VARRAY之后访问一个单独的元素。 这些陈述是否正确? – Steven 2009-07-01 17:53:06

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将是相当慢一点,但如果你不能解析的二进制数据,这是一个选择。

+0

我会使用Blob或Clob上的XML。 根据结构级别,这给出了哪种存储类型最适合XML的指南。 http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb01int.htm#ADXDB0120 – 2009-06-30 01:59:28

1
  • 确定最大值,最小值,平均值,等等
  • 当值第一 超过500
  • 检索第400号检索索引

的关系数据模型的目的是为这种分析 - 和如果您正确地为数据建模,Oracle的SQL不仅仅是能够做到这一点。我建议你专注于将浮点数组转换成数字表 - 我怀疑你会发现所花费的时间将超过通过在SQL中执行这些查询的速度来补偿。

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