บทความนี้เป็นข้อสงสัยของผู้เขียน และน่าจะเป็นคำถามของใครอีกหลายๆคนเช่นกัน
ผมจึงได้รวบรวมข้อมูลและหาคำตอบในเรื่องนี้
เพื่อนำมาเล่าสู่กันฟัง นำมาให้อ่านกันครับ
ในตอนแรกได้ทำการรวบรวมข้อมูล
แต่ด้วยความหลากหลายของคำตอบมากเกิน
ทำให้ไม่สามารถจะสรุปได้อย่างชัดเจน
ดังนั้น ผมจึงมานั่งคิดว่า เราอยากรู้อะไรกันแน่
จึงได้สรุปออกมา 2 ข้อใหญ่ๆดังนี้
1. เรื่องทั่วไป เช่น ใครพัฒนา พัฒนามาตั้งแต่เมื่อไร ภาษาที่ใช้ เป็นต้น
2. ประสิทธิภาพ เมื่อ RDBMS กับ Graph Database เปรียบเทียบกัน เช่น
- ความเร็วในการประมวลผลกลุ่มข้อมูล
- พื้นในการจัดเก็บ
โดยที่ผู้เขียนจะอ้างอิงจากผลงานวิจัยชื่อ
A Comparison of Graph Database and Relational Database
http://www.cs.olemiss.edu/~ychen/publications/conference/vicknair_acmse10.pdf
ผู้เขียนชื่อ Chad vicnair และคณะอีก 5 คน โดยนำ Mysql และ Neo4j มาเปรียบเทียบกัน
แต่ งานวิจัยตัวนี้ค่อนข้างเก่า เพราะ ถูกเขียนขึ้นในปี 2009 นับจากวันที่เขียนบทความ บทนี้ก็ย้อนไปก็
ประมาณ 7 ปี ถือว่านานพอสมควรเปลี่ยน server ไป 2 รอบ ดังนั้น จะเอาไว้เป็นแนวทาง
และอ้างอิงในปัจจุบันไปด้วย
เรื่องทั่วไป
แรกเริ่มเดิมที RDBMS ได้ถูกนำมาใช้ตั้งแต่ ปี 1970 และนิยมใช้กันจนเป็น
โปรแกรมจัดการฐานข้อมูลที่โด่งดังมากตัวหนึ่ง ได้ถูกนำมาใช้ทางธุรกิจและการศึกษา
(สมัยนี้ก็ยังใช้กันอยู่)
จนกระทั่ง Graph database เริ่มมีเสียงกระซิบในห้องแลป และเริ่ม boomอยู่พักหนึ่ง
ในปี 1990 แต่จนแล้วจนรอด ไม่มีโปรโมเตอร์ช่วย จนเงียบหายไป เพราะช่วงนั้นมี
เทคโนโลยี ตัวหนึ่งที่มาแรง แซงโค้งกว่านั้นก็คือ Html และ Xml
แต่ในยุคนี้ Graph Database เริ่มเข้ามามีบทบาทมากขึ้น เพราะจำนวนข้อมูลที่เพิ่มสูงขึ้นอย่างรวดเร็วมากกว่าในอดีต
เปิดตัวนักชกมุมแดง... MySQL L L L L !
MySQL นั้นถูกผลิตภายใต้บริษัท MYSQL AB ประเทศ สวีเดน มีทั้งแบบฟรีและเชิงธุรกิจ
สามารถแบ่งเป็น 3 กลุ่มได้ดังนี้
version ใช้ฟรี
เวอร์ชันการค้า
และเวอร์ชันที่สนับสนุนกับผลิตภัณฑ์ SAP
ความแตกต่าง คือ version ใช้ฟรี สามารถนำไปใช้งานได้แบบฟรีๆ แต่ขาดการสนับสนุน
หรือช่วยเหลือเมื่อเกิดปัญหา ส่วนแบบเชิงธุรกิจ จะให้บริการเมื่อเกิดปัญหา (ซื้อบริการ)
มี Enterprise , Cluster , Embeded , Community(opensource)
โดยภาษาที่ใช้ร่วมกับ Mysql ได้ คือ Ruby , Python , Php , C++
และยังมี phpmyadmin ช่วยจัดการ แบบ GUI อีกด้วย
ถูกเผยแพร่ ลิขสิทธ์ 2 แบบ ผู้ใช้สามารถเลือกได้ระหว่าง ลิขสิทธิ์ GNU General Public License หรือ Proprietary license
ถูกพัฒนามาจนถึง version 5.1.42 ในปี (2009)
[แต่ในปัจจุบัน พัฒนาจนถึง version 5.5.22 เมื่อวันที่ 22/03/2555 ]
ส่วนใหญ่นิยมใช้กันใน การศึกษาและวิทยาศาสตร์
และเป็นฐานข้อมูลแบบเชิงสัมพันธ์แบบ pureๆ ไม่เจือปน
https://th.wikipedia.org/wiki/Mysql
เป็นไงบ้างครับประวัติของนักชกมุมแดงคราวนี้ มาดูทางฝั่งมุมน้ำเงินกันบ้าง
เปิดตัวนักชกมุมน้ำเงิน.. NEO4J J J J!
NEO4J จี ถูกพัฒนา โดย บริษัท Neo Technology ใน sanfrancisco bay US และ Malmo สวีเดน
ในด้านลิขสิทธิ์จะใช้ GPL3 license เป็น OpenSource "community edition " และ version High availability ลิขสิทธิ์ภายใต้ Affero Greneral Public license
Neo4j ออกversion แรกในปี 2003 และมาถึงงานวิจัยที่จะทดสอบนี้ version 1.0-b11ในปี 27/12/2552
แต่ในปัจจุบัน เป็น version 2.3.3 เมื่อไม่นานมานี้เอง (24/03/2016)
Neo4j ในยุคแรกๆนั้น เป็น OpenSource และเริ่มจะเป็น commercial มากขึ้นจะใช้ ภาษา java ในการเขียน
โปรแกรมเข้าขึ้นฐานข้อมูล
https://en.wikipedia.org/wiki/Neo4j
แม้ขึ้นมูลประวัติจะน้อยไปหน่อย แต่ก็ไม่หวั่นในยุคนี้
หรือดูกันให้ง่าย เข้าไปดูกันที่ ลิ้งด้านล่างได้เลยครับเป็นต่างบอกความแตกต่าง
http://db-engines.com/en/system/MongoDB%3BMySQL%3BNeo4j
จบไปแล้วสำหรับเรื่องทั่วไปที่ได้รวบรวมมา คราวก็มาต่อกันในเรื่อง
ประสิทธิภาพ
จริงๆแล้วตั้งใจจะเอาหัวข้อนี้เป็นหัวข้อหลัก แต่ไม่รู้ประวัติของเทคโนโลยีเลยก็คงจะไม่รู้
แนวโน้มในอนาคต มาเข้าเรื่องกันดีกว่า
เมื่อพูดถึงการเปรียบเทียบประสิทธิภาพ ส่วนใหญ่มักจะทดสอบกันในด้านของเวลา Query ความเร็วในการ Transaction ต่างๆ เช่น READ, WRITE, INSERT, DELETE เป็นต้น ประมาณนี้ จึงมีงานวิจัยในหลายๆ
เรื่องที่นำมาเปรียบเทียบฐานข้อมูลแบบต่างๆ ถ้าหากผู้เขียนจะทดสอบเองในตอนนี้ก็คงจะไม่พร้อมและคงทำ
ไม่ได้ ดังนั้น วิธีที่จะเอาความรู้มาได้ก็ต้องติดตามผลงานวิจัยของ นักวิจัยคนอื่นๆ และเก็บรวบรวมข้อมูล
นำมาวิเคราะห์ หาข้อเท็จจริง หรือ ถ้ามีโอกาสก็อาจจะลองด้วยตัวเองก็ได้ ถ้างานชิ้นนั้นไม่เสียเวลาจนเกินไป
ก็เหมือนอย่างที่ได้กล่าวไปเมื่อตอนต้น บทความนี้ผู้เขียนได้นำงานวิจัยมาอ้างอิงผลการทดสอบ วัตถุประสงค์
ของการเปรียบเทียบระหว่าง Mysql และ Neo4j มีดังนี้
- พื้นที่ในการจัดเก็บ
- ความเร็วในการประมวลผล
- ความง่ายของภาษา
- ความยืดหยุ่น
- ความปลอดภัย
งานวิจัยนี้ได้ออกแบบระบบ ของฐานข้อมูลด้วย Directed Acrylic Graph (DAG) ดังภาพ
พื้นที่ในการจัดเก็บ
ซึ่งได้ออกแบบไว้ แบ่งเป็น Mysql 12 ฐานข้อมูล และ Neo4j ก็ 12 ฐานข้อมูลเช่นเดียวกัน
แต่ละ Table หรือ Node จะต่อกันแบบ DAG โดยมีจำนวนตารางตั้งแต่ 1,000 5,000 10,000 และ 100,000
ตามลำดับ
ซึ่งแต่ละชนิด ในฐานข้อมูลแตกต่างกันตามขนาด มี Integer, Charactor, จำนวน 8k และ 32k
ความแตกต่างของจนาดส่วนใหญ่ Neo4j จะมีขนาดที่มากกว่า ประมาณ 2 เท่าของ Mysql
โดยอุปกรณ์ทดสอบนั้น เครื่องสเปก Operating System - Ubuntu 9.10 CPu- Core 2 Duo 3GHz และ Ram 4 GB
สรุปได้ว่า Neo4j ต้องใช้ปรมาณในการจัดเก็บข้อมูลเพิ่มขึ้น 2 เท่าในหัวข้อนี้
ความเร็วในการประมวลผล
ในการ Query จะถูกออกแบบให้สืบค้นแตกต่างกัน ในการท่องเข้าไปในฐานข้อมูลจะพิจารณา Node ข้อมูล
ที่ได้มาว่ามีประสิทธิภาพขนาดไหน ก็คือถ้าได้ข้อมูลออกมาแบบผิดๆหรือไม่มีประสิทธิภาพก็อาจจะทำให้ข้อมูลอื่นๆ
ผิดไปด้วย
การ query แบบออกเป็น 2 แบบ คือ SQL และ data Query โดย SQL จะไม่สนใจขนาดของ payload แต่
data query สนใจ payload
โดยที่ S4 คือ การท่องเข้าไปในฐานข้อมูลขนาดความลึกเท่ากับ 4 Node ต่อครั้ง
และ S128 ก็ทีละ 128 ต่อครั้ง
จะเห็นว่าฐานข้อมูแบบ Graph จะมีความเร็วในการเข้าถึงข้อมูล ในการสืบค้น จะรวดเร็วกว่า แบบRelational
นี่ถือว่าเป็น ข้อดีของ Graph เพราะข้อมูลยิ่งมากก็จะหาได้ช้าขึ้น แต่ Graph ทำได้
คราวนี้มาดูสรุปผลการทดสอบ ต่างๆกันบ้าง
ด้านความใช้ง่ายของภาษา
RDBMS นั้นใช้ SQL ซึ่งเป็นภาษาที่ใช้งานง่ายกว่า Graph (อันนี้เป็นข้อสรุปจาก เปเปอร์ ส่วนตัวผู้เขียนในข้อนี้ คิดว่า ง่ายกว่า SQL นะเพราะมาเป็นเชิงสัญลักษณ์ ใครอ่าน เห็นก็เข้าใจ) ในการเชื่อมต่อกับ java จะมี API เป็นของตัวเอง
ความง่ายในการสืบค้นข้อมูลในฐานข้อมูล Neo4j มีความง่ายกว่า Mysql ที่จะนำ Mysql มาทำเป็น Graph model เพราะมันมีปริมาณที่มากทำให้เกิดความซับซ้อน เมื่อเทียบกับการใช้ WHERE (ตั้งเงื่อนไข ในการค้นหาข้อมูล) ดังนั้น Graph database มีประสิทธิภาพมากกว่า
ด้านความยืดหยุ่น
Neo4j มีขนาดเล็กและมีประสิทธิภาพใช้ java เป็นการเข้าถึงและมีความเสถียร เมื่อใช้ใน Server ทั้งยังดูแลง่ายและมีความสามารถในระดับ Server มีการขยายตัว ของข้อมูลได้ในทางกว้าง สามารถขยายตัวไปได้เรื่อยๆ ต่างกันที่
Mysql จะต้องการความแน่นอน แต่อย่างไรก็ตาม Mysql ยังคงถูกใช้ในปัจจุบันอยู่
ด้านความปลอดภัย
Mysql ถือว่ามีคนใช้เยอะ จึงทำให้มีคนช่วยคอยสนับสนุนอยู่เบื้องหลัง ในด้านความปลอดภัยซึ่งจะค่อย Pentest ทดสอบระบบ ทำให้ไม่ค่อยน่าเป็นห่วง อย่างเช่น ภาพด้านล่างเป็นการทดสอบ ด้วย Metasploit framework ของผู้เขียนเอง
ไม่สามารถเจาเข้าไปได้ในเบื้องต้น
แต่ส่วน Neo4j ผู้เขียนเองคิดว่ามีความปลอดภัยในระดับหนึ่ง เพราะถูกพัฒนาร่วมกับ Java Framework ซึ่งมีความสามารถในการป้องกันระดับหนึ่งทีเดียว
สามารถอ่านเพิ่มเติมได้ที่ http://neo4j.com/docs/stable/security-server.html
สรุปแล้ว งานวิจัยชุดนี้ได้ถูกเขียนเมื่อ ปี 2552 เมื่อประมาณ 7 ปีที่แล้วดังนั้นการพัฒนามีการเปลี่ยนแปลงไปมาก โดยที่ Mysql ถูกพัฒนาล่าสุดปี 2555 แต่ส่วน Neo4j ยังคงถูกพัฒนาจนถึงปัจจุบัน ถ้าในด้าน Social Network ก็คงหนีไม่พ้นเรื่องกราฟ ดังนั้น จะใช้ฐานข้อมูลแบบไหนก็ขึ้นอยู่เหมาะสมกับงานขนาดไหน