수천 명의 사용자를위한 WordPress usermeta 스케일링


11

WordPress 사용자 관리와 통합 된 클라이언트 용 CRM 플러그인을 개발했으며 wp_usermeta표 아래에 각 사용자에 대한 추가 정보를 저장했습니다 .

그러나 클라이언트의 고객 데이터베이스는 기하 급수적으로 증가하고 있으며 현재 수천 명이르러 수만 행을 제공합니다 wp_usermeta.이 시점에서 저는 이 아키텍처의 확장성에 대해 걱정하기 시작했습니다 .

WordPress 방식으로 그러한 양의 사용자를 관리 한 경험이 있습니까? 열에 wp_users의존하지 않고 테이블 에 열을 추가해야합니까 wp_usermeta? 이 단계에서 WordPress 및 자체 코드 성능을 진단 / 프로파일하는 방법은 무엇입니까?

나는 그런 양의 데이터 와이 증가하는 속도로 일한 적이 없으며 모든 포인터가 중요합니다.

답변:


16

테이블의 크기는 실제로 문제가 아니며 해당 테이블에서 실행중인 쿼리는 문제가 될 수 있습니다.

예를 들어, user-meta 테이블에 저장된 데이터를 기반으로 사용자를 선택하는 경우 meta_value가 색인화 된 필드가 아니기 때문에 해당 쿼리가 최적화되지 않습니다. 이 경우 추가 색인을 추가하거나 사용자 지정 분류법과 같은 다른 방식으로 특정 데이터를 저장하는 것이 좋습니다.

일반적으로 메타로 저장하는 콘텐츠는 독점적으로 검색하는 콘텐츠가되어서는 안됩니다. 이것은 WordPress의 모든 메타 테이블에 적용됩니다. 메타는 주로 meta_value가 아니라 meta_key에 의해 추출되도록 설계되었습니다. 분류법은 가능한 값을 세트로 제한하고 정보를 다르게 구성하므로 "값"이 선택한 항목으로 계산 될 때 더 잘 수행됩니다.

mySQL은 먼저 meta_key를 기반으로 쿼리를 최적화하여 검색 할 데이터의 양을 (관리 가능하게) 관리 가능한 한계로 줄이므로 meta_key와 meta_value로 선택하는 것이 일반적으로 좋습니다. 이것이 문제가 되더라도 meta_key와 meta_value를 인덱스에 추가하여 메타 테이블에 새 인덱스를 추가하여이를 "수정"할 수 있지만 meta_value가 LONGTEXT이므로 해당 인덱스의 길이를 적절한 것으로 제한해야합니다. 데이터에 따라 20-30 개 정도 이 색인은 실제 데이터보다 훨씬 클 수 있으며 필요한 저장 공간을 크게 증가시킵니다. 그러나 이러한 유형의 쿼리에서는 훨씬 빠릅니다. 이것이 실제 문제가되는 경우 자격을 갖춘 DBA에 문의하십시오.

참고로 WordPress.org에는 약 1,100 만 명의 사용자가 등록되어 있습니다. 메타의 양은 사용자마다 다르며, 아마도 최소 8 행, 최대 약 250-ish입니다. users 테이블은 약 2.5GB, usermeta 테이블은 약 4GB입니다. 대부분 정상적으로 작동하는 것 같지만 가끔씩 최적화해야 할 이상한 쿼리가 있습니다.


1
.org는 메타 테이블을 색인합니까? 그렇다면 구성 방법에 대한 예를들 수 있습니까?
dwenaus

1
usermeta 테이블은 WordPress.org에서 기본값보다 더 이상 색인을 생성하지 않습니다. bbPress에 사용 된 하나의 메타 테이블이 있는데 여기에 다음과 같은 형식의 키를 추가했습니다(object_type,meta_key,meta_value(50))
Otto

고마워 오토. Wordpress 쿼리 성능을 프로파일 링 / 진단하는 데 유용한 팁이 있습니까?
Sunyatasattva 2019

2
실제로 WordPress 관련 질문이 아니라 MySQL 프로파일 링 등을 자세히 살펴보십시오. DebugBar 플러그인과 같은 간단한 도구를 사용하여 WordPress의 쿼리 및 시간을 볼 수 있지만 이러한 도구는 초보적이며 실제 MySQL 프로파일 링 메커니즘이 더 좋습니다. 최적화를 수행하기 전에 실제 병목 현상을 식별해야합니다.
Otto

5

API를 사용하는 대신 자체 쿼리를 실행하지 않는 한, 테이블 크기는 중요하지 않습니다. 워드 프레스가 테이블의 인덱스에 의해 쿼리를 실행하고 MYSQL이 이러한 종류의 쿼리를 최적화해야합니다. 각 쿼리는 모든 메타 정보를 하나의 쿼리로 가져옵니다.

주장하면 사용자 ID의 해시를 테이블 이름으로 사용하여 사용자 메타 테이블을 여러 테이블로 분할 할 수 있지만 쿼리를 기반으로 올바른 테이블에 액세스하려면 wp_db 클래스를 대체해야합니다. 이 경로를 따르는 데 관심이있는 경우 많은 블로그에서 대규모 네트워크 설치를 처리하기위한 솔루션을 찾으십시오.

그러나 지금 성능 문제가 없다면 상당한 조정을하지 않고도 훨씬 더 발전 할 수 있습니다. 성능 문제가 발생하기 시작하면 DB를 더 빠른 서버로 옮기기 만하면 WP가 해당 정보에 액세스하는 방식을 수행하는 것보다 훨씬 비용 효율적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.