質問編集履歴

4 該当のソースコード 更新

riddle

riddle score 10

2017/02/11 23:36  投稿

大量データ 挿入 削除 の繰り返しについて
###前提・実現したいこと
大量データを扱う場合においての正常なDB動作を実現したいと考えております。
###発生している問題・エラーメッセージ
2万件のPDFデータを今回はOIDにしてDBに取り込みたく考えていますが、下記のルーチンで困ったことがおきています。
1.PDFをOID化してDBに取り込む
2.取り込み終了
//20170211 20:35 更新
3.drop table test  --コマンドよりテーブルを削除
//20170211 20:35 更新
4.create table test    --テーブルとカラム等を生成
運用前に色々テストしたく、取り込みが完了したら一度テーブルを削除して、作成しなおして、再度取り込み、を繰り返しております。
ここで、何度か実行しているうちに、PDF(2万件)とデータ挿入後のデータ数が一致しなくなってきました。
この事象が発生したあとに、tableを作成しなおし、カウントをとったところ、0件でしたが、再度2万件のデータを取り込むと、29000件程度の挿入結果となり、データ数が一致しませんでした。
###該当のソースコード
テーブル test
カラム id(int 自動連番)、name(text)、pdfobj(oid)
id・・・自動連番
name・・・ファイル名
pdfobj・・・取り込んだPDFのデータ
上記テーブル構造で
insert文でpdfをDBに格納し、
全てのデータが挿入しおわったら、drop table test で
testテーブルを削除しておりました。
//20170211 23:15 更新
```ここに言語を入力
/*事前に$dbhにてコネクトしております*/
$dir = "/tmp/";
if( is_dir( $dir ) && $handle = opendir( $dir ) ) {
/*指定フォルダの中にあるファイル毎にループしています*/
 while( ($file = readdir($handle)) !== false ) {
 /*ファイルであればif内に入ります*/
   if( filetype( $path = $dir . $file ) == "file" ) {
  /*指定フォルダの中にあるファイル毎にループしています*/
  while( ($file = readdir($handle)) !== false ) {
     //ファイル名の取得 → $filenameに格納
  //取得したファイルのoid化したもの → $oidに格納
        /*ファイルであればif内に入ります*/
        if( filetype( $path = $dir . $file ) == "file" ) {
     $dbh->beginTransaction();
     $dbh->exec("insert into test(name, pdfobj) values ('$filename', '$oid')");
            //ファイル名の取得 → $filenameに格納
            //取得したファイルのoid化したもの → $oidに格納
  if($dbh){//成功
       $dbh->commit();
     }else{//失敗
       $dbh->rollBack();
     }
            $dbh->beginTransaction();
            $dbh->exec("insert into test(name, pdfobj) values ('$filename', '$oid')");
            if($dbh){//成功
               $dbh->commit();
            }else{//失敗
               $dbh->rollBack();
            }
         }
   }
 
 }  
}
```
###補足1
drop table では完全にデータが削除されずゴミが裏で残っていたりするのでしょうか?
普通はdelete文でレコードを削除するものなのでしょうか。
大量データとOIDを今まで扱ったことがなく、どうしてこのような現象が起きているのか検討がつきません。
//20170211 20:35 更新
oidはpg_lo系の関数で作成しDBに格納してあります。
###補足2
言語:php 5.4
DB:postgres 9.4
もしかしたら質問として、初歩的なことを伺ってることになるかもしれませんが、どうぞ宜しくお願い致します。
  • PostgreSQL

    1770 questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • データベース

    1385 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

3 該当のソースコード 更新

riddle

riddle score 10

2017/02/11 23:33  投稿

