- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
데이터분석 & 데이터사이언스 [DB] neo4j를 정리하자
2017.05.14 01:34
[DB] neo4j를 정리하자
-
개요
-
Noe4j소개
- Java로 개발된 Graph database
- License : GPL, 일부는 AGPL/상업용.
-
|
버전 |
기능 |
라이선스 |
|
Community |
기본 기능 |
GPL |
|
Advanced |
모니터링 기능 |
AGPL 또는 상용 라이선스 |
|
Enterprise |
온라인 백업, HA, 모니터링 |
AGPL 또는 사용 라이선스 |
- 보통 소셜 네트워크 데이터 같이 특정 데이터와 연관된 데이터들의 연관 정보들을 빠른 검색이 가능..
- 참고 : cisco ,HP , adobe 등에서 사용 중.
-
특징
- 자바 기반의 그래프 DB로서, 임베딩 방식과 REST 방식을 지원한다.
- 트랜잭션을 지원하며, JTA를 지원한다.
- 인덱스 및 노드 탐색을 지원한다.
- 이중화를 통한 고가용성을 지원한다.
- 백업/복구를 지원한다.
-
그래프 데이터 베이스
node , relationship , property 이렇게 3가지로 구성되어져 있으며, 밑에 사진 관계를 화살표와 해당 관계가 어떤 내용인지를 표시하고 있다.
-
Neo4j 설치
- 설치 환경
OS : CentOS release 5.8 (Final)
kernel : 2.6.18
jdk : 1.7.0_45
*참고 : 설치 권장 사양
|
CPU : 최소 인텔 코어 i3 / 권장 인텔 코어 i7 RAM: 최소 2 GB / 권장 16-32 GB 이상 HDD: 최소 10GB SATA / 권장 SSD SATA 최소 ext4 / 권장 ext4, ZFS |
- 설치과정
|
# wget http://dist.neo4j.org/neo4j-community-2.0.0-unix.tar.gz # tar xvfz neo4j-community-2.0.0-unix.tar.gz # neo4j-community-2.0.0/bin/neo4j install Graph-like power should be handled carefully. What user should run Neo4j? [neo4j] neo4j User "neo4j" does not yet exist. Shall I create the account for you? [Yn]Y Created user "neo4j". |
-
Neo4j Configuration Files
- /neo4j/conf/neo4j-server.properties 파일 설정
|
// 데이터베이스 디렉토리 지정 org.neo4j.server.database.location=data/graph.db
//외부 연결 설정 기본은 로컬만 허용. 주석처리 되어있음. org.neo4j.server.webserver.address=0.0.0.0
// HTTP Connector org.neo4j.server.webserver.port=7474
// HTTPS Connector org.neo4j.server.webserver.https.enabled=true // https port ( 모든 데이터 및 UI 액세스 용 ) org.neo4j.server.webserver.https.port=7473 // 인증서 위치(파일이 존재하지 않을 경우 자동으로 생성 ) org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert // 개인 키 위치(파일이 존재하지 않을 경우 자동으로 생성) org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key
// keystore 위치지정 org.neo4j.server.webserver.https.keystore.location=data/keystore
// rrd데이터 디렉토리 기본 설정됩니다. org.neo4j.server.webadmin.rrdb.location=data/rrd org.neo4j.server.webadmin.data.uri=/db/data/
// API 중에서 REST 엔드 포인트 ( Webadmin 에서 사용 ) org.neo4j.server.webadmin.management.uri=/db/manage/ // 그래프 엔진 튜닝 파일설정 파일 org.neo4j.server.db.tuning.properties=conf/neo4j.properties // 콘솔 서비스 org.neo4j.server.manage.console_engines=gremlin, shell |
- / neo4j/conf/ neo4j.properties 설정
|
// 저수준 그래프 엔진에 대 한 기본값 #neostore.nodestore.db.mapped_memory=25M #neostore.relationshipstore.db.mapped_memory=50M #neostore.propertystore.db.mapped_memory=90M #neostore.propertystore.db.strings.mapped_memory=130M #neostore.propertystore.db.arrays.mapped_memory=130M
// Autoindexing // 자동 인덱싱 노드의 활성화, 기본값은 false #node_auto_indexing = true // 노드 속성 키 자동 인덱스를 사용 하는 경우 수 #node_keys_indexable = 이름, 나이 // 관계에 대 한 자동 인덱싱 활성화, 기본값은 false #relationship_auto_indexing = true // 관계 속성 키 자동 인덱스를 사용 하는 경우 수 #relationship_keys_indexable = 이름, 나이
// 계속 논리 로그, 디버깅 설정(날짜설정:"7 days" 용량:"100M size" 기본: "true") keep_logical_logs = true // 온라인 백업을 데이터베이스 사용 합니다. online_backup_enabled = true // 들어오는 백업 요청을 수신 하는 포트. online_backup_server = 127.0.0.1:6362
//neo4j 업그레이드할 수 있을 수 있도록 설정 #allow_store_upgrade = true // 사이퍼 쿼리 버전 설정 #cypher_parser_version = 1.6
// 원격 클라이언트 연결할 수 있도록 서버에서 쉘 사용 Neo4j 쉘. #remote_shell_enabled = true // 지정한 사용자 지정 셸 포트 (기본값은 1337). #remote_shell_port = 1234 |
- /neo4j/conf/neo4j-wrapper.conf
|
wrapper.java.additional=-Dorg.neo4j.server.properties=conf/neo4j-server.properties wrapper.java.additional=-Djava.util.logging.config.file=conf/logging.properties wrapper.java.additional=-Dlog4j.configuration=file:conf/log4j.properties
// 자바 추가 매개 변수 wrapper.java.additional=-XX: + UseConcMarkSweepGC wrapper.java.additional=-XX: + CMSClassUnloadingEnabled
// 가비지 수집 로깅을 사용 설정 #wrapper.java.additional=-Xloggc:data/log/neo4j-gc.log #wrapper.java.additional=-XX: + PrintGCDetails #wrapper.java.additional=-XX: + PrintGCDateStamps #wrapper.java.additional=-XX: + PrintGCApplicationStoppedTime // 초기 자바 힙 크기 (MB) #wrapper.java.initmemory=3 // 최대 자바 힙 크기 (MB) #wrapper.java.maxmemory=64 // 응용 프로그램 매개 변수입니다. 1에서 시작 하는 데 필요한 매개 변수를 추가 wrapper.java.app.mainclass=org.neo4j.server.Bootstrapper // lockfile 설정 wrapper.pidfile=./data/neo4j-server.pid wrapper.lockfile=./data/neo4j-server.lck |
- 서비스 시작/중지
|
# bin/neo4j start WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See the Neo4j manual. WARNING! You are using an unsupported Java runtime. Please use Oracle(R) Java(TM) Runtime Environment 7. Using additional JVM arguments: -server -XX:+DisableExplicitGC -Dorg.neo4j.server.properties=conf/neo4j-server.properties -Djava.util.logging.config.file=conf/logging.properties -Dlog4j.configuration=file:conf/log4j.properties -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dcom.sun.management.jmxremote.port=3637 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=conf/jmx.password -Dcom.sun.management.jmxremote.access.file=conf/jmx.access Starting Neo4j Server...process [452]... waiting for server to be ready......... OK. Go to http://localhost:7474/webadmin/ for administration interface.
# bin/neo4j stop Stopping Neo4j Server [26380].... done |
-
Neo4j 기본 조작 명령어
- /bin/neo4j – neo4j server 구동을 위한 명령
neo4j <command>
COMMANDS
console
foreground 로 서버를 실행. 중지는 CTRL-C.
start / stop / restart
서비스를 시작 / 중지 / 재시작
status
상태 확인.
install
최초 서버 설치시 사용함.
remove
서버를 삭제
info
간단한 기본 설정 확인 NEO4J_HOME CLASSPATH.
- /bin/neo4j-shell – neo4j 클라이언트 접속 명령
neo4j-shell [REMOTE OPTIONS]
neo4j-shell [LOCAL OPTIONS]
REMOTE OPTIONS
-port PORT
접근포트 지정(default: 1337).
-host HOST
호스트 지정 (default: localhost).
-name NAME
RMI 지정 (default: shell).
-readonly
읽기전용으로 접속
LOCAL OPTIONS
-path PATH
접근할 DB 경로 지정, 경로에 DB가 없다면 새로 생성함.
-pid PID
PID로 DB 접속
-readonly
읽기 전용.
-c COMMAND
쿼리 실행 후 접속 종료
-config CONFIG
설정 파일 위치 지정
사용 얘제.
#neo4j-shell
#neo4j-shell -port 1337
#neo4j-shell -host 192.168.1.234 -port 1337 -name shell
#neo4j-shell -host localhost -readonly
#neo4j-shell -path /path/to/db
#neo4j-shell -path /path/to/db -config /path/to/neo4j.properties
#neo4j-shell -path /path/to/db -readonly
- /bin/neo4j-backup – neo4j 백업 명령
neo4j-backup -from SourceURI -to Directory
백업타입
SOURCE URI
<running mode>://<host>[:<port>][,<host>[:<port>]]…
running mode
'single' 또는 'ha'.
'ha'는 "고가용성" 모드에서 인스턴스.
'single'은 독립 실행형 데이터베이스.
사용예제
#mkdir /mnt/backup/neo4j-backup
#neo4j-backup -from single://192.168.1.34 -to /mnt/backup/neo4j-backup
#neo4j-backup -from single://freja -to /mnt/backup/neo4j-backup
#neo4j-backup -from single://freja:9999 -to /mnt/backup/neo4j-backup
#neo4j-backup -from ha://oden:5002 -to /mnt/backup/neo4j-backup
#neo4j-backup -from ha://oden:5001,loke:5002 -to /mnt/backup/neo4j-backup
-
Cypher Query
Neo4j에서 이용되는 쿼리문
|
- Create 문.
|
단일노드 만들기 CREATE n;
노드생성 및 속성값 부여. CREATE (a {name : 'Andres'}) RETURN a;
CREATE n = {name : 'Andres', title : 'Developer'};
노드간 relationship 생성 START a=node(1), b=node(2) CREATE a-[r:RELTYPE]->b RETURN r;
START a=node(1), b=node(2) CREATE a-[r:RELTYPE {name : a.name + '<->' + b.name }]->b RETURN r;
CREATE p = (andres {name:'Andres'})-[:WORKS_AT]->neo<-[:WORKS_AT]-(michael {name:'Michael'}) RETURN p;
Ex) CREATE (ee { name: "Emil", from: "Sweden" }) RETURN ee.name; -데이터를 만드는 CREATE 절. -() 괄호는 노드를 나타내는 -ee 새 노드에 대 한 변수 - {} 괄호 노드에 속성을 추가 하려면 -RETURN 절이 나타냅니다 반환 하려면 어떤 데이터 -'ee' 노드의 name 속성을 반환. |
- Delete 문
|
단일 노드 삭제 START n = node(4) DELETE n
노드와 relationship 삭제 START n = node(3) MATCH n-[r]-() DELETE n, r
속성제거 START andres = node(3) DELETE andres.age RETURN andres |
- Set 문
|
속성 업데이트 START n = node(2) SET n.surname = 'Taylor' RETURN n
속성 삭제 START n = node(2) SET n.name = null RETURN n
속성 복사 START at = node(2), pn = node(1) SET at = pn RETURN at, pn |
- start 문
|
단순 노드 select START n=node(1) RETURN n
단순 relationship 확인 START r=relationship(0) RETURN r
모든 노드 select START n=node(*) RETURN n
속성값으로 START n=node:nodes(name = "A") RETURN n
Ex) START ee=node(*) WHERE ee.name! = "Emil" RETURN ee;
- START 절 쿼리를 시작 -ee=node(*)모든 노드를 통해 검색 -WHERE 조건절 시작 -ee.name! name = "Emil" 비교 -RETURN 결과 출력. |
- macth 문
|
연관된 노드 확인 START n=node(3) MATCH (n)--(x) RETURN x
방향성 노드 확인 START n=node(3) MATCH (n)-->(x) RETURN x
Relationship 을 만족하는 노드 출력 START n=node(3) MATCH (n)-[r]->() RETURN r
START n=node(3) MATCH (n)-[:BLOCKS]->(x) RETURN x
START a=node(3), x=node(2, 4) MATCH a-[:KNOWS*1..3]->x RETURN a,x
Where 절을 포함한 구문 START david=node(1) MATCH david--otherPerson-->() WITH otherPerson, count(*) as foaf WHERE foaf > 1 RETURN otherPerson;
Ex) START ee=node(*) MATCH (ee)-[:KNOWS]->(friends) WHERE ee.name! = "Emil" RETURN friends;
-MATCH 절 에밀으로 패턴을 시작 하는 -(ee)-[: KNOWS]-> "freinds" knows 라는 관계와 매칭되는 - RETURN 결과값 출력. |
-
Webadmin
Advanced 이상의 버전에서만 제공되는 웹으로 구현된 UI
http://localhost:7474/webadmin/
- Dash board
|
|
- Data browser
|
3.1 관계 시작 Node 지정 3.2 관계의 type(이름)을 지정 3.3 관계와 연관되는 Node 지정
|
- Console
|
콘솔화면을 웹으로 구현가능함.
1.Neo4j-sheell 화면으로 전환 2.Gremlin shell 화면으로 전환 3.http 테스트를 위한 shell 전환 |
- Indexes
|
DB에 인덱스 생성기능을 제공함
|
- Server info
|
콘솔에서 확인가능한 설정 정보를 확인 할 수 있음..
|
-
정리
Neo4j가 빅 데이터는 아니지만, 소셜 기능, 추천 기능 등에 활용에 적합 할 것으로 예상된다.
그래프의 특징을 이용해서 구현을 해야 된다면 사용을 고려 해 볼만 하다. java에서 Spring Data Neo4j을 지원하고 있어
보다 쉽게 구현이 가능하지만 기타 언어에서는 rest API 를 통하여 이용이 가능하다 하지만 구현이 상대적으로 쉽지 않을 것 같다.
[출처] http://woner.tistory.com/25
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86141 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78637 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95367 |










