Używam elasticsearch do indeksu dwa typy obiektów - SzczegółyElasticsearch wydajność kwerendy
danych
Kontrakt obiektów ~ 60 właściwości (wielkość obiektu - 120 bajtów) ryzykiem pozycji obiektów ~ 125 właściwości (wielkość obiektu - 250 bajtów)
Zamówienie jest rodzicem elementu ryzyka (_parent)
mam przechowującej 240 milionów takich obiektów w pojedynczym index (210 milionów elementów ryzyka, 30 milionów umowy)
wielkość indeksu jest - 322 pl
dane Cluster
11 pudełka m2.4x.large EC2 [pamięci 68 pl, 1,6 TB na rdzenie, 8] (1 opakowanie jest węzeł równoważenia obciążenia w node.data = fałsz) 50 odłamki 1 repliki
elasticsearch.yml
node.data: true
http.enabled: false
index.number_of_shards: 50
index.number_of_replicas: 1
index.translog.flush_threshold_ops: 10000
index.merge.policy.use_compound_files: false
indices.memory.index_buffer_size: 30%
index.refresh_interval: 30s
index.store.type: mmapfs
path.data: /data-xvdf,/data-xvdg
Zaczynam węzły elasticsearch z poleceniem - /home/ec2-user/elasticsearch-0.90.2/bin/elasticsearch -f -Xms30g -Xmx30g
Moim problemem jest to, że jestem uruchamianie następujących kwerend na typ elementu ryzyka i zajmuje około 10-15 sekund, aby zwrócić dane, na 20 rekordów.
Używam tego z obciążeniem 50 równoczesnych użytkowników i obciążeniem indeksu zbiorczego około 5000 elementów ryzyka występujących równolegle.
Zapytanie (Z Dołącz rodzic dziecka)
http: //: 9200/contractindex/riskitem/_search *
{
"query": {
"has_parent": {
"parent_type": "contract",
"query": {
"range": {
"ContractDate": {
"gte": "2010-01-01"
}
}
}
}
},
"filter": {
"and": [{
"query": {
"bool": {
"must": [{
"query_string": {
"fields": ["RiskItemProperty1"],
"query": "abc"
}
},
{
"query_string": {
"fields": ["RiskItemProperty2"],
"query": "xyz"
}
}]
}
}
}]
}
}
Zapytania z jednej tabeli
QUERY1 (To zapytanie trwa około 8 sekund.)
<!-- language: lang-json -->
{
"query": {
"constant_score": {
"filter": {
"and": [{
"term": {
"CommonCharacteristic_BuildingScheme": "BuildingScheme1"
}
},
{
"term": {
"Address_Admin2Name": "Admin2Name1"
}
}]
}
}
}
}
**Query2** (This query takes around 6.5 seconds for Top 10 records (but has sort on top of it)
<!-- language: lang-json -->
{
"query": {
"constant_score": {
"filter": {
"and": [{
"term": {
"Insurer": "Insurer1"
}
},
{
"term": {
"Status": "Status1"
}
}]
}
}
}
}
Czy ktoś może mi pomóc, w jaki sposób mogę poprawić wydajność tego zapytania?
Jestem również zainteresowany odpowiedzią. Czy próbowałeś innych rodzajów relacji między swoimi dokumentami? Mam na myśli obiekty zagnieżdżone. Mogę się mylić, ale powiedziałbym, że relacja rodzic-dziecko jest rodzajem "połączenia zapytań". Zagnieżdżone obiekty znajdują się w tym samym bloku Lucene, więc może być szybsze dla zapytań. – jackdbernier
Mam również pytanie ... Dlaczego 'Xms30g -Xmx30g' i nie więcej? – jackdbernier
obiekty są bardzo duże, a obiekty zagnieżdżone wymagałyby dużo miejsca. – Vishal