Хранение массива с плавающей точкой как BLOB в Oracle - PullRequest
0 голосов
/ 30 июня 2009

Я создаю новую лабораторную базу данных. Для некоторых тестов у меня есть несколько сигналов с ~ 10000 точек данных, полученных одновременно. В приложении (написанном на C) сигналы хранятся в виде массива с плавающей точкой.

Полагаю, я бы хотел сохранить каждый сигнал в формате BLOB.

Вопросы:

Можно ли структурировать данные в BLOB таким образом, чтобы Oracle мог работать с самими данными, используя только SQL или PL / SQL?

  • Определите макс, мин, среднее и т. Д.
  • Получить индекс, когда значение впервые превышает 500
  • Получить 400-й номер
  • Создать BLOB, который является производным от первого BLOB

ПРИМЕЧАНИЕ: Это сообщение является подвопросом Хранение сигналов в Oracle .

Ответы [ 3 ]

1 голос
/ 30 июня 2009
  • Определите макс, мин, среднее и т. Д.
  • Получить индекс при первом значении превышает 500
  • Получить 400 номер

Реляционная модель данных была разработана для такого рода анализа - и Oracle более чем способен сделать это, если вы правильно моделируете свои данные. Я рекомендую вам сосредоточиться на преобразовании массива чисел с плавающей точкой в ​​таблицы чисел - я подозреваю, что вы обнаружите, что затраченное время будет более чем компенсировано скоростью выполнения таких запросов в SQL.

Альтернатива - попытаться написать SQL, который в любом случае будет эффективно выполнять это преобразование во время выполнения - каждый раз, когда запускается SQL; что, вероятно, будет гораздо менее эффективным.

0 голосов
/ 30 июня 2009

Вы также можете рассмотреть тип VARRAY. Вы должны работать со всем массивом (без восстановления подмножеств, частичных обновлений и т. Д.), Но вы можете определить максимальную длину, и Oracle будет хранить только то, что вы используете. Вы можете объявить VARRAY для большинства типов данных, включая BINARY_FLOAT или NUMBER. BINARY_FLOAT минимизирует ваше хранилище, но страдает некоторыми незначительными проблемами точности (хотя это важно в финансовых приложениях). Это в формате IEEE 754.

Поскольку вы планируете манипулировать данными с помощью PL / SQL, я могу отказаться от дизайна BLOB. VARRAYs будет более удобным в использовании. BLOB было бы очень удобно хранить массив необработанных поплавков Си для последующего использования в другой программе Си.

См. PL / SQL Руководство пользователя и справочник , чтобы узнать, как их использовать.

0 голосов
/ 30 июня 2009

Я думаю, что вы, вероятно, могли бы создать функции 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 будет немного медленнее, но если вы не можете разобрать двоичные данные, это альтернатива.

...