[hackers-jp: 92] Re: Fw: [HACKERS] Tablespaces

NAKAZAWA Takayuki t.nakazawa @ soft.fujitsu.com
2004年 2月 27日 (金) 16:24:13 JST


仲沢と申します。
PowerGres Plusに携わっているので、少し説明させて頂きます。

Tamotsu ODAKA wrote:

>実務では、DBへの大量データの一括挿入は日常の業務で多々必要に
>なります。なので、OracleのSQL LoaderやSQL ServerのBULK INSERT
>など、商用DBには必ずこの手のローダーがついています。
>  
>

規模とか業務の内容によるのでしょうが、DBの創成とか付け込みとかいう
バッチ的な作業が定常的に発生するケースが良くあります。
例えば、メインの業務がメインフレームや大型のサーバで実施するような
場合で、拡張業務や関連する業務を別サーバに起こすとします。このような
場合、メインのサーバにあるマスターDBから部分的に取り込むために、
UNLOADやLOADといった機能が必要になります。


>  
>
>>以下は*推測*ですが;
>>
>>件のスーパーローダは、クライアントから通常の経路でデータを投入するのではな
>>    
>>
>く、
>  
>
>>サーバ側に「裏口」を作ってデータを取り込み、直接DBファイルを作成しているん
>>じゃないかと思います。
>>    
>>
>
>実装もいろいろで、DBインスタンスを経由する(SQL Server)ものや、直接
>DBファイルにアクセスする(Oracle、DB2など) ものなど製品によります。
>(Oracleはインスタンス経由のモードもあったような気がします。)
>
>商用では、物理ファイル内を自分で領域管理しているので、
>1.新しい領域を確保
>2.取りあえずデータをぶち込む
>3.必要に応じて、一時インデックスの作成や制約のしょりをする
>4.現行のデータと統合
>5.排除されたデータの廃棄
>6.統計の更新
>などをバッチで行うので、失敗できないわけではありません。
>
>PowerGresPlusのローダーがどういうものだかは知りませんが。。。
>  
>
実装としては、概ねそのようになっています。
レコードを作り出すところは、Postgresの関数を使用していますが、
I/O関連やインデックスを作成する部分は専用にしています。
特に、レコード格納の延長でINDEXをメンテしていると相当な時間を要する
のでINDEX作成はローダー特有の方式を採用しています。
(INDEXキーでソートして一気に作成)
複数のインデックスがある場合、インデックス毎にパラレルにソートしたりするので
創成時間がINDEXの個数に左右されないという特徴も持っています。

DBの創成ということを考えると、エラーが起きたときにログを使用してロールバック
するということが本当に必要かと考えます。元々、DBを創成したいのだから
copyがエラーになっても再度挑戦すると思うのです。
例えば、キーが重複していたなら、キーの重複を外して(入力データを変更)
再実行すると思います。そのときに、ロールバックしておく必要があるかと。
再実行が出来れば良いと考えています。

逆にログを出してしまうと、性能に影響するし、開発中のPITRなんかにも
実用上の影響がでてくるのではないかと思います。

PowerGres Plusは、オープンソースのcopy機能も使えるし、ログを出力しない
拡張したcopy機能も使えるようになっています。



>尾高 保 ( odaka @ novasystems.co.jp )
>
>
>  
>

-- 
********************************************************************
仲沢  孝之    NAKAZAWA Takayuki
ミドルウェアプラットフォーム事業部  第二開発部  プロジェクト課長
410-0302 静岡県沼津市宮本140番地 富士通株式会社 沼津工場
Tel.055-924-6158(7551-4169) Fax.055-924-6197
********************************************************************





hackers-jp メーリングリストの案内