การเปรียบเทียบ Neo4j กับเวลาดำเนินการ RDBMS นั้นถูกต้องหรือไม่


10

ความเป็นมา:ต่อไปนี้มาจากฐานข้อมูลกราฟหนังสือซึ่งครอบคลุมการทดสอบประสิทธิภาพที่กล่าวถึงในหนังสือNeo4j ในการดำเนินการ :

ความสัมพันธ์ในกราฟเป็นเส้นทางแบบธรรมชาติ การสืบค้นหรือการข้ามกราฟเกี่ยวข้องกับเส้นทางดังต่อไปนี้ เนื่องจากลักษณะพื้นฐานของเส้นทางที่มุ่งเน้นของ datamodel ส่วนใหญ่ของการดำเนินการฐานข้อมูลกราฟที่อิงเส้นทางนั้นมีความสอดคล้องอย่างมากกับวิธีการจัดวางข้อมูลทำให้มีประสิทธิภาพมาก ในหนังสือ Neo4j in Action ของพวกเขา Partner และ Vukotic ทำการทดลองโดยใช้ relational store และ Neo4j

การเปรียบเทียบแสดงให้เห็นว่าฐานข้อมูลกราฟนั้นเร็วกว่ามากสำหรับข้อมูลที่เชื่อมต่อมากกว่าที่เก็บข้อมูลเชิงสัมพันธ์ส่วนการทดลองและ Vukotic นั้นพยายามค้นหาเพื่อนของเพื่อนในเครือข่ายโซเชียล เมื่อพิจารณาจากคนสองคนที่ได้รับการสุ่มเลือกมีเส้นทางที่เชื่อมโยงพวกเขาซึ่งมีความสัมพันธ์ยาวนานที่สุดถึงห้าครั้ง สำหรับเครือข่ายโซเชียลที่มี 1,000,000 คนโดยแต่ละคนมีเพื่อนประมาณ 50 คนผลลัพธ์แนะนำอย่างยิ่งว่าฐานข้อมูลกราฟเป็นตัวเลือกที่ดีที่สุดสำหรับข้อมูลที่เชื่อมต่อดังที่เราเห็นในตารางที่ 2-1

ตารางที่ 2-1 การค้นหาเพื่อนที่ขยายในฐานข้อมูลเชิงสัมพันธ์กับการค้นหาที่มีประสิทธิภาพใน Neo4j

Depth   RDBMS Execution time (s)    Neo4j Execution time (s)     Records returned
2       0.016                       0.01                         ~2500    
3       30.267                      0.168                        ~110,000 
4       1543.505                    1.359                        ~600,000 
5       Unfinished                  2.132                        ~800,000

ที่ความลึกสอง (เพื่อนของเพื่อน) ทั้งฐานข้อมูลเชิงสัมพันธ์และฐานข้อมูลกราฟทำงานได้ดีพอที่เราจะพิจารณาใช้ในระบบออนไลน์ ในขณะที่แบบสอบถาม Neo4j ทำงานในสองในสามของเวลาที่สัมพันธ์กันผู้ใช้ปลายทางจะสังเกตเห็นความแตกต่างในหน่วยมิลลิวินาทีระหว่างสองคนนั้นแทบจะไม่ ตามเวลาที่เราไปถึงความลึกที่สาม (เพื่อนของเพื่อนของเพื่อน) อย่างไรก็ตามเป็นที่ชัดเจนว่าฐานข้อมูลเชิงสัมพันธ์ไม่สามารถจัดการกับแบบสอบถามในกรอบเวลาที่เหมาะสมอีกต่อไป: สามสิบวินาทีที่ใช้ในการทำให้สมบูรณ์จะไม่สามารถยอมรับได้อย่างสมบูรณ์ สำหรับระบบออนไลน์ ในทางตรงกันข้ามเวลาตอบสนองของ Neo4j นั้นค่อนข้างคงที่: เพียงเสี้ยววินาทีในการดำเนินการค้นหา - เร็วพอสำหรับระบบออนไลน์

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

คำถามคือ:

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

คำตอบ:


8

