개발자
neo4j 를 도입해 연관성을 찾는 작업을 하고 있어요 데이터가 얼마 없을 경우 문제가 없었지만 현 기준 노드 200만개 관계 6000만 건 으로 한번 검출 할 때 속도가 너무 느려서요 그래서 apoc를 도입을 했고요 메모리, heap 등 용량도 늘려줬습니다. 쿼리도 MATCH (first:Keyword {name: '마우스'}) CALL apoc.path.expand(first, 'RELATED_TO', 'Keyword', 1, 6 ) YIELD path WHERE ANY(n IN nodes(path) WHERE n.name = '게이밍마우스') RETURN path LIMIT 500; 이렇게 apoc와 LIMIT를 적용 했고요 추가로 profile을 찍어보니 한번 검사를 할 경우 500만~1억 번 노드를 조회를 하고 있어요 방법이 없을까요? ps. 데이터는 아직 1%만 쌓였습니다
답변 2
옛날에 접했던거라 기억이 흐릿한데 neo4j도 인덱싱이 있을겁니다. 노드랑 관계에 인덱싱 설정하고 인덱스 기반 검색을 진행해 보세요. ps. mz한 그래프 데이터베이스(멀티 패러다임 DB) 추천 (SurrealDB: https://surrealdb.com/)
NickSoon
작성자
스타트업 개발자 • 2월 23일
감사합니다 찾아봐야겠어요
Keyword 노드의 name 필드에 인덱스는 걸려있겠죠? 마찬가지로 관련 있는 노드에서도 name 필드로 필터링 하게 되는데 그 노드들도 전부 name 인덱스가 있는게 좋아보입니다. apoc.path.expand 함수 최대 깊이가 6으로 설정되어 있는데 이렇게까지 필요한가 한번 고민해보시고 가능하다면 최대 깊이를 조정해보면서 성능 다시 확인해보시고, 6뎁스까지 꼭 있어야 유의미한 검색이 된다 하면.. path를 단축시킬 수 있는 새로운 관계를 찾아보는 것도 방법일 것 같습니다
NickSoon
작성자
스타트업 개발자 • 2월 25일
감사합니다 path를 단축을 할 수 있는지 찾아봐야겠네요 지금 연관이 1개이다 보니 단순하게 path의 깊이를 탐색하고 있었습니다
CP
백엔드 to AI 개발자 • 2월 25일
네 새롭게 정의할 수 있는 관계를 찾아보거나 (graphDB 스러운 방식) 아니면 name 말고도 검색 scope를 줄일 수 있는 필드 (카테고리라던가) 를 추가해보는 것도 방법일 것 같습니다 (일반적인 DB 방식)
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2월 21일
속도 문제는 여러 요인이 원인이 될 수 있습니다. 이 경우, 다음과 같은 접근법을 고려해보세요. 1. **인덱싱**: Neo4j의 쿼리 성능을 개선하는 가장 기본적인 방법 중 하나는 적절한 인덱싱입니다. 필드에 인덱스를 생성하여 데이터 검색 속도를 빠르게 할 수 있습니다. `name` 필드에 대한 인덱스가 있는지 확인하고, 없다면 만들어 보세요. 2. **최적화된 쿼리 작성**: 예를 들어, 특정 조건을 충족시키는 모든 경로를 찾지 않고 첫 번째 경로만 찾도록 쿼리를 수정하면 성능이 향상될 수 있습니다. 3. **하드웨어 개선**: GraphDB의 경우 메모리 용량이 많으면 많을수록 좋습니다. 그래서 가능하다면 물리적/가상 메모리를 늘리세요. 4. **데이터 모델링 재검토**: 효율적인 간섭 추론을 위한 명확한 데이터 모델링은 중요합니다. 현재 데이터 모델이 최적화되었는지 재검토해보세요. 5. **Neo4j Enterprise Edition 사용 고려**: 무료 버전인 Community Edition 대신 Enterprise Edition을 사용하면 추가적인 성능 향상 기능들을 이용할 수 있습니다. 이 구체적인 경우에 대한 해결책을 제안하기 위해서는 더 많은 정보와 상황을 알아야 할 것 같습니다. 위의 제안들이 일부 도움이 되었기를 바라며, 그래프 데이터베이스 성능 최적화는 꽤 복잡한 주제라 전문가의 도움을 받는 것도 좋아 보입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!