Perl入門ゼミPerl入門ゼミテキスト処理、Linuxサーバー管理、Web開発ならPerlフォーラムへログインPerl›モジュール›データベース›DBIx::Custom›hereDBIx::Customの「insert」メソッドで行を「挿入」するテーブルに行を挿入するにはinsertメソッドを使用します。'book');第一引数には挿入したいデータをハッシュリファレンスで指定します。対象のテーブルをtableで指定します。次のようなSQLが発行されます。?);対応する値がプレースホルダに埋め込まれます。定数の挿入パラメータの中にプレースホルダではなくて定数を埋め込みたい場合は、スカラのリファレンスを指定することができます。'book');次のようなSQLが実行されます。now());insertメソッドのオプションinsertメソッドではexecuteメソッドのすべてのオプションを利用することができます。オプションについては「executeメソッド」のオプションの項目を参考にしてください。それに加えて以下のオプションを使用することができます。ctimeinsertを実行したときに、指定した列に現在時刻を設定するにはctimeオプションを使用します。HH:MM:SS」という形式です。now属性を設定すれば、これを変更することができます。idexecuteメソッドと同じようにidを指定することができます。primary_keyが設定されている必要があります。5]primary_keyで設定されている列名を利用して、挿入するデータが作成されます。'book');以下のinsert文と同じ意味になります。テーブル名」の間に好きな文字列を追加できます。replace'以下のようなSQLが作成されます。tabletableオプションでテーブル名を指定します。テーブル名は必須です。mtimeこのオプションはupdateメソッドのmtimeオプションと同じです。指定した行に現在時刻を設定することができます。この時刻はnow属性で変更することができます。'modified_time'insertする場合した場合というのは、それが最初の更新時刻でもあるので、ctimeで設定した列とmtimeに設定した両方の列に同じ現在時刻が挿入されるようになっています。wrapinsertのvaluesの部分でデータベースの関数を利用した場合はwrapオプションを利用すると解決することができます。プレースホルダの部分を指定したコードリファレンスで変換してくれます。}}以下のようなinsert文を実行するとします。}});するとpriceのプレースホルダの部分がwrapで指定したコードリファレンスを使って置き換えられます。);「大量のインサート」を「高速化」する方法DBIx::Customは便利なDBIのラッパーですが、大量のinsertなどを連続して行う場合の性能に関しては、生のDBIに比べて性能がかなり劣化します。そのような場合は複数のデータを一度に挿入しましょう。DBIx::Customのinsertメソッドには、複数のデータを一度に渡すことができます。'book');大量のinsertを行うときのパフォーマンスの劣化は、DBIと比較して小さな劣化に収まります。idオプションが使用できないといことが、複数insertにおける制限です。フィルタ、タイプルール、バインドタイプのオプションのすべてがない場合には、insertはさらに高速化されます。タイプルールがすでに設定されている場合は、type_rule_offに1に設定することで、タイプルールを無効にすることができます。パラメーターの最初のハッシュの値によって、生成されるSQLが決定するということに注意してください。残りのパラメータには、最初のパラメータと同じ列が含まれている必要があるということに、注意してください。ベンチマークスクリプトとベンチマークの結果です。データベースにはSQLiteを使用しました。}});cmpthese($result);ベンチマークの結果は、生のDBIを利用するものよりも、若干パフォーマンスが落ちる程度で収まっています。通常のinsertを使う場合に比較して、10倍近い差があるので、大量のインサートを同時に行う場合に、利用するとよいと思います。--バルクインサートで高速化データベースがバルクインサートをサポートしている場合は、バルクインサートを行うことができます。現在のところMySQLとPostgreSQLで利用することができます。データベースの機能を使って、複数のデータを一度に挿入できるので、さらなる高速化が期待できます。1);MySQLでのbulk_insertでのベンチマーク以下はベンチマークスクリプトです。}});cmpthese($result);ベンチマークの結果で、bulk_insertを使うと、通常のinsertの通常の5倍くらいのパフォーマンスがでるようです。--もしバルクインサートでパフォーマンスがでないときは、データベースのinsertのためのメモリ領域に不足がないかを一度確認してください。このメモリ領域が足りない場合は、スワップイン・スワップアウトが発生して、とても遅くなります。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebスタートアップも。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。このサイトはGiblogで製作されています。