배경
우리는 축제 장점과 단점 및 환경 기초 구조의 연구의 특성 neo4j 객체로 데이터베이스를 끌고있다 이해.
이제 갈 우리는 neo4j로 CSV의 데이터에 저장된 통화 기록에 대해 이야기하고, 당신은 데이터를 쿼리 갈 수와 관계 CQL 수입
1. 가져 오기 방법
수입 neo4j 방법이 많이있다, 나는 아마 요약 :
- 사이퍼 쓰기, 데이터의 각 부분에 대한 CREATE를 CREATE 문
- 사이퍼 는 LOAD를 CSV CSV 형식으로 문 데이터는 데이터로드 CSV 읽습니다.
- 자바에서 제공하는 공식 API - 일괄 삽입
- 다니엘에 의해 준비 일괄 가져 오기 도구
- 공식 neo4j 가져 오기 도구
비교 장점과 단점 :
문을 만들 | 부하 CSV 문 | 일괄 Inseter | 일괄 가져 오기 | neo4j 가져 오기 | |
---|---|---|---|---|---|
적용 현장 | 1 ~ 1w 노드 | 1w ~ 10w 노드 | 백만 개 이상의 노드 | 백만 개 이상의 노드 | 백만 개 이상의 노드 |
속도 | 매우 느린 (1000 개 노드 / S) | 일반 (5000 개 노드 / S) | 매우 빠른 (수십 노드 / s의 수천) | 매우 빠른 (수십 노드 / s의 수천) | 매우 빠른 (수십 노드 / s의 수천) |
이점 | 사용하기 쉬운, 실시간 삽입. | 사용하기 쉽고, 로컬로드 할 수 있습니다 | 원격 CSV, 실시간 삽입 | 이미 데이터를 가져올 수 있습니다 데이터베이스에 존재;를 기반으로 배치 지대는 직접 항아리 패키지를 실행하는 컴파일 할 수 있습니다 | 공식은 일괄 가져 오기 적은 자원을 점유보다 생산 |
결점 | 천천히 | 우리는 CSV로 데이터를 변환 할 필요가 | CSV로 설정해야합니다;에만 JAVA에서, 정지 때 neo4j 삽입해야합니다 | neo4j를 중지해야합니다, 우리는 CSV로 설정해야합니다 | CSV로 설정해야합니다; Neo4j는 중지해야합니다에만 새 데이터베이스를 생성, 데이터가 이미 삽입 데이터베이스에 존재 할 수 없다 |
이 때문에 우리가 가져 많은 양의 데이터로 볼 수 있습니다 가져올 수있는 많은 방법이 있습니다, 그래서 여기에서 선택한 마지막 Neo4j - 가져 오기 , 당신은 또한 다른 방법으로 가져 오도록 선택할 수 있습니다
neo4j 가져 오기 사용
우리는 열 은 Using neo4j 가져 오기를 발췌을 볼 수있는 웹 사이트를
거대한 데이터 집합에 대한 슈퍼 빠른 일괄 가져 오기는 CSV가 좋은 곳입니다 LOAD
작은 수입 - 기록 범위 10M까지 즉, 중간 크기의 데이터를.
대용량 데이터 세트의 경우, (100B)의 기록 범위 즉, 우리는에 액세스 할 수있는
전문 대량 수입을.고객 : 우리는 비슷한 주문 Neo4j에 데이터 가져 오기를 사용하려는
주문 및 제품을 포함한다.이 도구는 경로에 있습니다 / / neo4j / 빈 / neo4j 가져 오기 및로 사용되는
다음과 같습니다 :
이 구절의 일반적인 의미는 우리가 우리의 비즈니스 요구를 충족하기 위해 데이터의로드 CSV 많은 양을 사용할 수 없습니다, 그래서 우리는이 방법을, 우리가 선택한 neo4j 수입을 가져올 수있는 새로운 방법을 선택했다 즉, 다음은 가져 예
bin/neo4j-import --into retail.db --id-type string \
--nodes:Customer customers.csv --nodes products.csv \
--nodes orders_header.csv,orders1.csv,orders2.csv \
--relationships:CONTAINS order_details.csv \
--relationships:ORDERED customer_orders_header.csv,orders1.csv,orders2.csv
예를 들어, 데이터 구조는 :
당신이 호출 할 경우 neo4j-import
매개 변수없이 스크립트를, 그것은 포괄적 인 도움말 페이지를 나열합니다.
이것은 --into retail.db
명확하게 대상 데이터베이스이며, 기존 데이터베이스를 포함 할 수 없습니다 .
반복 --nodes
및 --relationships
파라미터 (분할 가능) CSV 파일 그룹, 즉 동일한 열 구성을 가지는 복수의 동일한 엔티티이다.
각 그룹의 모든 파일은 하나 개의 큰 파일로 연결 간주됩니다. 파일 헤더 행의 첫 번째 그룹은 심지어 처리하고 멀티 GB 한 줄의 텍스트 파일보다 문서를 편집하는 것이 더 쉬울 수 있습니다 안에 포함 할 수있다 필요합니다. 또한 압축 파일을 지원합니다.
customers.csv
직접와 마찬가지로:Customer
노드 레이블을 직접 등록 정보 파일에서 소개된다.- 를 들어
:LABEL
같은 사실 GET 노드 레이블 열 제품입니다. - 세 개의 파일을 하나 개의 제목과 두 개의 콘텐츠 파일에서 주문 노드입니다.
- 입력 명령을 포함하고 제품에 포함 생성하기 위해 ID를 통해 광고 항목의 관계를.
:CONTAINS
order_details.csv
- 순서를 다시 CSV 파일을 사용하여 주문 고객에 연결,하지만 이번에는 다른 머리글 사용 : 열 관련이없는 무시
로 ID 열이 숫자 값을 포함 (만 디지털 ID : 문자열이 모든 표현 형을 -id 최적화).
노드 속성 이름 및 관계에 대한 열 이름은, 몇 가지 추가 특정 열 표시가 있습니다
name:ID
- 나중에 노드의 칼럼을 통해 다시 연결을위한 글로벌 ID 열,- 당신이 그것을 (일시적으로) 저장되지 않습니다 속성 이름을두면이의 의미 내에서 -id 형이다
- 당신이 교차 엔티티 ID를 반복 한 경우에는 괄호 엔티티 (ID 그룹)을 제공해야합니다
:ID(Order)
- 당신의 ID가 전 세계적으로 유일한 경우이를 해제 할 수 있습니다
- : LABEL - 라벨 항목 노드는, 다수의 라벨은 분리에 의해 분리 될 수있다
:START_ID
,:END_ID
- 사용되는 ID 그룹들에 사용되는 서류 칼럼, 참조 노드 ID : END_ID (순서):TYPE
- 관계형 열- 다른 모든 열은 호텔로 인정하지만, 스킵이 비어있는 경우, 또는 때 주석됩니다 무시
- 등로로, 뒷면의 이름을 추가하여 변환을 입력
:INT
,:BOOLEAN
등
데이터 가져 오기 통화 로그
CSV에서 우리의 전화 기록을 마친 후 데이터는 다음과 같습니다
-
노드를 노드로 phones.csv 전화 번호 목록을 기록
-
phone_header 헤더 파일의 데이터를 하나 개의 라인
phone:ID
-
파일 레코드 정보 설정된 관계로 덧셈과의 특성의 관계 후, 기록을 호출 call.csv
: 우익수 의미 왼쪽에서 첫 번째 행
(125)의 총 재생 **** 150 136 0,743 5,301 ****로 시 분 동안 전화 통화 125 분의 평균 -
call_header.csv 통화 기록 헤더 정보는
본원:START_ID
의 시작점 사이의 관계를 의미:END_ID
는 종단점 사이의 관계를 의미
이러한 CSV 준비 파일 후, 우리는 이러한 파일을 실행하는 쉘 스크립트를 작성합니다.
import()
{
#导入命令
neo4j stop
cd /usr/local/Cellar/neo4j/3.5.0/libexec/data/databases
rm -rf graph.db
cd /Documents/归档/data
neo4j-admin import \
--database=graph.db
--nodes:phone="../phone_header.csv,phones.csv \
--ignore-duplicate-nodes=true \
--ignore-missing-nodes=true \
--relationships:call="../call_header.csv,call.csv"
neo4j start
}
- 여기서 우리는 새로운 데이터베이스가 이미 우리가 기존 라이브러리 다음 가져 오기를 제거하기 위해 선택한 존재 방지
- 내가 먼저 가까운 neo4j 기억
결과보기
가져 오기가 완료되면 우리는 수입의 브라우저 모습 neo4j 결과를 열고
우리가 열기 에 http : // localhost를 : / 브라우저 7474
/ 먼저,이 살펴 보자 데이터베이스 정보
여기서 우리는 노드의 기존 번호, 얼마나 많은 관계를 볼 수 있습니다, 데이터베이스 정보 저장 공간을 점령
하고 우리는 전화 번호를 사회 원을 참조하십시오
match (p:phone{phone:"13825259929"})-[r]->(o) return p,o,r;
- 1
해당 노드와, 바닥이 속성을 해당 될 것이다 관계에 마우스가 표시되면
지금 우리의 데이터 가져 오기가 완료 될 때
우리는 사람의 전화 기록의 원형을 보여 springboot + neo4j + D3를 사용합니다.