ホームページ  >  記事  >  データベース  >  PHP で大きな MySQL ファイルをインポートする方法: 分割クエリ アプローチによるメモリ効率の高いソリューション?

PHP で大きな MySQL ファイルをインポートする方法: 分割クエリ アプローチによるメモリ効率の高いソリューション?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 04:50:30654ブラウズ

How to Import Large MySQL Files in PHP: A Memory-Efficient Solution with Split-Query Approach?

PHP での大きな MySQL ファイルのインポート: 包括的な分割クエリ ソリューション

大きな MySQL ファイルを共有ホスティング プロバイダー Web サイトにインポートすると、次のことが可能になります。特に PHP を使用しており、MySQL への外部アクセスが制限されている場合は、困難になります。この記事では、ファイルを確実に個別のクエリに分割してインポートすることで、この問題に対処する包括的なソリューションを提供します。

考慮すべき課題

大きな MySQL ファイルを解析してクエリする場合PHP では、次のようないくつかの課題が発生します。

  • データ内のフィールド区切り文字の検出
  • メモ フィールドの改行の処理
  • ファイル サイズが大きいことによるメモリの問題の回避

信頼性の高い分割クエリ ソリューション

これらの課題を克服するために、この記事では SplitSQL() と呼ばれるメモリに優しい関数を紹介します。この関数はファイルを 1 行ずつ読み取り、クエリ区切り文字 (セミコロンなど) が見つかるまで個々のクエリを蓄積します。コードは次のとおりです。

function SplitSQL($file, $delimiter = ';') {
  set_time_limit(0);
  if (is_file($file) && is_resource($file = fopen($file, 'r'))) {
    $query = array();
    while (!feof($file)) {
      $query[] = fgets($file);
      if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query))) {
        $query = trim(implode('', $query));
        if (mysql_query($query) === false) {
          echo 'ERROR: ' . $query . "\n";
        } else {
          echo 'SUCCESS: ' . $query . "\n";
          flush();
        }
        $query = array();
      }
    }
    fclose($file);
    return true;
  }
  return false;
}

メモリに優しく、テスト済み

この関数は、必要な場合にのみメモリを割り当て、メモリの問題を回避します。大規模な phpMyAdmin SQL ダンプでテストされ、実世界のデータを効果的に処理できることが実証されています。

テスト データと出力

サンプル データとその出力は次のとおりです。 SplitSQL() 関数:

テスト データ:

CREATE TABLE IF NOT EXISTS "test" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT,
  "name" TEXT,
  "description" TEXT
);

BEGIN;
INSERT INTO "test" ("name", "description")
VALUES (";;;", "something for you mind; body; soul");
COMMIT;

UPDATE "test"
SET "name" = "; "
WHERE "id" = 1;

出力:

SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );
SUCCESS: BEGIN;
SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");
SUCCESS: COMMIT;
SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;

結論

SplitSQL() 関数は、大規模な MySQL ファイルを個々のクエリに分割するための堅牢で信頼性の高いソリューションを提供し、共有ホスティング環境で効率的かつ自動化されたデータベース インポートを可能にします。この関数は、メモリの制約に対処し、さまざまなデータ型を考慮することで、PHP で大きな MySQL ファイルをインポートする複雑なプロセスを簡素化します。

以上がPHP で大きな MySQL ファイルをインポートする方法: 分割クエリ アプローチによるメモリ効率の高いソリューション?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。