สวัสดีครับ วันนี้ผมจะพาไปทำความรู้จักกับฐานข้อมูลประเภทกราฟด้วย Neo4j ถ้าพร้อมแล้วก็ไปลุยกันเลยย~~~
GraphDB คืออะไร ?
GraphDB เป็นฐานข้อมูลประเภท No-SQL รูปแบบหนึ่งออกแบบมาเพื่อแสดงความสัมพันธ์ของข้อมูลในรูปแบบของกราฟ ซึ่งประกอบไปด้วย Node หลาย Node ที่มีความสัมพันธ์กันตามรูปด้านล่าง
Neo4j คืออะไร ?
neo4j เป็นเครื่องมือหนึ่งไว้ใช้จัดการฐานข้อมูลประเภทกราฟ สำหรับคุณสมบัติของ Neo4j ประกอบด้วยดังนี้
- Nodes ใช้อธิบายวัตถุต่างๆ เช่น หากต้องการแสดงความสัมพันธ์ของคนที่ชอบดูหนังในแต่ละเรื่องว่าใครชอบดูหนังเรื่องอะไร Node ในกรณีนี้คือ คน กับ หนัง
- Nodes สามารถมีหรือไม่มี label ก็ได้ หรืออาจจะมีมากกว่า 1 label ก็ได้ เพื่อใช้แยกประเภทของ Node
- Relationships ใช้อธิบายความสัมพันธ์ระหว่าง node แต่ละ node
- Relationships ต้องมีความสัมพันธ์ไปในทิศทางเดียวเสมอ
- Relationships ต้องมี 1 ประเภท เพื่อระบุความสัมพันธ์นั้น
- Nodes และ Relationships สมามารถมีได้หลายคุณสมบัติ (Properties) เพื่ออธิบายความสัมพันธ์ได้มากยิ่งขึ้น
จากรูปตัวอย่างมีทั้งหมด 3 Node (วงกลมสีน้ำเงิน, สีฟ้า และสีเขียว) มี 3 Node label (Person, Actor และ Movie) มี 2 Relationship (ACTED_IN และ DIRECTED)
โดยใน node แรก (สีน้ำเงิน) นั้นมี 2 properties คือ name: ‘Tom Hanks’ และ born: 1956
Node ที่ 2 (สีฟ้า) มี 2 Properties คือ title: ‘Forrest Gump’ และ released: 1994
Node ที่ 3 (สีเขียว) มี 2 Properties คือ name: ‘Robert Zemeckis’ และ born: 1951
ในส่วนของ Relationship นั้น relationship ที่ 1 คือ ACTED_IN มี 1 Properties คือ roles: [‘Forrest’]
Relationship ที่ 2 คือ DIRECTED ไม่มี Properties
ซึ่งจากกราฟจะระบุความสัมพันธ์ได้ว่า Tom Hanks เกิดเมื่อปี 1956 แสดงหนังโดยรับบทเป็น Forrest ในเรื่อง Forrest Gump ซึ่งเผยแพร่เมื่อปี 1994 โดยมี Robert Zemeckis เกิดปี 1951 เป็นผู้กำกับ
ตัวอย่างการใช้งาน Neo4j
ในการใช้งาน Neo4j นั้นจะมีสิ่งที่เรียกว่า Cypher หรือชุดคำสั่ง เปรียบเสมือน Query ใน SQL มาดูตัวอย่างกันเลยย
CREATE (:Person:Actor {name: 'Tom Hanks', born: 1956})
Cypher ที่ใช้ในการสร้าง Node ที่ 1 โดยมี 2 Node Label Person และ Actor โดยมี 2 Properties คือ name: ‘Tom Hanks’ และ born: 1956
เมื่อเลือก Property keys เป็น born และ name จะได้ผลลัพธ์เป็น born : 1996 และ name : “Tom Hanks” ตามรูปภาพด้านล่าง
CREATE ()-[:ACTED_IN {roles: ['Forrest']}]->()
Cypher ใช้สร้าง Relationship ACTED_IN โดยมี 1 Properties คือ roles:[‘Forrest’] เมื่อสร้างแล้วจะได้ผลลัพธ์ตามรูปภาพด้านล่าง
เมื่อเลือก Relationships ACTED_IN จะได้ผลลัพธ์ตามรูปภาพด้านล่าง
CREATE (:Person:Actor {name: 'Tom Hanks', born: 1956})-[:ACTED_IN {roles: ['Forrest']}]->(:Movie {title: 'Forrest Gump', released: 1994})<-[:DIRECTED]-(:Person {name: 'Robert Zemeckis', born: 1951})
Cypher ใช้สร้างกราฟดังตัวอย่างด้านบน
เมื่อสร้างแล้วจะได้ Nodes Movie และ Relationships DIRECTED เพิ่มเข้ามาตามรูปภาพด้านล่าง
เมื่อเลือกดู Relationships ACTED_IN และ DIRECTED ระหว่าง Person และ Movie จะได้ผลลัพธ์ตามรูปภาพด้านล่าง
สำหรับใครที่สนใจ Neo4j สามารถไปลองเล่นได้ที่ Neo4j Aura ได้เลยครับบบ
แหล่งอ้างอิง
- Graph Database Concept, สืบค้นเมื่อ 8 เมษายน 2567 จาก https://neo4j.com/docs/getting-started/appendix/graphdb-concepts