4D v16.3

データをデータファイル外に保存

ホーム

 
4D v16.3
データをデータファイル外に保存

データをデータファイル外に保存  


 

 

BLOB、ピクチャー、テキストフィールドごとにデータの保存先を指定することができます。既存の保存オプション(レコード内、またはレコード外)に加え、データファイル外への保存を選択できます。この場合データはディスク上の外部ファイルとして保存されます。外部ファイルはサードパーティアプリケーションで変更することができますが、この場合データ整合性は開発者が管理しなければなりません。

この動作はユーザーに対し透過的です。データの場所に関わらず、データへのアクセスは同じです。

ファイルの外に保存できることで、アプリケーションの動作を最適化することができます。例えば大量のデータを外部に保存できればその分データファイルのサイズを減らすことができます。またデータベースが開かれていないときでも OS からそれらのファイルにアクセスすることができます。

データファイル外部への保存は 2 つのモードで実行できます :

  • 自動モード : このモードでは、4D は特定の構造のフォルダーを自動で作成・管理し、すべてのデータをそこに格納します。この場合データは透過的に管理され、フィールドデータがデータファイル内部に格納された
    場合と同様に動作します。
    この自動モードを有効にするには以下のいずれかの方法を取ります :
    • ストラクチャーエディターで外部への格納を設定する (設定はデータベースストラクチャーに保存されます)。このオプションについてはで説明しています。
    • SET EXTERNAL DATA PATHコマンドのpath引数に定数を渡す(設定は4D を終了するまで有効)。
  • カスタムモード: このモードでは各フィールドおよび各レコードごと、外部ファイルの保存場所を自由に選択できます。この場合 4D はフィールドとデータの間のリレーションのみを管理し、読み込みのみモードでアクセスします。データベースメカニズムの一部は動作しなくなります。
    カスタムモードはSET EXTERNAL DATA PATHコマンドを使用して、path引数にデフォルト以外のフォルダーを指定することで有効にされます。

以下の表では自動およびカスタムモードの機能を比較します:

自動モードカスタムモード
格納先フォルダーの設定名前と場所は 4D が設定します。データベース全体で 1 つのデフォルトフォルダーを使用します。名前と場所を自由に設定可能。各フィールドごとに変えることもできます。
外部ファイルのロード自動自動
外部ファイルの作成、、更新自動手動
レコードが削除された際の外部ファイルの削除はいいいえ
フィールドに NULL 値が割り当てられたときの外部ファイルの削除Yesいいえ
データベースが保存された際の自動統合はいはい(外部パス)
ログファイル統合の際の自動サポートはいはい(外部パス)
標準インデックスのサポート (テキストフィールド)いいえいいえ
キーワードインデックスのサポート (テキストとピクチャー)はいいいえ
トランザクションのサポートはいいいえ

データファイルの外に保存されたデータは以下の原則に基づき整理されます:

  • 各レコードごと、データは xxx.txt (テキスト)、xxx.blob (BLOBまたはオブジェクト)、xxx.jpgや xxx.tiff (ピクチャー、拡張子はピクチャータイプに基づく)という名前で保存されます。xxx は4D が管理するUUID です。
  • 自動モードでは、すべての外部データが <DatabaseName>.ExternalDataという名前のフォルダーに配置されます (DatabaseName はデータベースストラクチャーの名前です )。このフォルダーはデータファイル (.4DD) と同階層に作成されます。
    4D はこのフォルダー内に、外部にデータを格納するフィールドを持つテーブルごとにフォルダーを作成し ( 名前は "Table"+ テーブル番号 )、さらに各外部フィールドごとにサブフォルダーを作成します (名前は"Field"+ フィールド番号)。フィールド中の最初の 100 項目はフォルダーの第一レベルに格納されます。それ以降は "2" から始まるサブフォルダーが順次作成され、その中に 100 要素までが格納されます。例えば"Accounting" データベースのテーブル番号 3 のフィールド番号 5 のデータがデータファイルの外に格納される場合、以下の構成でフォルダーやファイルが 4D により作成されます:
    Accounting.4DD
    [Accounting.ExternalData]
        Table3
            Field 5
                Data_1B7F3A 56F6544B45951EFA60426D5ABC.txt
                Data_1B7F3A 56F6544B45951EFA60426D5CCC.txt
                ...
                2
                    Data_2ADBFBA478AAE4409DA9C2D13C90A53B.txt
                    Data_32F8A30B87EE7E4BBC802468D553DC43.txt
                    ...
  • カスタムモードではSET EXTERNAL DATA PATHコマンドを使用して、各フィールドごと個別にフォルダーの名前と場所を自由に設定できます。この設定はデータベースストラクチャーには保存されません。

