일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Play2 로 웹 개발
- 파이썬 동시성
- akka 강좌
- 플레이프레임워크
- CORDA
- 파이썬 머신러닝
- play 강좌
- Akka
- 파이썬
- 엔터프라이즈 블록체인
- 스칼라
- Hyperledger fabric gossip protocol
- Golang
- Play2
- 스칼라 동시성
- 안드로이드 웹뷰
- hyperledger fabric
- Adapter 패턴
- 스칼라 강좌
- 파이썬 강좌
- 이더리움
- 블록체인
- 파이썬 데이터분석
- 스위프트
- 하이퍼레저 패브릭
- play2 강좌
- 그라파나
- Actor
- 하이브리드앱
- 주키퍼
- Today
- Total
HAMA 블로그
Neo4j 인사이드 : 파일 스토리지 본문
Neo4j Hello world~!!
인사이드를 살펴보기전에 Neo4j 의 사용 예를 간단하게 체크하자.
- Relationship 타입을 enum 으로 만든다.
- 관련 변수 선언
- 데이터 베이스 시작
- 트랜잭션으로 todo list 감싸기
- 작은 그래프 만들어보자.
- 그래프를 출력해보고
- 그래프 데이터를 삭제해보자
위의 소스를 보면 중요한 3가지 특성이 있다는것을 알수있다.
1. 노드 (firstNode, SecondNode) : '노드 속성을 가지고있다'
2. 관계 (relationship) : '관계 타입, 노드 속성 , 노드 방향을 가지고있다.'
3. 속성 ( 노드속성 : "hello" , 'world' / 관계 속성 : "brave neo4j")
이제 이정도만 기억해두고 이런 정보들을 과연 파일에 어떻게 저장하는지에 관해 알아보자.
Neo4j Internals: File Storage
소통한다는 점이고, DynamicStore 의 ids 는 오직 클래스안에서 의미를 가진다는점이다.
relationships 의 첫번째 id 이고, 마지막 4 byte 는 이 노드가 가지고있는 첫번째 속성의 id 이다.
두번째 노드의 이전관계 id / 두번째 노드의 다음 관계 id
* 4 바이트 : 이 관계의 첫번째 속성의 id
- org.neo4j.kernel.impl.nioneo.store.RelationshipTypeStore 는 neostore.relationshipTypestore.db 파일 생성.
- 관계 타입 이름을 저장하기위한 장소가 필요한데 neostore.relationshipTypestore.db.names 파일이다.
8 . 속성 스토어
- org.neo4j.kernel.impl.nioneo.store.PropertyStore 는 neostore.propertystore.db 파일을 만든다.
- 각각의 속성 레코드들은 in_use 바이트과 속성의 타입을 저장하는 integer 로 시작된다.
Block - oriented storage: Strings and arrays
그것의 사용법을 살펴보았는데, 모두다 .Strings 나 배열같은 자바 기본 요소가 필요하다.
이제 그들의 구조를 살펴보자.
9. 일반 블록 구조
다양한 사이즈의 임의의 데이터는 dynamic store 파일안에 이중 링크드 블럭 구조에 의해 수용되어진다.
여기서 필요로 되어지는것은 in_use byte / 이전 블럭 / 다음 블럭으로의 포인터 / 데이타의 크기 및 데이터이다.
이것의 크기는 파일안에서의 오프셋을 발견하기 위해 가능한 맥시점 블럭사이즈 에 의해 한계가 지어진다. 만약 하나의
데이터가 blockSize 보다 더 큰 공간을 요구하면, 그 만큼의 블럭들이 그것의 체인에 알맞게 추가된다.
그러나 체인의 마지막 블럭은 (만약 하나라면 첫번째) 할당된 양보다 적게 사용가능하다.
각각 블럭헤더의 레이아웃은 in_use byte, 이전 블럭의 int id (만약 -1 이면 첫번째) , 길이 , 다음블럭의 int id, 이
13바이트 이후에는 맥스 blockSize 크기의 데이터가 온다.전체 블럭의 크기는 고로 13 + blockSize 이다.
10. Strings vs Arrays
org.neo4j.kernel.impl.nioneo.store.DynamicArrayStore
org.neo4j.kernel.impl.nioneo.store.DynamicStringStore
11. 개인적 노트
12. 마무리
몇몇 부분 정확한 이해없이 대략 정리한것이기때문에 잘못된것이 있을수 있습니다.
하기 레퍼런스를 보시면 더 정확한 정보를 알수있습니다.
레퍼런스:
http://neo4j.com/docs/stable/tutorials-java-embedded-hello-world.html
http://digitalstain.blogspot.kr/2010/10/neo4j-internals-file-storage.html
'NoSQL' 카테고리의 다른 글
Neo4j - Traversal (0) | 2015.10.30 |
---|---|
Neo4j - 인덱스 사용하기 (0) | 2015.10.30 |
시계열 DB (OpenTSDB , 인플럭스 DB , Graphite ) 정리 (0) | 2015.10.22 |
MongoDB vs Couchbase (2) (0) | 2015.09.03 |
MongoDB vs Couchbase (1) (0) | 2015.09.03 |