> 백엔드 개발 > PHP 튜토리얼 > 데이터베이스 읽기 및 쓰기 분리 솔루션: PHP 프로그래밍에 적용

데이터베이스 읽기 및 쓰기 분리 솔루션: PHP 프로그래밍에 적용

PHPz
풀어 주다: 2023-06-23 11:18:01
원래의
1357명이 탐색했습니다.

데이터베이스 읽기-쓰기 분리 솔루션: PHP 프로그래밍에서의 응용

웹 응용 프로그램 개발 과정에서 데이터베이스는 응용 프로그램의 다양한 데이터와 정보를 저장하는 데 사용되므로 안정성과 신뢰성이 중요합니다. 트래픽이 많은 대규모 웹 애플리케이션은 데이터베이스 성능 및 안정성 문제에 직면해 있습니다. 이를 위해 이러한 문제를 해결하기 위해 데이터베이스 읽기-쓰기 분리 체계가 도입되었습니다. 이 기사에서는 PHP 프로그래밍에서 데이터베이스 읽기-쓰기 분리 체계를 사용하여 애플리케이션 성능과 안정성을 향상시키는 방법을 살펴보겠습니다.

  1. 데이터베이스 읽기-쓰기 분리 솔루션의 기본 원리

데이터베이스 읽기-쓰기 분리는 데이터베이스 서버를 두 부분으로 나누는 것을 의미합니다. 한 부분은 읽기 요청을 처리하는 부분이고 다른 부분은 쓰기 요청을 처리하는 부분입니다. . 이는 데이터베이스의 액세스 효율성과 성능을 향상시키고 데이터베이스 서버에 대한 부담을 줄이는 것이 목적입니다.

구체적인 구현 과정에서 읽기-쓰기 분리는 일반적으로 마스터-슬레이브 백업과 듀얼 마스터 복제의 두 가지 방법으로 나뉩니다. 그 중 마스터-슬레이브 백업 방식은 읽기 요청을 여러 슬레이브 서버에 분산시키는 반면, 쓰기 요청은 마스터 서버의 작업만 처리합니다. 듀얼 마스터 복제 솔루션은 읽기 및 쓰기 요청을 여러 서버에 균등하게 분배하며 서버 간의 데이터 동기화를 보장해야 합니다.

  1. PHP의 데이터베이스 읽기-쓰기 분리 솔루션

PHP 프로그래밍에서 MySQL 데이터베이스는 일반적으로 애플리케이션 데이터를 저장하고 관리하는 데 사용됩니다. 다음은 PHP에서 두 가지 일반적인 데이터베이스 읽기-쓰기 분리 체계의 적용을 소개합니다.

2.1 마스터-슬레이브 복제 체계

마스터-슬레이브 복제 체계를 사용할 때 프로그램은 읽는 동안 쓰기 SQL 문을 주 서버로 보냅니다. SQL 문은 서버에서 전송됩니다. 읽기 서버와 쓰기 서버 간에 데이터를 동기화하려면 "log bin"이라는 공통 별칭을 사용하는 바이너리 로깅 기술을 사용해야 합니다. 구체적인 단계는 다음과 같습니다.

(1) 메인 서버에서 바이너리 로그 기능을 활성화합니다.

MySQL 구성 파일 my.cnf에 다음 구성 정보를 추가합니다.

log-bin=mysql-bin # 활성화 바이너리 로깅 기능
binlog-ignore -db=mysql # 특정 데이터베이스 무시

(2) 슬레이브 서버에서 바이너리 로깅 활성화

MySQL 구성 파일 my.cnf에 다음 구성 정보를 추가합니다.

log-bin= mysql-bin # 바이너리 로깅 활성화 기능
binlog-do-db=dbname # 동기화가 필요한 데이터베이스 지정

(3) 마스터-슬레이브 동기화 설정

슬레이브 서버에서 다음 SQL 문을 실행합니다.

MASTER를 MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

(4) 코드 구현

PHP 프로그램에서는 다음과 같은 라이브러리를 사용할 수 있습니다. 데이터베이스 서버에 연결하기 위한 PDO 또는 MySQLi 코드 예는 다음과 같습니다.

//주 쓰기 서버에 연결
$dbw = new PDO('mysql:host=master_host_name;dbname=dbname;charset=utf-8 ', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => 1) );
//슬레이브 읽기 서버에 연결
$dbr = new PDO('mysql:host=slave_host_name;dbname=dbname; charset=utf-8', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => ; 1));
//읽기 작업 수행
$stmt = $dbr->query('SELECT * FROM table_name');
//쓰기 작업 수행
$sql = 'INSERT INTO table_name (col1, col2) VALUES (:col1, :col2)';
$stmt = $dbw->prepare($sql);
$stmt->bindValue(':col1', $value1);
$stmt->bindValue(' :col2', $value2);
$stmt->execute();

2.2 이중 마스터 복제 Scheme

이중 마스터 복제 방식을 사용하면 프로그램은 SQL 문 읽기 및 쓰기를 두 개의 마스터 서버에 균등하게 분배합니다. 슬레이브 서버가 없기 때문에 두 마스터 서버 간의 데이터 동기화가 보장되어야 합니다. 구체적인 단계는 다음과 같습니다.

(1) 이중 마스터 동기화 설정

두 마스터 서버 모두에서 다음 SQL 문을 실행합니다.

CHANGE MASTER TO MASTER_HOST='another_master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password ', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

(2) 코드 구현

PHP 프로그램에서는 PDO 또는 MySQLi와 같은 라이브러리를 사용하여 두 개의 주요 서버를 연결할 수도 있습니다.

//메인 서버에 연결 1
$db1 = new PDO('mysql:host=host_name_1;dbname=dbname;charset=utf-8', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => ; 1));
// 메인 서버에 연결 2
$db2 = new PDO('mysql:host=host_name_2;dbname=dbname;charset=utf-8', 'user_name', 'password', array(PDO ::ATTR_TIMEOUT => 1))
//읽기 작업 수행
$stmt = $db1->query('SELECT * FROM table_name');
//쓰기 작업 수행
$sql = 'INSERT INTO table_name(col1, col2) VALUES(:col1, : col2)';
$stmt = $db2->prepare($sql);
$stmt->bindValue(':col1', $value1);
$ stmt->bindValue(':col2', $ value2);
$stmt->execute();

  1. Summary

데이터베이스 읽기 및 쓰기 분리 체계 적용을 통해 웹 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다. PHP 프로그래밍에서는 마스터-슬레이브 복제와 이중 마스터 복제를 사용하여 데이터베이스에서 읽기 및 쓰기를 분리하고 실제 상황에 따라 적합한 솔루션을 선택할 수 있습니다. 어떤 솔루션을 채택하든 데이터베이스 읽기-쓰기 분리 솔루션이 성공적으로 적용되도록 하려면 데이터베이스 서버와 코드에 연결된 서버 주소 및 포트 간의 동기화와 같은 세부 사항에 주의해야 합니다.

위 내용은 데이터베이스 읽기 및 쓰기 분리 솔루션: PHP 프로그래밍에 적용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