大量データ 挿入 削除 の繰り返しについて
###前提・実現したいこと
大量データを扱う場合においての正常なDB動作を実現したいと考えております。
###発生している問題・エラーメッセージ
2万件のPDFデータを今回はOIDにしてDBに取り込みたく考えていますが、下記のルーチンで困ったことがおきています。
1.PDFをOID化してDBに取り込む
2.取り込み終了
//20170211 20:35 更新
3.drop table test  --コマンドよりテーブルを削除
//20170211 20:35 更新
4.create table test    --テーブルとカラム等を生成
運用前に色々テストしたく、取り込みが完了したら一度テーブルを削除して、作成しなおして、再度取り込み、を繰り返しております。
ここで、何度か実行しているうちに、PDF(2万件)とデータ挿入後のデータ数が一致しなくなってきました。
この事象が発生したあとに、tableを作成しなおし、カウントをとったところ、0件でしたが、再度2万件のデータを取り込むと、29000件程度の挿入結果となり、データ数が一致しませんでした。
###該当のソースコード
テーブル test
カラム id(int 自動連番)、name(text)、pdfobj(oid)
id・・・自動連番
name・・・ファイル名
pdfobj・・・取り込んだPDFのデータ
上記テーブル構造で
insert文でpdfをDBに格納し、
全てのデータが挿入しおわったら、drop table test で
testテーブルを削除しておりました。
//20170211 23:15 更新
```ここに言語を入力  
/*事前に$dbhにてコネクトしております*/
$dir = "/tmp/";
if( is_dir( $dir ) && $handle = opendir( $dir ) ) {
/*指定フォルダの中にあるファイル毎にループしています*/
 while( ($file = readdir($handle)) !== false ) {
 /*ファイルであればif内に入ります*/
   if( filetype( $path = $dir . $file ) == "file" ) {
     //ファイル名の取得 → $filenameに格納
  //取得したファイルのoid化したもの → $oidに格納
     $dbh->beginTransaction();
     $dbh->exec("insert into test(name, pdfobj) values ('$filename', '$oid')");
  if($dbh){//成功
       $dbh->commit();
     }else{//失敗
       $dbh->rollBack();
     }
   }
 }
}
```  
 
###補足1
drop table では完全にデータが削除されずゴミが裏で残っていたりするのでしょうか?
普通はdelete文でレコードを削除するものなのでしょうか。
大量データとOIDを今まで扱ったことがなく、どうしてこのような現象が起きているのか検討がつきません。
//20170211 20:35 更新
oidはpg_lo系の関数で作成しDBに格納してあります。
###補足2
言語:php 5.4
DB:postgres 9.4
もしかしたら質問として、初歩的なことを伺ってることになるかもしれませんが、どうぞ宜しくお願い致します。
  • PostgreSQL

    1770 questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • データベース

    1385 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

2 該当のソースコード 更新

riddle

riddle score 10

2017/02/11 23:31  投稿

大量データ 挿入 削除 の繰り返しについて
###前提・実現したいこと
大量データを扱う場合においての正常なDB動作を実現したいと考えております。
###発生している問題・エラーメッセージ
2万件のPDFデータを今回はOIDにしてDBに取り込みたく考えていますが、下記のルーチンで困ったことがおきています。
1.PDFをOID化してDBに取り込む
2.取り込み終了
//20170211 20:35 更新
3.drop table test  --コマンドよりテーブルを削除
//20170211 20:35 更新
4.create table test    --テーブルとカラム等を生成
運用前に色々テストしたく、取り込みが完了したら一度テーブルを削除して、作成しなおして、再度取り込み、を繰り返しております。
ここで、何度か実行しているうちに、PDF(2万件)とデータ挿入後のデータ数が一致しなくなってきました。
この事象が発生したあとに、tableを作成しなおし、カウントをとったところ、0件でしたが、再度2万件のデータを取り込むと、29000件程度の挿入結果となり、データ数が一致しませんでした。
###該当のソースコード
テーブル test
カラム id(int 自動連番)、name(text)、pdfobj(oid)
id・・・自動連番
name・・・ファイル名
pdfobj・・・取り込んだPDFのデータ
上記テーブル構造で
insert文でpdfをDBに格納し、
全てのデータが挿入しおわったら、drop table test で
testテーブルを削除しておりました。
 
