일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- NarwalFreo
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레로봇청소기추천
- 증강현실
- SSM
- 삼성소프트웨어멤버십
- 패턴 인식
- 인공지능
- 신경회로망
- 빅데이터
- 구글 앱 엔진
- 삼성
- 고려대학교
- 나르왈프레오
- Friendship
- 패턴인식
- 신경망
- Python
- 파이썬
- 물걸레자동세척로봇청소기
- 하이퍼바이저
- BAM
- 동아리
- 멤버십
- hopfield network
- 갤럭시탭S8울트라
- Google App Engine
- 가상화
- Bidirectional Associative Memory
- Neural Network
- Today
- Total
정보공간_1
[5기 신촌 정구원] Neo4j & Cypher Query Language #3 본문
[5기 신촌 정구원] Neo4j & Cypher Query Language #3
알 수 없는 사용자 2014. 6. 8. 23:381. Neo4j 고유 id 사용
Node 또는 Relationship을 조회하기 위해서는 일반적으로 label 또는 relationship type과 property 값을 이용하여 원하는 정보를 조회합니다. 하지만 대용량의 데이터베이스에서 원하는 조건에 맞는 정보를 빠르게 조회하는 것은 쉽지 않은 일입니다. 또한, node를 찾은 뒤 다시 그 node에 연결된 relationship을 찾고, 또 그에 연결된 node를 찾는 등 복잡한 과정을 통해 정보를 조회하게 되면 시간은 점점 더 오래 걸릴 수 밖에 없습니다.
하지만 Neo4j에서 제공하는 고유 id를 사용하면 특정 node 및 relationship에 빠르게 접근할 수 있습니다. 고유 id는 node 또는 relationship 생성 시 자동으로 할당되며, 이를 얻기 위한 방법은 다음과 같습니다.
Cypher Query Language에서 제공하는 함수 중 ID를 이용하면 node의 고유 id를 얻을 수 있습니다. Relationship도 같은 방법으로 고유 id를 얻을 수 있습니다. 위 쿼리의 예상 결과는 다음과 같습니다.
이제 두 가지 방법으로 ‘강백호’라는 사람이 싫어하는 사람의 이름을 확인해보겠습니다.
먼저, label과 property를 이용하여 node를 찾고, 그에 연결된 relationship을 통해 찾는 방법입니다.
결과로 ‘서태웅’이라는 문자열을 얻을 수 있습니다.
다음은 고유 id를 알고 있을 경우입니다. 위의 그림에서 알 수 있듯이, 현재 ‘강백호’ node의 고유 id는 0번입니다. 따라서 다음과 같이 쿼리를 작성합니다.
Cypher Query Language에서 제공하는 NODE라는 함수를 통해 입력으로 고유 id를 주면 해당 node를 바로 찾을 수 있습니다. 따라서 n이라는 변수에 START 문에서 원하는 node를 먼저 찾고, `Hate` type의 relationship을 이용하여 싫어하는 사람에 대한 node를 찾은 뒤 이름을 출력해보았습니다. 결과는 물론 위의 결과와 동일합니다.
데이터베이스의 크기가 작은 경우에는 별 다른 차이를 느낄 수 없지만, 크기가 커지면 커질수록 탐색 시간이 증가하므로, 조회를 원하는 node 또는 relationship의 고유 id를 알고 있다면 아주 빠른 시간에 정보를 조회할 수 있습니다.
2. Cache
다른 데이터베이스와 마찬가지로, Neo4j도 cache를 지원합니다. 지원하는 cache는 크게 두 종류가 있는데, File buffer cache와 Object cache가 바로 그것입니다.
먼저 File buffer cache는 low level cache 또는 file system cache라고도 불립니다. Neo4j는 file buffer cache에 데이터를 쓰고, logical log가 rotate 될 때까지 durable writing(DB에 최종 반영)하는 것을 미루게 됩니다. 즉, cache에 계속해서 정보를 쓰고, 가득 찬 후에야 실제 DB에 반영하게 됩니다. 물론, crash가 날 수 있으나, logical log에도 함께 기록하고 있으므로, 이후에 문제없이 복구할 수 있습니다. 따라서 file buffer cache를 크게 설정하면 할수록 I/O 시간이 줄어들어 성능의 향상을 얻을 수 있습니다. 설정 가능한 file buffer cache의 종류는 다음과 같습니다.
두 번째로, Object cache는 high level cache로도 불리며, 각 node 및 relationship을 탐색함에 있어서, 빠른 탐색에 최적화 된 형태의 속성을 cache합니다. 즉, 빠른 탐색을 위해 이전에 탐색했던 내용을 기록해 놓는다는 내용입니다. Neo4j에서는 Object cache의 type으로 총 5가지를 지원합니다. none, soft, weak, strong 그리고 hpc(high performance cache)가 바로 그것입니다.
상세하게 설정할 수 있는 type은 hpc 이지만, Enterprise Edition에서만 사용 가능한 type인 점을 확인하시고 사용하시기 바랍니다. 그 이외의 type은 Community Edition에서도 사용 가능하며, 프로젝트의 성향에 맞는 type을 선택해서 사용하시길 바랍니다. 만약 그렇지 않을 경우, cache의 누적으로 인해 OOME(Out Of Memory Error)가 발생할 수 있습니다.
3. Cypher Query Language Test
만약 어떤 Cypher Query Language를 테스트 해보려면 Neo4j Community 프로그램을 켜고, 서버를 작동시킨 뒤, 거기에 DB또한 비어 있는 상태라면, node와 relationship들을 추가한 후에나 테스트를 해볼 수 있을 것입니다. 이건 매우 귀찮은 작업이 될 것이라고 생각합니다.
하지만 좀 더 쉽게 테스트 해볼 수 있는 방법이 있습니다. Cypher Query Language의 Manual site에 가 보면, 여러 가지 manual들이 있습니다.
자세히 살펴보면, 빨간색 박스로 표시한 부분을 발견하실 수 있습니다. 이 버튼을 누르게 되면, 아래 그림과 같이 내용이 펼쳐집니다.
위 그림에서 나타낸 그래프가 실제로 Neo4j에 이미 저장되어 있으며, Cypher Query를 사용할 수 있는 콘솔도 함께 제공해주어 실시간으로 결과를 확인할 수 있습니다. 이러한 예제는 Manual 곳곳에 숨어있으므로, 자신이 테스트하려는 환경과 비슷한 예제를 찾아서 원하는 Cypher Query를 테스트 해볼 수 있습니다. 이 방법을 통해 많은 시간을 절약할 수 있을 것이라고 생각합니다.
이번 포스팅에서는 Neo4j 및 Cypher Query Language를 사용할 때의 여러 가지 Tip에 대하여 알아보았습니다. 포스팅을 이것으로 마치며, 많은 도움이 되었기를 바랍니다.
감사합니다.
Reference
Neo4j
- http://docs.neo4j.org/chunked/milestone/
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 대전 민창기] Control System #1 (0) | 2014.08.04 |
---|---|
[5기 수원 정영진] SSD의 특징 및 내부구조 (0) | 2014.06.09 |
[5기 강북 강현호] RESTful Open API with JAX-RS #1 (0) | 2014.06.08 |
[5기 신촌 정구원] Neo4j & Cypher Query Language #2 (0) | 2014.06.08 |
[5기 신촌 정구원] Neo4j & Cypher Query Language #1 (0) | 2014.06.08 |