自動モードでは、フィールドの外部ファイルへの記録はレコードがディスクに保存される際に行われます (必要であればトランザクションが有効にされた後):

  • 外部ファイルが存在しない場合、自動モードでは作成されます。カスタムモードでは、エラーが返されます。
  • 外部ファイルが既に存在する場合、4D はそれを新しいファイルで置き換えます。
    既 存のファイルを保持したい場合、(SET EXTERNAL DATA PATHコマンドを使用して ) 異なるパスを指定するか、レコード保存前に既存の外部ファイルからその内容をメモリにロードするためにRELOAD EXTERNAL DATAコマンドを使用します。この方法はレコードがロードされた後、外部ファイルが他のアプリケーションによって変更された場合にも有効 です。

カスタムモード(パスはSET EXTERNAL DATA PATH コマンドで定義)では、レコードがディスクへと保存された際に、4Dはファイルのパス名のみを保存します。ファイルの管理(作成と編集)はデベロッパ自身の手によって行われる必要があります。

データの格納場所は各データベースごとのローカルパラメーターです。データの同期や複製を行う場合、 これらのパラメーターはローカルデータベースとリモートのそれとでは異なるかもしれません。 この場合データの格納は各データベースのパラメーターに従います。 同期や複製は設定を変更しません。

例えばリモートデータベースにおいてピクチャーフィールドが外部ファイルとして保存され、同じフィールドがローカルデータベースではデータファイル内に保存されている場合、複製が行われると、ローカルデータベースのこのフィールドに追加されたすべての (データファイル内の) データは、リモートデータベースのデータファイル外に保存されます。

外部に格納されたファイルは 4D 以外のアプリケーション (OS、テキストやグラフィックエディター等 ) から読み書きモードでアクセスできます。しかしこれはアプリケーションの動作を変更してしまうかもしれないので、注意して行わなければなりません:

  • 外部ファイルが OS やその他のアプリケーションによって削除、名称変更、あるいは移動されると、4D は対応するフィールドが NULL 値を持つものとして扱い、自動モードにおいてはレコードが保存されるときに(値がNULL でなければ)新しいファイルが作成されます。カスタムモードにおいては、SET EXTERNAL DATA PATH コマンドが実行されたときにエラーが返されます。
  • インデックスを使用している場合、サードパーティアプリケーションが外部ファイルを変更しても、親レコードがディスクに保存されるまでは、インデックスが更新されません。

注: 外部テキストファイルは BOM なしの UTF-8 で保存されます。サードパーティアプリケーションでそのファイルを開き、BOM 付きで保存された場合、そのファイルを 4D で開くことはできますが、保存の際に BOMは失われます。

"読み込みのみ" モードでレコードをロードしても、このレコードの対象フィールドの外部ファイルはロックされません。ディスクファイルはその内容が 4D のメモリに読み込まれていますが、4D やその他のアプリケーションを使用して編集が可能です。

 
プロパティ 

プロダクト: 4D
テーマ: データベースストラクチャーの作成

 
履歴 

初出: 4D v13

 
ARTICLE USAGE

デザインリファレンス ( 4D v16)
デザインリファレンス ( 4D v16.1)
デザインリファレンス ( 4D v16.3)