ก้าวแรกสู่ Neo4j และ Graph Database

ครอบคลุม Cypher: Query Language ของ Neo4j

Tanabodin Kamol
iCreativeSystems
Published in
3 min readJan 16, 2019

--

Neo4j เป็นฐานข้อมูลแบบ NoSQL ในรูปแบบ Graph database ถ้าถามว่า Graph database คืออะไร? ก็สามารถไปอ่านมาก่อนได้ตามลิ้งข้างต้นเลยนะครับ

เริ่มต้นที่การติดตั้ง

เราสามารถไปโหลดตัว Neo4j ได้จากลิ้งนี้ Neo4j Download Center โดยเราจะเลือกโหลดตัว Community Server แล้วก็เลือกตาม OS ที่เราใช้งานอยู่ได้เลย ส่วนตัวของผู้เขียนจะใช้เป็น Linux

เมื่อโหลดเสร็จเรียบร้อยแล้ว ก็ให้เราแตกไฟล์และวางไฟล์ไว้ในตำแหน่งที่ต้องการ directory ระดับบนสุดเราจะเรียกว่า NEO4J_HOME

เปิดหน้า terminal/shell ของเราขึ้นมาเพื่อใช้ Neo4j

เปิดแบบ Console application ใช้คำสั่ง

เปิดแบบ Backgroung process ใช้คำสั่ง

เรียบร้อยแล้วที่นี้เราก็ลองไปเปิด http://localhost:7474/ ใน browser ของเรา แล้ว login ด้วย username neo4j password neo4j

เปิด Neo4j บน browser

หลังจากเราเปิดเข้ามา เปลี่ยนรหัสเรียบร้อยจะได้หน้าตามรูปที่แสดงข้างล่างนี้

หน้าแรกหลังจากเรา login เข้าสู่ระบบ

Cypher คืออะไร?

เราจะมาเริ่มต้นการใช้ Neo4j ด้วยการอธิบายเกี่ยวกับ Cypher ซึ่งเป็นภาษาที่ใช้สำหรับ query คุณควรมีความคุ้นเคยกับแนวคิดของ Graph database และ คุณสมบัติของ Graph model อ่านได้จาก Graph database คืออะไร?

เนื่องจาก Cypher ได้ออกแบบออกมาเพื่อให้สามารถอ่านได้โดยง่าย เราต้องลองดูข้อมูลจากกราฟข้างล่างนี้ เราจะสามารถเข้าใจมันได้ว่าอย่างไร (คำตอบเขียนไว้ใต้รูป)

คนที่ชื่อว่า Jennifer ชอบเทคโนโลยีที่เป็น Graphs เป็นเพื่อนกับ Michael ตั้งแต่ปี 2018 รวมถึง Jennifer ทำงานที่บริษัท Neo4j

รูปแบบของ Cypher จะสร้างตามโครงสร้างความคิดของมนุษย์เรา ทำให้ง่ายต่อการทำความเข้าใจ

รูปแบบของ Node ใน Cypherรวมถึง

ให้เราจำไว้ว่า Node จะเป็นเหมือน objects ที่ใช้เก็บข้อมูลของเรา เมื่ออยู่ใน database จะถูกแสดงเป็นลูกกลม ๆ

การใช้ตัวแปรกับ Node จะใช้เมื่อเราต้องการอ้างอิงถึง Node ของเราในภายหลัง สามารถให้ชื่อของ Node ได้โดยการใช้ (p) แต่ในความเป็นจริงเราควรจะใช้ (person) หรือ (company) เพื่อให้เข้าใจได้ง่ายเหมือนกับการเขียนโปรแกรมภาษาอื่น ๆ หากเราไม่ต้องการค่าที่ส่งกลับมา เราอาจไม่ระบุชื่อให้กับ Node นั้น ๆ โดยใช้วงเล็บเปล่า () ซึ่งเราจะไม่สามารถได้รับค่าที่ส่งกลับมาได้

