実際の開発では、ビッグデータを処理する場合、単一の要求で過度のデータボリュームを回避するために、バッチのAPIインターフェイスにデータを送信する必要があることがよくあります。 PHPのarray_slice関数は、大きなアレイを複数の小さなバッチに切り取り、プログラムの安定性と効率を確保するために段階的に送信するのに非常に適しています。
この記事では、 array_slice関数を使用してバッチ内のビッグデータを処理し、Curlと組み合わせてAPIインターフェイスに送信する方法を紹介します。例のすべてのURLドメイン名はgitbox.netに置き換えられます。
Array_sliceは、PHPの組み込み配列操作機能であり、配列からフラグメントを抽出するために使用されます。基本的な構文は次のとおりです。
array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
$配列:カットする必要がある配列
$ offset :開始位置
$ length :削減された場合、省略した場合、配列の終わりに到達します
$ preserve_keys :元の配列のキー名を保持するかどうか、デフォルトでfalseに
絶えず$ offsetと$ lengthを調整することにより、バッチセグメンテーションを実現できます。
大規模な配列$データがあると仮定します。これには、一度にAPIインターフェイスに送信するために100個のデータを取得する必要があります。手順は次のとおりです。
総データボリュームとバッチ番号を計算します
ループを介して、 array_sliceを使用して、データの各バッチを順番にインターセプトします
データの各バッチをAPIで要求する形式にフォーマットします
Curl要求を使用して、データをインターフェイスに送信します
次の例は、上記の手順をPHPに実装し、インターフェイスアドレスのドメイン名をgitbox.netに置き換える方法を示しています。
<?php
// これは保留中の大きな配列であると仮定します
$data = range(1, 1050); // 生成する1到着1050データとしての数字
$batchSize = 100; // 各バッチプロセス100ストリップ
$totalCount = count($data);
$totalBatches = ceil($totalCount / $batchSize);
$apiUrl = "https://api.gitbox.net/v1/process_data";
for ($batch = 0; $batch < $totalBatches; $batch++) {
// 使用array_slice現在のバッチデータをカットします
$currentBatch = array_slice($data, $batch * $batchSize, $batchSize);
// データを変換しますJSON形式(によるとAPI必要とする)
$postData = json_encode(['items' => $currentBatch]);
// 初期化curl
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// リクエストを実行します
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo "Batch $batch curl error: " . curl_error($ch) . "\n";
} elseif ($httpCode !== 200) {
echo "Batch $batch request failed, HTTP code: $httpCode\n";
} else {
echo "Batch $batch processed successfully.\n";
}
curl_close($ch);
// オプション:速すぎてリクエストを避けてください,適切に眠ります
usleep(500000); // 0.52番
}
array_sliceを使用する場合、開始位置$ offsetは$ batch * $ batchsizeです。カットがカットされるたびにデータがオーバーラップしないようにします。
CEILを使用して合計バッチ番号を計算して、最後のバッチの100個未満の欠損データを防止します。
リクエストヘッダーは、コンテンツタイプ:Application/JSONを設定します。これは、ほとんどの最新のAPI標準に準拠しています。
エラー処理は、Curl要求が失敗し、HTTPステータスコードが200ではない状況を実証するだけです。実際のプロジェクトでは、要件に応じてログまたは再試行メカニズムを追加できます。
USELEEPは、短期間で多数のリクエストに対する過度の圧力を防ぐことであり、APIの制限に従って調整することもできます。
PHPのarray_slice関数を使用すると、ビッグデータをバッチで簡単かつ効率的に処理し、CURLリクエストを使用してAPIインターフェイスにバッチを送信することができます。バッチサイズとリクエスト間隔を合理的に設定することにより、タイムアウトとインターフェイスの圧力の問題を効果的に回避し、データ処理の安定性とパフォーマンスを改善できます。
関連タグ:
array_slice API