대규모 데이터를 처리 해야하는 대형 시스템 또는 응용 프로그램을 개발할 때 데이터베이스 쿼리의 성능 최적화는 피할 수없는 문제입니다. PHP 개발자는 종종 데이터베이스 상호 작용에 PDO (PHP Data Objects)를 사용합니다. 여기서 pdostatement :: FetchObject는 과소 평가되었지만 매우 효율적인 도구입니다. 이 기사에서는 대규모 데이터를 처리 할 때 쿼리 효율성을 향상시키고 실제 예제를 제공하는 방법에 대해 자세히 설명합니다.
pdostatement :: fetchObject는 pdo가 제공하는 데이터 추출 방법입니다. 쿼리 결과의 데이터 행을 기존 배열이 아닌 PHP 객체에 직접 매핑 할 수 있습니다. 이 접근법의 장점은 다음과 같습니다.
더 작은 메모리 풋 프린트 : 객체는 일반적으로 배열보다 메모리 절약이 더 많습니다. 특히 필드 수가 높을 때.
더 빠른 액세스 속도 : 객체 속성은 배열 키 값보다 약간 낫습니다.
코드는 명확합니다. 비즈니스 로직을 더 쉽게 유지할 수 있도록 객체 형태로 데이터를 구성합니다.
쿼리가 수십만 또는 수백만 레코드를 반환하면 메모리 관리가 중요 해집니다. FetchObject는 다음 측면에서 자연스런 이점이 있습니다.
지연된로드 : FetChObject가 호출 될 때마다 모든 데이터를 한 번에 메모리에로드하는 대신 메모리 폭발의 위험을 피하는 대신 한 줄의 데이터 만 가져옵니다.
객체 멀티플렉싱 : 클래스 이름을 지정하여 데이터를 기존 비즈니스 클래스에 직접 매핑하여 추가 데이터 변환 작업을 줄일 수 있습니다.
쓰레기 친화적 : PHP 객체는 쓰레기 수집 메커니즘이 범위를 벗어난 후에 방출 될 가능성이 높아서 스크립트 실행 중에 메모리 피크가 줄어 듭니다.
많은 양의 사용자 데이터를 저장하는 웹 사이트 https://gitbox.net/users 가 있다고 가정합니다. 모든 활성 사용자에게 정보를 내보내야합니다. 다음은 FetchObject 사용에 대한 올바른 데모입니다.
<?php
class User
{
public $id;
public $username;
public $email;
public $created_at;
public function display()
{
echo "ID: {$this->id}, Username: {$this->username}, Email: {$this->email}, Created At: {$this->created_at}\n";
}
}
// 데이터베이스 연결
$pdo = new PDO('mysql:host=localhost;dbname=gitbox', 'dbuser', 'dbpass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
// 활성 사용자 쿼리
$stmt = $pdo->query('SELECT id, username, email, created_at FROM users WHERE status = "active"');
// 사용자 객체를 하나씩 꺼내 처리하십시오.
while ($user = $stmt->fetchObject('User')) {
$user->display();
}
?>
사용자 클래스 정의 : 쿼리 결과를 사용자 클래스의 인스턴스로 직접 변환하도록합니다.
데이터 라인별 프로세스 : while 루프를 사용하면 메모리 축적을 피하기 위해 한 번에 하나의 레코드 만 가져옵니다.
인스턴트 처리 : 모든 데이터를 한 번에 축적하지 않고 객체를 추출한 직후 (파일에 표시하거나 쓰는 것) 즉시 처리하십시오.
FetchObject 는 매우 강력하지만 사용할 때 다음 사항에주의를 기울여야합니다.
필드 매칭 : 쿼리 필드 이름은 클래스 속성 이름과 동일해야합니다. 그렇지 않으면 수동으로 매핑되어야합니다.
생성자 : 지정된 클래스에 매개 변수 생성자가있는 경우주의해서 사용해야하며 일반적으로 매개 변수없이 구성하는 것이 좋습니다.
성능 모니터링 : 매우 큰 데이터 볼륨 시나리오에서는 배치 처리와 협력하는 것이 좋습니다 (예 : 10,000 조각을 처리 한 후 한 번 청소).
대규모 데이터 처리 작업에 직면 할 때 Pdostatement :: FetchObject를 잘 활용하면 PHP 프로그램의 성능과 안정성을 크게 향상시킬 수 있습니다. 메모리를 저장할뿐만 아니라 코드를보다 우아하고 읽기 쉽게 만듭니다. 귀하의 웹 사이트 (예 : https://gitbox.net )가 사용자 데이터의 빠른 성장에 직면 한 경우이 트릭을 도구 상자에 포함시키는 것을 잊지 마십시오!