이 글은 php mysql 대량 사용자 로그인 솔루션을 예시를 통해 분석한 것입니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
바이두, QQ, 360 등 대기업은 모두 수억 명의 사용자를 보유하고 있으며 모든 하위 웹사이트가 하나의 계정으로 로그인할 뿐만 아니라 다른 웹사이트에서도 사용할 수 있도록 사용자 플랫폼을 공개합니다. 데이터 양과 방문수 측면에서 최적화가 이루어지지 않으면 아마도 곧 다운될 것입니다. 이들 회사는 등록 및 로그인을 유지하는 전담 팀을 보유하고 있으며 세부적인 디자인이 매우 우수합니다. 이제 그들의 디자인 계획에 대해 간략하게 설명하겠습니다. 🎜>
빅 데이터의 경우 PHP에 대한 부담이 없지만 주로 MySQL에 있습니다. PHP는 로드 밸런싱을 수행할 수 있습니다. 10대의 시스템이 이를 처리할 수 없으면 20대 또는 100대를 사용하면 됩니다. 이는 병목 현상이 아닙니다.하지만 MySQL은 슬레이브를 아무리 많이 만들어도 쿼리가 최적화되어 있기 때문에 단순히 머신을 추가하는 것만으로는 문제를 해결할 수 없습니다. 게다가 쿼리도 Memcache 캐싱을 통해 줄일 수 있습니다. 라이브러리의 경우 일반적으로 마스터 1개와 슬레이브 4개이면 충분합니다.
다음은 데이터베이스 솔루션을 주로 소개합니다.
사용자가 "로그인 이름", "이메일" 또는 "휴대폰번호"를 통해 로그인할 수 있다고 가정합니다.
테이블 구조는 다음과 같습니다.
login_hash에 따라 100개의 테이블로 구분된 로그인 이름과 ID 테이블
user_id BIGINT 사용자 ID
login_pwd CHAR() 사용자 로그인 비밀번호
… …기타정보, 집주소, 휴대폰번호, 성별 등
);
user_info0 LIKE 테이블 생성
user_info1 LIKE 테이블 생성
… …
CREATE TABLE user_info2 LIKE user_info;
등록 절차:
1) 사용자 이름, 이메일, 휴대폰 번호, 비밀번호 및 기타 형식을 확인합니다. 생략…2) 115라고 가정하고 서비스에서 ID를 가져옵니다.
3) 사용자의 로그인 유형이 이메일(예: $loginName='songhuan@zixue.it')인 경우 로그인 이름 앞에 로그인 이름 결과 접두어를 추가합니다(예: $loginName='mail_songhuan@zixue.it') )
4) 로그인 이름의 HASH 값 찾기: $loginHash=md5($loginName); md5 값의 해시의 경우 asc 코드를 찾거나 자체 알고리즘을 사용하여 최종적으로 $loginHash=를 얻을 수 있습니다. 16비트 또는 32비트 정수
5) $tableName = 'user_login' .($loginHash 0), user_login 테이블 이름을 얻은 경우 결과는 user_login88입니다.
$tableName = 'user_info' (115 0), user_info 테이블 이름을 얻은 경우.
6) SQL 실행:
2)
데이터를 조회할 수 없는 경우 로그인 이름이 존재하지 않는 것입니다
5) id=115 를 얻을 수 있으면
id, pwd … FROM user_info15 WHERE id = 115;
6) 비밀번호를 일치시키고, 비밀번호가 같지 않으면 false를 반환합니다.
7) 비밀번호가 동일할 경우 사용자 ID를 암호화하여 COOKIE에 넣은 후, 사용자 정보를 Memcache에 저장합니다.
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.