대규모 데이터 세트를 빠르게 쿼리: MySQL MEMORY(HEAP) 엔진, MyISAM 또는 기타 항목(예: MemCached)

대규모 데이터 세트를 빠르게 쿼리: MySQL MEMORY(HEAP) 엔진, MyISAM 또는 기타 항목(예: MemCached)

현재 SNOMED로 알려진 의학 용어를 중심으로 한 프로젝트를 진행하고 있습니다. snomed의 핵심은 길이가 350,000개 용어/레코드인 (관계형) 데이터세트입니다. 우리는 자동 완성/제안의 모양이나 형태를 원하는 데이터 입력 부분에 대해 이 데이터 세트를 빠르게 쿼리할 수 있기를 원합니다.

현재는 개발 목적으로만 MySQL MyISAM DB에 있지만 메모리 옵션 중 일부를 사용해 보고 싶습니다. 현재 인덱스를 포함하면 30MB입니다. MEMORY MySQL 엔진과 MemCached가 가장 확실한 것인데, 제 질문은 이들 중 어느 것을 제안하시겠습니까? 아니면 더 나은 것이 있습니까? 차이가 있다면 우리는 주로 앱 수준에서 Python으로 작업하고 있습니다.

참고 사항: 데이터세트에는 이러한 개념을 약 130만 개의 레코드인 공통 별칭 이름 및 약어에 매핑하는 별도의 관계가 있습니다. 결국 여기서도 이 하위 집합을 사용하게 될 것입니다.

답변1

귀하의 요구 사항이 정확히 무엇인지는 확실하지 않지만, 이렇게 작은 데이터베이스를 사용하면 모든 데이터가 메모리에 들어갈 수 있기 때문에 모든 엔진에서 쿼리가 빨라질 가능성이 높습니다.

MyISAM 및 InnoDB와 같은 기능이 작동하려면 약간의 조정이 필요합니다. Memcached는 로드가 매우 높은 읽기 기반 워크로드, 즉 단일 서버가 기존 인 메모리 데이터베이스에서 서비스를 제공하기에는 너무 높은 워크로드로 확장해야 하는 경우에만 유용합니다(Memcached의 주요 기능은 풀 전체에 걸쳐 확장하는 기능입니다) 서버). 그러나 memcached는 범위 스캔과 같은 기존 쿼리를 수행할 수 없으며 특정 키에 대한 조회만 수행하므로 범용 DB가 아닙니다.

데이터 세트보다 큰 버퍼 풀과 함께 innodb를 사용하고 기본 키를 올바르게 선택하는 것이 좋습니다. 기본 키 범위 스캔은 매우 잘 수행되어야 하며 접두사 일치(예: 완성 사용 사례)에 사용할 수 있어야 합니다.

일반 하드웨어에서는 초당 쿼리 1000개까지 확장할 수 있습니다. 더 필요한 경우 복제 슬레이브를 추가하거나 memcached와 같은 것을 고려하십시오.

StackOverflow에 문의해 보세요.

답변2

테이블을 MEMORY 유형으로 유지할 수 있습니다. 꽤 빠르지만 사용하기 전에 시드해야 합니다. 나는 당신이 그것으로부터 많은 성과를 얻을 수 있다고 생각합니다. 메모리에 있기 때문에 읽기 작업에서는 InnoDB 및 MyISAM보다 확실히 빠릅니다.

몇 가지 다른 방법을 시도한 다음 ApacheBench로 검색을 오버로드하여 압박감에 가장 빨리 굴복하는 것이 무엇인지 확인하고 싶습니다.

관련 정보