개발자
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 방식)
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!