์ด์ ๋ฐํ๊ธ๊ณผ ์ฐ๋๋๋ค
2024.04.24 - [Back-end] - [Graph DB] Neo4j ๋ค์ด ๋ฐฉ๋ฒ ๋ฐ ์ค๋ช
1. Neo4j ์์
1) ๋จผ์ ์ ํ๋ก์ ํธ ์์ฑ
2) DBMS ์์ฑ
3) start, ๊ทธ๋ฆฌ๊ณ open
4) ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ์ฝ์ ์ฐฝ์ด ๋ธ
2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ํํ๊ธฐ ๋ฐ ์๋ก ๋ง๋ค๊ธฐ
1) CSV ๋ถ๋ฌ์ค๊ธฐ
- github์ ์ฌ๋ฆฐ ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
- ์ปดํจํฐ ๋ด ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
์ด 2๊ฐ์ง ๋ฐฉ๋ฒ ์ค, 2. ์ ํํจ (1.์ 1๋ฒ์งธ Reference ์ฐธ๊ณ )
๋จผ์ , import ๋๋ฅด๋ฉด > ํด๋์ฐฝ์ด ๋ธ > ์ํ๋ CSV ๋ฃ๊ธฐ
2) LOAD CSV
์๊น Open ํ ์ฐฝ์ผ๋ก ๋ค์ ใฑใฑ
์ฌ๊ธฐ์ ์์ ์ ํ๊ธฐ์ ์ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋๋ก ์ ํํ๋์ง ํ์ธํ๊ณ ์งํํ๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง์ด๋ค.
- neo4j๋ ๋ง์ฐ์ค
- system์ ์ปค๋งจ๋
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ํ๋ ๋ฐฉ์์ผ๋ก ์งํ(ํ์๋ system์ธ๋ฐ, ์ฌ์ค ์ด๊ฒ ๋ฑํ ์๊ด์์)
- :use system
์ฌ๊ธฐ์ ์ ๊น~~~~~~!
Neo4J์์๋ SQL์ด ์๋ Cypher๋ผ๋ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ํตํด DBMS์ ์ง์๋ฅผ ํ๊ฒ ๋๋ค
๊ถ๊ธํ๋ฉด ์ฌ๊ธฐ ๋งํฌ๋ก~~>>
3) ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์ฑ/์ญ์ ๋ฐ ์ด๋
์์ฑ
- CREATE DATABASE ์ด๋ฆ
์ด๋ฆ๋ช ์ ascii characters(a,b, ...), numbers(0,1, ...), dots and dashes ๋ง ๊ฐ๋ฅํจ
์ด๋ฆ์ ์๋ฌธ์๋ก ์์ฑ๋๋๋ผ--> ๋์๋ฌธ์ ๊ด๊ณ ์์?(๋ค์ test ๋ผ๊ณ ๋ง๋ค์๋๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฆ๋ช ์ด ๊ฒน์น๋ค๋ค)
๊ทธ๋ฆฌ๊ณ ์์ x ๋ฒํผ ๋๋ฅธ๋ค๊ณ DATABASE๊ฐ ์ฌ๋ผ์ง๋๊ฒ ์๋
์ฌ๊ธฐ๋ถํฐ ์ ๊น ์ฐธ๊ณ !! CSV ๋ถ๋ฌ์ค๊ธฐ๋ก ๊ฐ๊ณ ์ถ์ผ๋ฉด 4)๋ก ๊ฐ๊ธฐ~!
๊ถ๊ธํด์ ํด๋ด, ์ญ์ ํ๋ ๋ช ๋ น์ด
์ญ์
- DROP DATABASE ์ด๋ฆ
์ ๊ทธ๋ฆฌ๊ณ ๋ค์ ์คํํ๊ณ ์ถ์ผ๋ฉด ์ปค๋งจ๋์ ๋ง๋ ํ๋์ > ์ด๊ฑฐ ๋๋ฅด๊ธฐ (๊ทธ๋ฆฌ๊ณ ์์ ๋ ๊ฐ๋ฅํจ)
4) CSV ๊ฐ์ ธ์ค๊ธฐ
์จ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ง๋ค์์ผ๋ฉด
๊ผญ ํด๋น ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉ์ผ๋ก ๋ณํํ๋ค
์ฌ๊ธฐ์ CSV ๊ฐ์ ธ์ค๋ ๋ช ๋ น์ด ์ ๋ ฅ ํ ๊ฑฐ์
์ฒซ์งธ๋ก, Node ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๊ทธ ํ Relation์ ๋ณด๋ฅผ ๊ฐ์ ธ ์ค๋๋ก ํ ๊ฑฐ์
5) Node.CSV ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ SET ๋ถ๋ถ์ ๋ฐ์ดํฐ์ ์์ฑ์ ๋ฐ๊ฟ์ฃผ๋ ๊ฑฐ์. ์ง์ ์ํ๋ฉด, ๋ฌธ์ํ์ผ๋ก ๋์ด ์์ > ์ด๊ฑธ ์์นํ์ผ๋ก ๋ณํํ ๊ฑฐ์
- LOAD CSV WITH HEADERS FROM 'file:///ํ์ผ๋ช .csv' AS row
MERGE (place:Place {id:row.company})
SET place.latitude = toFloat(row.latitude), place.longitude = toFloat(row.longitude), place.code = toInteger(row.code);
6) ๊ด๊ณ์ ๋ณด.CSV ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
- LOAD CSV WITH HEADERS FROM 'file:///ํ์ผ๋ช .csv' AS row
MATCH (origin:Place {id:row.loading})
MATCH (destination:Place {id:row.unloading})
MERGE (origin)-[r:TRANSPORT]->(destination)
SET r.type = row.transport, r.frequency = toInteger(row.frequency);
๊ทผ๋ฐ ์์ ๋ ๋ํ๋๊น ๊ฑ ๊บผ์ง; ์ด๊ฒ ๊ด๊ณ๊ฐ ๋๋ฌด ๋ง๊ณ ๋ณต์กํด์ ๊ทธ๋ผ
๊ทธ๋ํ๋ก ๋ฐ์ดํฐ ๋ณด๊ณ ์ถ์ผ๋ฉด
- MATCH (n) RETURN n
์ฌ๊ธฐ์ ์ ๊น
๋ ธ๋๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ, ์๊พธ ์ด๊ธฐ ์ค์ ์ด 300์ด๋ผ๊ณ ํด์ ๋ ธ๋๋ฅผ ๋ค ์ ๋ณด์ฌ์ค
์ด๋ด ๊ฒฝ์ฐ, ์ด๊ธฐ ์ค์ ๋ฐ๊พธ๋ฉด ๋จ
์ด๋ ๊ฒ>>
๊ทผ๋ฐ.. ์๋๊ฐ ๋ฏธ์ณค์.. ์์ฒญ ๋๋ฆผ
Reference
https://dfso2222.tistory.com/23
https://brain-nim.tistory.com/33
https://dbrang.tistory.com/1645
'๐ Back-end & ๐ฉ๐ปโ๐ป > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Graph DB] Neo4j + D3.js ๋ฐ๋ชจ (2) (0) | 2024.05.29 |
---|---|
[Graph DB] Neo4j ๋ฐ D3.js ๋ฐ๋ชจ (1) (0) | 2024.05.24 |
[Graph DB] Neo4j - Cypher Query - Demo (0) | 2024.05.21 |
[Graph DB] Neo4j ๋ฌผ๋ฅํ๋ฆ ์ฟผ๋ฆฌ ์์ฑ (0) | 2024.05.03 |
[Graph DB] Neo4j ๋ค์ด ๋ฐฉ๋ฒ ๋ฐ ์ค๋ช (0) | 2024.04.23 |