2009-06-29 9 views
0

私は新しい実験室データベースを設計しています。いくつかのテストでは、〜10,000データポイントを同時に取得したいくつかの波形があります。アプリケーション(C言語で記述)では、波形は浮動小数点数の配列として格納されます。フロートの配列をOracleのBLOBとして保存

私は各波形をBLOBとして保存したいと考えています。

質問:

はBLOB内のデータは、Oracleが唯一のSQLやPL/SQLを使用して、データ自体で作業できるように構成することができますか?

  • 値は、最初の500
  • 最初BLOB

NOTEの誘導体であるBLOBを作成数

  • 400番目を取得超える場合、最大、最小、平均、など
  • インデックスを取得決定:このメッセージはサブ質問Storing Waveforms in Oracleです。

  • 答えて

    0

    また、VARRAYタイプを検討することもできます。配列全体を操作する必要があります(サブセット、部分的な更新などはありません)が、最大長を定義でき、Oracleは使用するものだけを保存します。 BINARY_FLOATまたはNUMBERを含むほとんどすべてのデータ型のVARRAYを宣言できます。 BINARY_FLOATはストレージを最小限に抑えますが、(財務アプリケーションでは重要ですが)マイナーな精度の問題があります。 IEEE 754形式です。

    PL/SQLを使用してデータを操作する予定があるので、BLOBデザインから復帰する可能性があります。 VARRAYはより使いやすくなります。 BLOBは、別のCプログラムで後で使用するために、生のCフロートの配列を格納するのに非常に便利です。

    使用方法はPL/SQL Users Guide and Referenceを参照してください。

    +0

    ...ので、BLOBは幾分C. に割り当てられたメモリへのボイドのポインタのようなものです...とVARRAYは、データベースエントリからVARRAY全体を取得した後で、個々の要素にしかアクセスできないという点を除いて、Cの型付き配列によく似ています。 これらの記述は正しいですか? – Steven

    +0

    これは正しいです。 BLOBは単なるバイナリデータで、解釈が可能です。画像、浮動小数点数の配列、Word文書などがあります。それらを使用する場合は、独自の変換ルーチン(Java関数/プロシージャなど)を作成する準備をしてください。個人的に、私はVARRAYがあなたが描いている状況の方がより簡単だと思います。 – DCookie

    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はかなり遅くなりますが、あなたは、バイナリデータを解析できない場合、それは代替です。

    +0

    私はBlobまたはClobでXMLを使用します。 これは、構造のレベルに応じて、どのストレージタイプがXMLに最も適しているかを示します。 http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb01int.htm#ADXDB0120 –

    1
    • 平均MAX、MIN、など
    • 値が最初 が
    • 500は400番目の番号を取得超えた場合に、インデックスを取得を決定
    • リレーショナルデータモデルはこの種の分析のために設計された

    - 及びOracleのSQLは、データを正しくモデル化すれば、これを実行することができます。浮動小数点数の配列を数値の表に変換することに焦点を当てることをお勧めします。これは、SQLでこれらの種類の問合せを実行する速度よりも時間がかかり過ぎることがわかります。

    代わりに、SQLを実行するたびに実行時に効果的にこの変換を実行するSQLを作成することもできます。これはたぶん効率が非常に低いでしょう。

    関連する問題