ดูเอกสารนี้ที่ชื่อว่าAnatomy of Facebookฉันสังเกตว่าค่ามัธยฐานคือ 100 ดูที่พล็อตฟังก์ชั่นสะสมฉันสามารถเดิมพันได้ว่าค่าเฉลี่ยสูงกว่าใกล้ 200 ดังนั้น 50 ดูเหมือนว่าจะไม่เป็นเลขที่ดีที่สุดที่นี่ อย่างไรก็ตามฉันคิดว่านี่ไม่ใช่ประเด็นหลักที่นี่

ปัญหาหลักคือการขาดข้อมูลเกี่ยวกับวิธีการใช้ฐานข้อมูล

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

เพื่อสรุปฉันคิดว่าเกี่ยวกับการทำซ้ำการศึกษาขาดคำอธิบายที่เหมาะสมของวิธีการออกแบบคีมาฐานข้อมูล ฉันไม่คาดหวังว่าฐานข้อมูลจะครองราชาแห่งการสอบสวนดังกล่าวอย่างไรก็ตามฉันคาดหวังว่าด้วยการออกแบบที่ได้รับการปรับแต่งอย่างดี


4

มีวิธีที่ดี / รวดเร็วในการสร้างแบบจำลองกราฟใน RDBMS และวิธีโง่ / ช้า

  • บางคนใช้การจัดทำดัชนีที่ชาญฉลาดและ Procs ที่เก็บไว้แลกเปลี่ยนโหลด CPU และตาราง temp ที่ปรับจูนบนดิสก์ RAM เพื่อความเร็วในการดึงกราฟที่เร็วขึ้น

  • บางคนใช้เส้นทางกราฟที่คำนวณล่วงหน้า (ซึ่งอาจเป็นไปได้น้อยในสถานการณ์เครือข่ายสังคม แต่ในต้นไม้ที่มีโหนดส่วนใหญ่เป็นโหนดใบมันเป็นพื้นที่การแลกเปลี่ยนที่ดีทีเดียว

  • บางคนคำนวณง่ายๆในการวนรอบโดยใช้ตารางชั่วคราวที่ไม่ได้ทำการปรับดัชนี จาก #s ที่แสดงในบทความมีกลิ่นเหมือนสิ่งที่พวกเขาทำ (30 วินาที - ประสิทธิภาพในชุดข้อมูลที่ค่อนข้างเล็ก)

    ตัวอย่างเช่นฉันมีการคำนวณต้นไม้ของตัวเอง

    • มันถูกห่อหุ้มใน proc จัดเก็บสูงปรับ

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

    • ฉันไม่สามารถเข้าถึงเครื่องมือเร่งความเร็วหลักซึ่งเป็นตารางชั่วคราวในดิสก์ RAM

    • ชุดข้อมูลตัวแทนที่ฉันดึงมาซึ่งดูเหมือนว่าค่อนข้างตรงกับของพวกเขาได้รับ 150,000 ทรีย่อยจาก 2.5M โหนดชุดข้อมูลเต็มป่า (ความลึกไม่ จำกัด ของต้นไม้ซึ่งแตกต่างกันระหว่าง 5 และ 15 แต่arity เฉลี่ยน้อยกว่าโหนดที่กำหนดกว่า เพื่อน 50 คนที่อยู่ในการทดสอบ)

    • ฉันปรับไปยังจุดที่แบบสอบถามนี้ ~ 30-45 วินาที แน่นอนที่สุดมันไม่ได้แสดงการชะลอตัวแบบเลขชี้กำลังที่ว่าตัวเลขในคำถามดูเหมือนจะบ่งบอกถึงประสิทธิภาพของ RDBMS ของพวกเขาซึ่งแปลกมากเป็นสองเท่าเนื่องจากไม่มีการเติบโตแบบทวีคูณในชุดผลลัพธ์ (ซึ่งสำหรับฉัน ตารางชั่วคราวจากประสบการณ์ส่วนตัว)

ดังนั้นการเปรียบเทียบนี้อาจไม่ถูกต้องและขึ้นอยู่กับการออกแบบด้าน RDBMS ที่ไม่ดีแม้ว่าตามที่ระบุไว้ในคำตอบก่อนหน้ามันเป็นไปไม่ได้ที่จะตรวจสอบโดยที่พวกเขาเปิดแหล่งข้อมูล 100% ของคำจำกัดความของรหัสและตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.