/* scrip for google analytic */

Ads 468x60px

วันจันทร์ที่ 18 เมษายน พ.ศ. 2559

[Neo4j] สรุปการประยุกษ์ใช้ Cypher ร่วมกับ Graph Data Modeling เพื่อความเข้าใจที่มากขึ้น



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

สามารถเข้าไปอ่านเต็มๆได้ที่ http://neo4j.com/developer/guide-data-modeling/

ในบทความนี้ลองมาทบทวน ให้เข้าใจมากขึ้นกับการประยุกษ์ใช้ Cypher 
ให้มากขึ้นอีกสักนิดนึงกับทฤษฎีเล็กๆน้อยๆกันสักหน่อย

หลังจากที่ได้ทำความรู้จัก กับ Cypher พื้นฐานกันไปแล้ว พอจะเห็นได้จากการปฎิบัติกับคำสั่งเบื้องต้นกันไปแล้วนะครับ



ลองมาพิจารณา กับประโยคด้านล่าง

Two peopleJohn and Sally, are friends. Both John and Sally have read the book,Graph Databases.

เราสามารถจับเอาประโยคดังกล่าว มาแปลงเป็นส่วนประกอบต่างๆใน Graph Database อย่างไรได้บ้างกันครับ

มาทบทวนกันหน่อย

Node 

หน่วยที่เป็นพื้นฐานที่สุดของ Graph จริงๆแล้ว คือ Node และ Relationship
ใน Neo4j ทั้งสองอย่างที่ได้กล่าวไป สามารถมี Properties เป็นของตัวเอง
Node บ่อยครั้งมักจะแทน Entity แต่ขึ้นอยู่กับ Ralationship 
ส่วนที่แยกออกมาจาก Properties คือ Label

Node สามารถ มี Label หลาย Label หรือไม่มีก็ได้ ดังภาพด้านล่าง




เราสามารถระบุ Node เป็น Entity โดยการดึง concept ที่ได้กล่าวไว้ ดังนั้นในกรณีนี้สามารถระบุได้ว่า

Node 

  • John
  • Sally
  • Graph Databases


Label

เป็นชื่อของโครงสร้าง Graph ก็คือเป็นกลุ่ม Node ที่อยู่ใน Set เดียวกัน
ทุก node  ที่ถูกตั้งชื่อ Node เหมือนกันจะ เป็น Node ที่อยู่ใน St ที่เหมือนกัน

ในการ Query ในฐานข้อมูลที่มีจำนวนมาก สามารถทำงานร่วมกับ กลุ่ม Set แทนจำนวนโหนดทั้งหมดของ Graph ได้ ดังภาพด้านล่าง

ในขั้นแรกจะต้องระบุ กฎให้กับ Object หรือวัตถุ เสียก่อน เช่น John และ Sally และ Graph Database เรารู้อยู่แล้วว่า ในประโยคดังกล่าว มีความแตกต่างของ ชนิดอยู่คือ 

  • Person
  • Book


เราจึงสามารถระบุ Node และ Label ได้ว่า John และ Sally เป็น Person 
และ Graph Database คือ Book


Relationship 

คราวนี้มาดูเรื่อง Relationship กันบ้าง 
เราสามารถสร้างความสัมพันธ์ ระหว่าง Node ได้ดังนี้

  • John is a friend of Sally
  • Sally is a friend of John
  • John has read Graph Databases
  • Sally has read Graph Databases
ตอนนี้เราสามารถอธิบาย ขอบเขตของ Node กับ Label ได้แล้วสามารถเชื่อมความสัมพันธ์ ระหว่าง
Node เข้าด้วยกันได้จากประโยคดังกล่าว สามารถจับคู่ ที่ Label เป็น Person ด้วยกัน โดยคำว่า Friend of

และจับคู่ที่ไม่ใช่ กลุ่มเดียวกัน ที่ Label คือ Book กับ Person ด้วยคำว่า has Read

เราก็จะได้ Model ดังภาพด้านล่าง


หลังจากที่ได้ผ่านกระบวนการสร้าง Data Model จากพื้นฐานในเรื่อง Graph เพื่อเชื่อมระหว่าง
Person และ Book เข้าด้วยกัน หลังจากนี้ เราสามารถที่จะนำ Data model มากำหนดข้อมูล
ให้สามารถ Implement สามารถที่เราต้องการได้ 

แต่คำถามคือ จะทำอย่างไรถึงจะรู้ได้ละว่าจะต้องมีข้อมูลอะไรบ้าง

ไม่ยาก คำตอบก็คือ การตั้งคำถาม

โดยเริ่มตั้งคำถามจากสิ่งที่เราอยากรู้ 

  • When did John and Sally become friends?
  • What is the average rating of the book Graph Databases?
  • Who is the author of the book Graph Databases?
  • How old is Sally?
  • How old is John?
  • Who is older, Sally or John?
  • Who read the book Graph Databases first, Sally or John?
เราก็จะได้ต้องข้อมูลมาใส่ได้อย่างสมบูรณ์ดังภาพด้านล่าง


จากนั้นก็นำ Cypher มาหาคำตอบที่เราต้องการ

// Create Sally
CREATE (sally:Person { name: 'Sally', age: 32 })

// Create John
CREATE (john:Person { name: 'John', age: 27 })

// Create Graph Databases book
CREATE (gdb:Book { title: 'Graph Databases',
                   authors: ['Ian Robinson', 'Jim Webber'] })

// Connect Sally and John as friends
CREATE (sally)-[:FRIEND_OF { since: 1357718400 }]->(john)

// Connect Sally to Graph Databases book
CREATE (sally)-[:HAS_READ { rating: 4, on: 1360396800 }]->(gdb)

// Connect John to Graph Databases book
CREATE (john)-[:HAS_READ { rating: 5, on: 1359878400 }]->(gdb)



จากคำสั่งในการสร้าง Node แนะนำว่าให้สร้างพร้อมกันหรือเขียนคำสั่ง สร้าง Node และ Relationship ให้ครบก่อนจะ Execute

ก็จะได้ ความสัมพันธ์ในรูปแบบ GUI ด้านล่าง





When did John and Sally become Friends?




What is the average rating of Graph Databases?



Who are the authors of Graph Databases?




How old is Sally?




How old is John?




Who is older, Sally or John?


Who Read Graph Databases First, Sally or John?


เป็นอย่างไรกันบ้างครับ

สามารถนำไปประยุกษ์กันได้แล้วนะครับ

 
 
Blogger Templates