การติด label ให้กับ Node หากเราย้อนขึ้นไปดู Graph model จะเห็นว่า Node มีการจัดกลุ่มกันอยู่ด้วยการติด label ให้ Node นั้น ๆ การติด label จะทำให้เราสามารถระบุประเภทเพื่อค้นหาหรือสร้างได้ ตามตัวอย่าง model ข้างบนPerson, Technology, Company จะเป็น label

ตัวอย่างการใช้ Node ใน Cypher ให้ใช้กราฟข้างบนเพื่อดูว่าเราจะสามารถระบุ Node ของเราได้อย่างไร

รูปแบบของ Relationships ใน Cypher

เพื่อให้เราสามารถออกแบบและใช้งาน Graph database ได้อย่างเต็มประสิทธิภาพเราจำเป็นต้องมี relationship เชื่อมระหว่าง Node ของเรา การสร้าง relationship เราจะใช้วงเล็บเหลี่ยม [] เชื่อมกับ Node ในรูปแบบ ()-[]->() ก็จะเป็น relationship แบบมีทิศทางหรือเราจะไม่กำหนดทิศทางของ relationship ก็ได้ซึ่งก็จะมีความยืดหยุ่นในการค้นหาข้อมูล

ตัวอย่างการใช้ Relationship ใน Cypher ให้ใช้กราฟข้างบนเพื่อดูว่าเราจะสามารถระบุ Node ของเราได้อย่างไร

พิมพ์คำสั่ง Cypher ในช่องนี้

แต่เราจะเห็นว่า Node และ relationship ของเรายังไม่มี properties ทำให้ไม่มีการแสดงข้อมูลใด ๆ นอกจาก ID ที่ Neo4j สร้างขึ้นมา โดยถ้าเราต้องการเพิ่ม properties ใน Node หรือ relationship ให้เราเพิ่ม {} แล้วใส่ข้อมูลที่เราต้องการเก็บเข้าไปข้างในได้เลย

ยกตัวอย่างถ้าเราต้องการสร้าง Graph แบบที่ผมยกตัวอย่างมานั้นจะต้องพิมพ์คำสั่งทีละอันตามตัวอย่างข้างล่างนี้

เราก็คงพอเข้าใจคร่าว ๆ แล้ว ว่าคำสั่งต่าง ๆ ใช้ทำอะไรได้บ้าง ทีนี้มาดูกันว่าคำสั่งแต่ละอย่างใช้ทำอะไรได้บ้าง

คำสั่งใน Cypher ที่ควรรู้

CREATE เป็นคำสั่งที่ใช้ในการสร้าง Node และ relationship

MATCH เป็นคำสั่งที่ใช้ในการค้นหา Node หรือ relationship ที่มีอยู่แล้วใน database ถ้าให้เปรียบเทียบกับ SQL ก็จะคล้ายกับ SELECT

DELETE เป็นคำสั่งที่ใช้ลบ Node ออกจาก database แต่หาก Node นั้น ๆ มี relationship เชื่อมกับอีก Node หนึ่งอยู่จะต้องใช้ DETACH DELETE เพื่อลบ relationship ที่เชื่อมโยงกับ Node ที่ต้องการจะลบ

RETURN เป็นคำสั่งที่ใช้ส่งค่ากลับผ่านตัวแปรที่เราอ้างอิงไว้จากคำสั่ง MATCH

การประยุกต์ใช้งานกับ Neo4j Driver

สามารถไปโหลด official driver ได้จาก Neo4j Driver ซึ่งมีให้เราเลือกใช้อยู่ 5 ภาษาคือ C#, Go, Java, JavaScript, Python แต่ในบทความนี้เราจะยังไม่พูดถึง ก็อาจจะเป็นในบทความข้างหน้า

--

--

Tanabodin Kamol
iCreativeSystems

I always self-study about electronic devices and computer programming, So, I will share what I have learned for all of you! Sometime It’s code for Python