//20170211 23:15 更新  
/*事前に$dbhにてコネクトしております*/  
$dir = "/tmp/";  
if( is_dir( $dir ) && $handle = opendir( $dir ) ) {  
 
 /*指定フォルダの中にあるファイル毎にループしています*/  
 while( ($file = readdir($handle)) !== false ) {  
  /*ファイルであればif内に入ります*/  
   if( filetype( $path = $dir . $file ) == "file" ) {  
 
     //ファイル名の取得 → $filenameに格納  
   //取得したファイルのoid化したもの → $oidに格納  
 
     $dbh->beginTransaction();  
     $dbh->exec("insert into test(name, pdfobj) values ('$filename', '$oid')");  
 
   if($dbh){//成功  
       $dbh->commit();  
     }else{//失敗  
       $dbh->rollBack();  
     }  
 
   }  
 
 }  
 
}  
 
###補足1
drop table では完全にデータが削除されずゴミが裏で残っていたりするのでしょうか?
普通はdelete文でレコードを削除するものなのでしょうか。
大量データとOIDを今まで扱ったことがなく、どうしてこのような現象が起きているのか検討がつきません。
//20170211 20:35 更新
oidはpg_lo系の関数で作成しDBに格納してあります。
###補足2
言語:php 5.4
DB:postgres 9.4
もしかしたら質問として、初歩的なことを伺ってることになるかもしれませんが、どうぞ宜しくお願い致します。
  • PostgreSQL

    1770 questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • データベース

    1385 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1 発生している問題・エラーメッセージの更新、補足1更新

riddle

riddle score 10

2017/02/11 20:36  投稿

大量データ 挿入 削除 の繰り返しについて
###前提・実現したいこと
大量データを扱う場合においての正常なDB動作を実現したいと考えております。
###発生している問題・エラーメッセージ
2万件のPDFデータを今回はOIDにしてDBに取り込みたく考えていますが、下記のルーチンで困ったことがおきています。
1.PDFをOID化してDBに取り込む
2.取り込み終了
3.dropdb table名 コマンドよりテーブルを削除
4.alter tableでテーブルとカラム等を生成
//20170211 20:35 更新
3.drop table test  --コマンドよりテーブルを削除
//20170211 20:35 更新
4.create table test    --テーブルとカラム等を生成
運用前に色々テストしたく、取り込みが完了したら一度テーブルを削除して、作成しなおして、再度取り込み、を繰り返しております。
ここで、何度か実行しているうちに、PDF(2万件)とデータ挿入後のデータ数が一致しなくなってきました。
この事象が発生したあとに、tableを作成しなおし、カウントをとったところ、0件でしたが、再度2万件のデータを取り込むと、29000件程度の挿入結果となり、データ数が一致しませんでした。
###該当のソースコード
テーブル test
カラム id(int 自動連番)、name(text)、pdfobj(oid)
id・・・自動連番
name・・・ファイル名
pdfobj・・・取り込んだPDFのデータ
上記テーブル構造で
insert文でpdfをDBに格納し、
全てのデータが挿入しおわったら、drop table test で
testテーブルを削除しておりました。
###補足1
drop table では完全にデータが削除されずゴミが裏で残っていたりするのでしょうか?
普通はdelete文でレコードを削除するものなのでしょうか。
大量データとOIDを今まで扱ったことがなく、どうしてこのような現象が起きているのか検討がつきません。
//20170211 20:35 更新  
oidはpg_lo系の関数で作成しDBに格納してあります。  
###補足2
言語:php 5.4
DB:postgres 9.4
もしかしたら質問として、初歩的なことを伺ってることになるかもしれませんが、どうぞ宜しくお願い致します。
  • PostgreSQL

    1770 questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • データベース

    1385 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る