나는 사용자 레코드를 만들고 관리하는 서비스를 작성 중입니다. 그들 중 100 만 이상. 각 새 사용자에 대해 서비스는 고유 한 사용자 ID를 생성하여 데이터베이스에 기록합니다. 데이터베이스는 생성 된 고유 한 사용자 ID를 기반으로 분할됩니다.Elasticsearch에 대한 쿼리
각 사용자 레코드에는 여러 필드가 있습니다. 이제 요구 사항 중 하나는 서비스가 일치하는 필드 값을 가진 사용자가 있는지 검색 할 수 있다는 것입니다. 따라서 해당 필드는 데이터베이스 스키마에서 인덱스로 선언됩니다.
그러나 데이터베이스는 기본 키 (고유 사용자 ID)를 기반으로 분할됩니다. 특정 열과 일치하는 사용자 레코드를 찾으려면 모든 샤드를 검색해야합니다.
그래서 빨리 검색 할 수 있습니다. 한 가지 생각은 ElasticSearch 클러스터를 설정하는 것입니다. 서비스는 새 사용자 레코드를 생성 할 때마다 ES 클러스터에 기록합니다. ES 클러스터는 관련 필드를 기반으로 사용자 레코드를 인덱싱합니다.
내 질문과 답변 : 여기에 ES에서 어떤 종류의 성능을 기대할 수 있습니까? 나는 각 사용자 레코드의 5 열을 인덱싱해야하는 100 + 백만 개의 사용자 레코드가 있다고 가정합니다. 하드웨어 구성에 따라 다르다는 것도 알고 있습니다. 그러나 잘 조정 된 하드웨어를 가정하십시오.
- 여기서 여러 키를 제공하는 memcache 대안으로 ES를 사용하려고합니다. 그래서 모든 데이터 집합을 메모리에 저장하고 내구성이 있어야 할 필요는 없습니다. ES 올바른 도구가 그것을 할 수 있습니까?
대용량 데이터 세트에 대한 ElasticSearch 경험에 기반한 모든 의견/권장 사항에 매우 만족합니다.
나는 이것을 위해 ES를 사용할 수 있다고 생각한다. 100M 레코드는 ES에서 정상적인 숫자입니다. 내 데이터는 색인 된 8 개의 열이있는 약 80M 레코드이며 제대로 작동합니다. ES에서는 모든 것이 인덱싱되며 더 빠른 검색을 위해 메모리에로드됩니다. 나는 당신이 elasticsearch.org에서 문서/프리젠 테이션을 읽고 지역 사회에 참여하여 구현 방법에 대해 자세히 연구 할 것을 제안합니다. –
Hello Duc, 모든 데이터가 메모리에 있습니까? 어떤 종류의 읽기 성능을 얻습니까? 또한 ES를 사용하는 이유는 무엇입니까? – snegi
귀하의 질의, 귀하의 목적에 따라 다릅니다. 퍼포먼스에 초점을 맞추기 때문에 메모리에 캐쉬를 남기고 주로 데이터 검색에 주로 사용합니다. –