Skip to main content
0
Back-End DeveloperDevInit

เริ่มต้น GraphDB ด้วย Neo4j

สวัสดีครับ วันนี้ผมจะพาไปทำความรู้จักกับฐานข้อมูลประเภทกราฟด้วย 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

ผลลัพธ์ที่ได้จากการสร้าง Node

เมื่อเลือก Property keys เป็น born และ name จะได้ผลลัพธ์เป็น born : 1996 และ name : “Tom Hanks” ตามรูปภาพด้านล่าง

ตัวอย่างผลลัพธ์จากการเลือก Property keys
CREATE ()-[:ACTED_IN {roles: ['Forrest']}]->()

Cypher ใช้สร้าง Relationship ACTED_IN โดยมี 1 Properties คือ roles:[‘Forrest’] เมื่อสร้างแล้วจะได้ผลลัพธ์ตามรูปภาพด้านล่าง

ผลลัพธ์จากการสร้าง Relationships

เมื่อเลือก Relationships ACTED_IN จะได้ผลลัพธ์ตามรูปภาพด้านล่าง

รูปภาพแสดง 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 เพิ่มเข้ามาตามรูปภาพด้านล่าง

ผลลัพธ์จากการรัน Cypher

เมื่อเลือกดู Relationships ACTED_IN และ DIRECTED ระหว่าง Person และ Movie จะได้ผลลัพธ์ตามรูปภาพด้านล่าง

รูปภาพแสดง Relationship ระหว่าง Person และ Movie

สำหรับใครที่สนใจ Neo4j สามารถไปลองเล่นได้ที่ Neo4j Aura ได้เลยครับบบ

แหล่งอ้างอิง

  1. Graph Database Concept, สืบค้นเมื่อ 8 เมษายน 2567 จาก https://neo4j.com/docs/getting-started/appendix/graphdb-concepts
อนุชิต รักษาพล

Author อนุชิต รักษาพล

Software Developer

More posts by อนุชิต รักษาพล

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า