1

저는 Neo4j 데이터베이스에 500 만 개의 제품과 100,000 개의 판매자를 데이터로 보유하고 있습니다. 판매자는 모든 제품 포트폴리오 중에서 몇 가지 공통된 제품을 보유하고 있습니다. 이들 제품과 판매자는 노드이며 이들 사이의 관계는 Neo4j 데이터베이스의 가장자리입니다.Neo4j에서 검색 질의의 시간 복잡도는 얼마입니까?

Neo4j 데이터베이스의 각 판매자에 대한 모든 제품을 찾기 위해 검색 쿼리에 소요되는 시간은 얼마나됩니까?

+0

질문에 대한 추가 정보가 필요하다고 생각합니다. 귀하의 제품과 판매자는 이미 관계로 연결되어 있습니다. 당신의 의견은 무엇입니까? 단일 제품? 배수? 단일 판매자? 한 판매자와 동일한 제품을 가진 다른 모든 판매자 (단지 셀 수 또는 실제 판매자)를 찾으려면 동일한 제품을 모두 갖고 있어야합니까 아니면 일부만 가지고 있어야합니까? – InverseFalcon

+0

@InverseFalcon, 나는 필요한 변경을했습니다. 시간 복잡성으로 지금 나를 도울 수 있습니까? –

+0

그래서 반환하려는 데이터는 각각 5 백만 개의 제품과 수집 된 판매자입니다. 정말 유용한 검색어입니까? 엄청난 양의 데이터로 무엇을 할 계획입니까? Neo4j는 쿼리를 축소하여 그래프의 더 작고 관련성이 높은 부분을 터치 할 때 가장 효과적입니다. 5 백만 행을 반환하는 것은 다소 과도한 것 같습니다. – InverseFalcon

답변

1

특정 판매자 (또는 한 번에 여러 판매자를 조회하는 경우)를 찾는 요구에 따라 관계를 이동하는 복잡성은 특정 판매자 (모든 판매자가 아님)가 판매 한 제품에 비례합니다 그 전화 k), 그래서 O (k).

판매자 노드를 색인으로 검색 할 것입니다 (특정 레이블/특성 색인에 대한 lucene 색인 조회는 O (log (n)이라고 생각합니다.) 여기서 n은 해당 항목의 수입니다 특정 인덱스)를 검색 한 다음 관련 관계 (: Sells?)를 모두 해당 판매자가 판매 한 제품 노드로 이동 한 다음 판매자 당 제품을 수집합니다.

트래 버설은 그래프의 관련 부분만을 처리하므로 1 판매자와 100 제품에 대한 쿼리가있는 경우 쿼리 시간이 그래프의 유일한 노드인지 아니면 사용자가 5 백만 제품 및 1 lakh 판매자의 제안 그래프.

처음 판매자의 조회에 색인을 사용하지 않는 경우 모든 판매자 노드에서 레이블 스캔을 수행하는 대신 복잡성이 변경되므로 쿼리 비례에 큰 영향을 미칩니다 판매자 노드의 수입니다.

가능한 경우 인덱스를 만들고 시작 노드에 인덱스 조회를 사용하는 것이 중요합니다.

편집 :

나는 그것이 쿼리의 가장 비싼 부분이 될 수는 없지만 (판매 된 제품의 높은 숫자 주어진), Lucene을 통해 인덱스 찾아보기 ... 위의 약간을 명확히로 성장할 것입니다 색인 된 노드의 수 (해당 특정 레이블/특성 색인에 대한). 그러나 lucene 색인 룩업의 복잡성을 설명하는 데는 더 엄격한 방법이 있습니다. 이러한 종류의 조회는 대부분의 데이터베이스에서 시작 지점을 찾는 데 매우 일반적이며 Neo4j 또는 그래프 DB에만 해당되는 것이 아니므로 그래프 DB 성능에 대한 고려에서 인덱스 조회가 중요하지 않다고 생각합니다.

관련 문제