저는 Neo4j 데이터베이스에 500 만 개의 제품과 100,000 개의 판매자를 데이터로 보유하고 있습니다. 판매자는 모든 제품 포트폴리오 중에서 몇 가지 공통된 제품을 보유하고 있습니다. 이들 제품과 판매자는 노드이며 이들 사이의 관계는 Neo4j 데이터베이스의 가장자리입니다.Neo4j에서 검색 질의의 시간 복잡도는 얼마입니까?
Neo4j 데이터베이스의 각 판매자에 대한 모든 제품을 찾기 위해 검색 쿼리에 소요되는 시간은 얼마나됩니까?
저는 Neo4j 데이터베이스에 500 만 개의 제품과 100,000 개의 판매자를 데이터로 보유하고 있습니다. 판매자는 모든 제품 포트폴리오 중에서 몇 가지 공통된 제품을 보유하고 있습니다. 이들 제품과 판매자는 노드이며 이들 사이의 관계는 Neo4j 데이터베이스의 가장자리입니다.Neo4j에서 검색 질의의 시간 복잡도는 얼마입니까?
Neo4j 데이터베이스의 각 판매자에 대한 모든 제품을 찾기 위해 검색 쿼리에 소요되는 시간은 얼마나됩니까?
특정 판매자 (또는 한 번에 여러 판매자를 조회하는 경우)를 찾는 요구에 따라 관계를 이동하는 복잡성은 특정 판매자 (모든 판매자가 아님)가 판매 한 제품에 비례합니다 그 전화 k
), 그래서 O (k).
판매자 노드를 색인으로 검색 할 것입니다 (특정 레이블/특성 색인에 대한 lucene 색인 조회는 O (log (n)이라고 생각합니다.) 여기서 n은 해당 항목의 수입니다 특정 인덱스)를 검색 한 다음 관련 관계 (: Sells?)를 모두 해당 판매자가 판매 한 제품 노드로 이동 한 다음 판매자 당 제품을 수집합니다.
트래 버설은 그래프의 관련 부분만을 처리하므로 1 판매자와 100 제품에 대한 쿼리가있는 경우 쿼리 시간이 그래프의 유일한 노드인지 아니면 사용자가 5 백만 제품 및 1 lakh 판매자의 제안 그래프.
처음 판매자의 조회에 색인을 사용하지 않는 경우 모든 판매자 노드에서 레이블 스캔을 수행하는 대신 복잡성이 변경되므로 쿼리 비례에 큰 영향을 미칩니다 판매자 노드의 수입니다.
가능한 경우 인덱스를 만들고 시작 노드에 인덱스 조회를 사용하는 것이 중요합니다.
편집 :
나는 그것이 쿼리의 가장 비싼 부분이 될 수는 없지만 (판매 된 제품의 높은 숫자 주어진), Lucene을 통해 인덱스 찾아보기 ... 위의 약간을 명확히로 성장할 것입니다 색인 된 노드의 수 (해당 특정 레이블/특성 색인에 대한). 그러나 lucene 색인 룩업의 복잡성을 설명하는 데는 더 엄격한 방법이 있습니다. 이러한 종류의 조회는 대부분의 데이터베이스에서 시작 지점을 찾는 데 매우 일반적이며 Neo4j 또는 그래프 DB에만 해당되는 것이 아니므로 그래프 DB 성능에 대한 고려에서 인덱스 조회가 중요하지 않다고 생각합니다.
질문에 대한 추가 정보가 필요하다고 생각합니다. 귀하의 제품과 판매자는 이미 관계로 연결되어 있습니다. 당신의 의견은 무엇입니까? 단일 제품? 배수? 단일 판매자? 한 판매자와 동일한 제품을 가진 다른 모든 판매자 (단지 셀 수 또는 실제 판매자)를 찾으려면 동일한 제품을 모두 갖고 있어야합니까 아니면 일부만 가지고 있어야합니까? – InverseFalcon
@InverseFalcon, 나는 필요한 변경을했습니다. 시간 복잡성으로 지금 나를 도울 수 있습니까? –
그래서 반환하려는 데이터는 각각 5 백만 개의 제품과 수집 된 판매자입니다. 정말 유용한 검색어입니까? 엄청난 양의 데이터로 무엇을 할 계획입니까? Neo4j는 쿼리를 축소하여 그래프의 더 작고 관련성이 높은 부분을 터치 할 때 가장 효과적입니다. 5 백만 행을 반환하는 것은 다소 과도한 것 같습니다. – InverseFalcon