우리는 패싯 계산 공간에서 ArangoDB 성능을 평가 중입니다. 같은 일을 할 수있는 다른 제품 중 특별한 API 또는 쿼리 언어를 통해 수 있습니다ArangoDB 측면 검색 성능
- MarkLogic 패싯
- ElasticSearch 집계
- SOLR 패 시팅 등
우리는 이해하고, 거기를 사실을 명시 적으로 계산하는 Arango의 특별한 API는 없습니다. 의 형태로 속성 1 및 수율 주파수에면을 계산
FOR a in Asset
COLLECT attr = a.attribute1 INTO g
RETURN { value: attr, count: length(g) }
이 쿼리 : 현실에서 필요하지 않은 그러나 는 포괄적 인 AQL에 대한 감사 쉽게 같은 간단한 쿼리를 통해 달성 될 수있다
전체 컬렉션 속성 1은 관련 카운트가 제공된 3 가지 형식 (test-attr1-1, test-attr1-2 및 test-attr1-3)을 사용했습니다. 거의 DISTINCT 쿼리를 실행하고 집계 된 수입니다.
간단하고 깨끗하게 보입니다. 하나지만, 실제로는 큰 문제 - 성능.
위의 검색어는 31 초 동안 실행됩니다! 단 8M 문서로 테스트 컬렉션 상단에 있습니다. 우리는 다른 인덱스 유형, 스토리지 엔진 (rocksdb와 함께)을 사용해 실험 계획을 세우고 설명 계획을 조사했습니다. 이 테스트에서 사용하는 테스트 문서는 세 가지의 짧은 특성으로 매우 간결합니다.
이 시점에서 입력 사항을 알려 주시면 감사하겠습니다. 우리는 뭔가 잘못하고 있습니다. 또는 ArangoDB는 단순히이 특정 영역에서 수행하도록 설계되지 않았습니다.
BTW, 궁극적 인 목표는 아래 초에 다음과 같은 시간 같은 것을 실행하는 것입니다 :
LET docs = (FOR a IN Asset
FILTER a.name like 'test-asset-%'
SORT a.name
RETURN a)
LET attribute1 = (
FOR a in docs
COLLECT attr = a.attribute1 INTO g
RETURN { value: attr, count: length(g[*])}
)
LET attribute2 = (
FOR a in docs
COLLECT attr = a.attribute2 INTO g
RETURN { value: attr, count: length(g[*])}
)
LET attribute3 = (
FOR a in docs
COLLECT attr = a.attribute3 INTO g
RETURN { value: attr, count: length(g[*])}
)
LET attribute4 = (
FOR a in docs
COLLECT attr = a.attribute4 INTO g
RETURN { value: attr, count: length(g[*])}
)
RETURN {
counts: (RETURN {
total: LENGTH(docs),
offset: 2,
to: 4,
facets: {
attribute1: {
from: 0,
to: 5,
total: LENGTH(attribute1)
},
attribute2: {
from: 5,
to: 10,
total: LENGTH(attribute2)
},
attribute3: {
from: 0,
to: 1000,
total: LENGTH(attribute3)
},
attribute4: {
from: 0,
to: 1000,
total: LENGTH(attribute4)
}
}
}),
items: (FOR a IN docs LIMIT 2, 4 RETURN {id: a._id, name: a.name}),
facets: {
attribute1: (FOR a in attribute1 SORT a.count LIMIT 0, 5 return a),
attribute2: (FOR a in attribute2 SORT a.value LIMIT 5, 10 return a),
attribute3: (FOR a in attribute3 LIMIT 0, 1000 return a),
attribute4: (FOR a in attribute4 SORT a.count, a.value LIMIT 0, 1000 return a)
}
}
감사합니다!