多数レコード挿入(PHP)
最終更新日:2023年02月27日
データベースへの多数レコードの挿入は、database/bulk_insert を使って最大1000行を一括して挿入してください。
通常のinsertを繰り返すと、API呼び出しオーバーヘッドが大きく時間がかかることと、APIアクセス頻度(オプション利用時の標準では600回/分)に制限され、多数のレコードの挿入ができません。
1000行以上のレコードを挿入する場合は、以下のサンプルプログラムのように、1000行単位のbulk_insertを繰り返してください。
<?php
define("APIURL", "https://xxx.smp.ne.jp/api/service");
define("TOKEN", "0000000・・・・00000000");
define("SECRET", " 0000000・・・・00000000 ");
// 送信パラメータを設定します
$parameters = array();
$parameters["db_title"] = "testdata";
$parameters["columns"] = array(
"name", "furigana", "email", "gender", "ageyo", "birthday", "maritalstat",
"prefecture", "telephone", "carrier", "style"
);
// ファイルからデータを読み取り、bulk_insert APIメソッドを呼び出します
$line = file("records10000.txt");
$n = 0;
$parameters["data"] = array();
for ($i = 0; $i < count($line); $i++) {
$data = explode("\t", $line[$i]);
if (count($data) == count($parameters["columns"])) {
array_push($parameters["data"], $data);
if (count($parameters["data"]) >= 1000) {
bulk_insert($parameters);
$parameters["data"] = array();
}
}
}
if (count($parameters["data"]) > 0) {
bulk_insert($parameters);
}
exit(0);
// database/bulk_insert API 呼び出し用の関数
function bulk_insert($param_parameters)
{
$api_headers = array(
"X-SPIRAL-API: database/bulk_insert/request",
"Content-Type: application/json; charset=UTF-8",
);
$param_parameters["spiral_api_token"] = TOKEN;
$param_parameters["passkey"] = time();
$key = $param_parameters["spiral_api_token"] . "&" . $param_parameters["passkey"];
$param_parameters["signature"] = hash_hmac('sha1', $key, SECRET, false);
$json = json_encode($param_parameters);
$curl = curl_init(APIURL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
curl_exec($curl);
if (curl_errno($curl)) echo curl_error($curl);
$returnval = curl_multi_getcontent($curl);
curl_close($curl);
return $returnval;
}
?>