두 그래프의 거대한 결합을 사용하여 그래프의 일부를 구성하고 두 컬렉션 중 하나에 문서를 추가 할 때마다 그래프를 실행합니다. 쿼리는 older post을 기반으로합니다.ArangoDB : 예제로 쿼리 함수로 삽입
FOR fromItem IN fromCollection
FOR toItem IN toCollection
FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection
내 데이터 집합을 완료하는 데 약 55,000 초가 걸립니다. 나는 그것을 더 빨리 만들기위한 제안을 절대적으로 환영 할 것이다.
- 내가 upsert이 필요합니다
는하지만이 관련 문제가 있습니다. 일반적으로
upsert
은 괜찮을 것이지만,이 경우에는 내가 열쇠를 알 수있는 방법이 없으므로 도움이되지 않습니다. 키를 앞에 놓으려면, 예를 들어 다른 동일하거나 기존의 모서리의 키를 찾기 위해 쿼리해야합니다. 그것은 내 성능을 죽일하지 않는 한 합리적인 것처럼 보이지만 AQL에서 조건부로 쿼리를 구성하여 상응하는 가장자리가 아직 존재하지 않으면 가장자리를 삽입하는 방법을 모르지만, 상응하는 가장자리 존재하지 않습니다. 어떻게해야합니까? - 데이터가 컬렉션에 추가 될 때마다이 작업을 실행해야합니다. 최신 데이터에서만이 작업을 실행하여 전체 컬렉션에 참여하지 않는 방법이 필요합니다. 내가 새로 삽입 한 레코드에만 참여할 수있게하는 AQL을 작성하려면 어떻게해야합니까? Arangoimp가 추가되었으므로 어떤 순서로 업데이트할지 보장 할 수 없으므로 노드를 생성하는 동시에 가장자리를 만들 수 없습니다. 새 데이터에만 어떻게 참여할 수 있습니까? 나는 기록이 추가 될 때마다 55k 초를 보내고 싶지 않다.
db._explain(<your query here>);
하는 쇼의 출력을 보면 알 수 있듯이
동일한 질문으로 다른 데이터베이스에서 쿼리를 수행했습니다. 다시 연결할 때 데이터 세트의 크기를 어떻게 줄입니까? 나를 위해 일한 해결책은'linked = false'와 같은 필드를'fromCollection'과'toCollection' 콜렉션 모두에 추가하는 것입니다. –
... 그러면 새 문서를 두 컬렉션에 삽입 할 때 항상'linked'를'false'로 설정합니다. 문서를 링크 할 때'link'를'true'로 설정합니다. 속도를 높이기 위해'linked'에 색인을 넣기를 원할 것입니다. 모든 것이'linked = false' 값을 가지기 때문에 처리 속도가 매우 빠르지 만 처음에는 느린 속도로 처리됩니다. –
당신을 위해 그것을 할 Foxx 응용 프로그램을 작성할 수, 다른 사람의 질문에 대한 예제 Foxx 응용 프로그램을 문서화, 사용할 수 있습니다 [여기] (http://stackoverflow.com/questions/39897954/arangodb-aql-recursive-graph- traversal)을 StackOverflow에 추가합니다. Foxx를 멋지고 빠르게 사용할 수 있고, 당신이 묘사하고있는 것과 같은 기능이 완벽한 유스 케이스라는 점을 배우려면 시간이 필요합니다. 이 함수는 매개 변수를 필요로하지 않으며, 단지 실행되며,'linked = false'로 그 레코드들을 검사 할 것입니다. –