[DB] neo4j를 정리하자

  1. 개요

    1. Noe4j소개

      1. Java로 개발된 Graph database
      2. License : GPL, 일부는 AGPL/상업용.

버전 

기능

라이선스 

Community

기본 기능 

GPL 

Advanced

모니터링 기능

AGPL 또는 상용 라이선스

Enterprise 

온라인 백업, HA, 모니터링

AGPL 또는 사용 라이선스

 

  1. 보통 소셜 네트워크 데이터 같이 특정 데이터와 연관된 데이터들의 연관 정보들을 빠른 검색이 가능..
  • 참고 : cisco ,HP , adobe 등에서 사용 중.

 

  1. 특징

    1. 자바 기반의 그래프 DB로서, 임베딩 방식과 REST 방식을 지원한다.
    2. 트랜잭션을 지원하며, JTA를 지원한다.
    3. 인덱스 및 노드 탐색을 지원한다.
    4. 이중화를 통한 고가용성을 지원한다.
    5. 백업/복구를 지원한다.

    

  1. 그래프 데이터 베이스

    node , relationship , property  이렇게 3가지로 구성되어져 있으며, 밑에 사진 관계를 화살표와 해당 관계가 어떤 내용인지를 표시하고 있다.

  1. Neo4j 설치

    1. 설치 환경

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

 

  1. 설치과정

# 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".

  1. Neo4j Configuration Files

    1. /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

 

  1. / 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

 

  1. /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

 

  1. 서비스 시작/중지

# 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

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Neo4j 기본 조작 명령어

    1. /bin/neo4j – neo4j server 구동을 위한 명령

    neo4j <command>

     

    COMMANDS

    console

    foreground 로 서버를 실행. 중지는 CTRL-C.

    start / stop / restart

    서비스를 시작 / 중지 / 재시작

    status

    상태 확인.

    install

    최초 서버 설치시 사용함.

    remove

    서버를 삭제

    info

    간단한 기본 설정 확인 NEO4J_HOME CLASSPATH.

     

    1. /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

    경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
    어린이용이며, 설치가 필요없는 브라우저 게임입니다.
    https://s1004games.com

    설정 파일 위치 지정

     

    사용 얘제.

    #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

     

    1. /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

     

 

  1. Cypher Query

    Neo4j에서 이용되는 쿼리문

  • START: 요소 Id 또는 인덱스 조회를 통해 얻은 그래프에서 출발점.
  • MATCH: 그래프 패턴을 일치, START 에서 시작 포인트에 바인딩.
  • WHERE: 조건절.
  • RETURN: 결과값을 반환.
  • CREATE: 노드 및 관계를 생성.
  • DELETE: 노드, 관계 및 속성을 제거.
  • SET: 값 속성을 설정(=update).
  • FOREACH: 목록에 요소에 한 번씩 업데이트 작업을 수행.
  • WITH: 여러 개의 쿼리를 나누어 부분.

 

  • 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 결과값 출력.

 

 

 

  1. Webadmin

    Advanced 이상의 버전에서만 제공되는 웹으로 구현된 UI

    http://localhost:7474/webadmin/

     

  • Dash board

 

  1. 현재 노드 및 속성,관계, DISK 사용 상태를 표시해줌.
  2. 실시간으로 갱신됨 .
  • Data browser

  1. 사이퍼쿼리를 수행 할 수 있음.
  2. GUI 환경으로 Node를 추가

  1. Node 의 속성 및 속성값 추가
  2. 현재 Node와 연관된 관계 출력

  1. 관계 생성 및 속성 추가

3.1 관계 시작 Node 지정

3.2 관계의 type(이름)을 지정

3.3 관계와 연관되는 Node 지정

 

  1. 쿼리를 그래프로 자동 표현

 

 

  • Console

콘솔화면을 웹으로 구현가능함.

        

1.Neo4j-sheell 화면으로 전환

2.Gremlin shell 화면으로 전환

3.http 테스트를 위한 shell 전환

  • Indexes

DB에 인덱스 생성기능을 제공함

 

  • Server info

콘솔에서 확인가능한 설정 정보를 확인 할 수 있음..

 

  1. 정리

    Neo4j가 빅 데이터는 아니지만, 소셜 기능, 추천 기능 등에 활용에 적합 할 것으로 예상된다.

    그래프의 특징을 이용해서 구현을 해야 된다면 사용을 고려 해 볼만 하다. java에서 Spring Data Neo4j을 지원하고 있어

    보다 쉽게 구현이 가능하지만 기타 언어에서는 rest API 를 통하여 이용이 가능하다 하지만 구현이 상대적으로 쉽지 않을 것 같다.

[출처] http://woner.tistory.com/25

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86142
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78639
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95367
42 블록체인 기반 플랫폼 비즈니스를 이해하자 졸리운_곰 2017.09.10 1553
41 다운타임 없는 서비스 구현 패턴 file 졸리운_곰 2017.09.10 1229
40 테이블의 수직분할과 수평분할에 대한 이해 file 졸리운_곰 2017.09.10 3908
39 정규화와 응집도에 대한 고찰 file 졸리운_곰 2017.05.28 1782
38 머신러닝 새 도전…“클라우드를 벗어나라" file 졸리운_곰 2017.05.28 1711
37 보안성 높이는 공공 거래장부 블록체인 file 졸리운_곰 2017.05.28 1757
36 디지털, 속도의 전쟁 VS 데이터, 품질의 전쟁 file 졸리운_곰 2017.05.05 1515
35 04. 데이터 모델링의 3단계 진행 file 졸리운_곰 2016.03.15 1659
34 데이터베이스 설계의 기본 원리.pdf file 졸리운_곰 2016.03.15 2353
33 실체유형(Entity Type) 정의 사항 및 도출 file 졸리운_곰 2015.05.21 2197
32 마농의 SQL 백문백답: 단순하고 쉽게 작성하는 SQL 노하우 [1회] file 졸리운_곰 2015.05.21 1829
31 sql개발자-sql전문가자격시험 시험 예제.pdf file 졸리운_곰 2015.02.15 2302
30 데이터베이스 선정에는 비밀이 있다 - 4부 졸리운_곰 2015.01.15 2095
29 데이터베이스 선정에는 비밀이 있다 - 3부 졸리운_곰 2015.01.15 2042
28 데이터베이스 선정에는 비밀이 있다 - 2부 졸리운_곰 2015.01.15 1827
27 데이터베이스 선정에는 비밀이 있다 - 1부 졸리운_곰 2015.01.15 2391
26 지금 우리에게 필요한 것은 데이터베이스 성능 최적화이다 (2부) 졸리운_곰 2015.01.15 1484
25 우리에게 필요한 것은 데이터베이스 성능 (1부) 졸리운_곰 2015.01.15 1773
24 21회 결과 secret 졸리운_곰 2014.11.10 0
23 [데이터아키텍쳐준전문가] 시험 fail 자료 secret 졸리운_곰 2014.08.31 0
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED