ช่วยเลือกเอ็นจิ้นการเราติ้งที่เหมาะสม


16

ฉันกำลังสร้างระบบการวางแผนเส้นทาง แต่ฉันยังต้องตัดสินใจว่าฉันจะใช้เครื่องมือการกำหนดเส้นทางพื้นฐานอะไร จนถึงตอนนี้ฉันได้พบ pgrouting และ neo4j

ฉันมีเครือข่ายเส้นทางในฐานข้อมูล postgresql / postgis (นำเข้าจาก Shapefile) ฉันได้ทำแบบสอบถามเพื่อแยกโหนด (จุดสิ้นสุดของวิธีที่คุณต้องตัดสินใจว่าทิศทางใดที่จะไปหรือสิ้นสุดที่ตาย) และเพื่อแยกขอบ (มักทำโดยวิธีติดต่อกันหลายวิธี) ขอบทั้งหมดของฉันเป็นแบบสองทิศทาง

เป้าหมายหลักของฉันคือการคำนวณเส้นทางในเครือข่ายนี้โดยใช้อัลกอริทึม A-star โดยที่ distance = cost

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

  • การจัดเรียงจะตอบสนองความต้องการของฉันได้หรือไม่
  • มันเร็วพอสำหรับการสืบค้นแบบทันทีหรือไม่ (มากกว่า + -2000 โหนด, +4000 ขอบ)? โดยปกติจะเป็นไม่กี่มิลลิวินาทีสำหรับ A-star แต่ฉันไม่แน่ใจเกี่ยวกับการดำเนินการนี้ใน sql
  • pgrouting A-star ให้รายการโหนดและขอบให้ฉันหรือไม่?
  • ในตัวอย่างส่วนใหญ่ฉันเห็นเกี่ยวกับการ pgrouting ฉันสังเกตเห็นมักจะมีรายการคำสั่งหลังจากการคำนวณเส้นทาง (เช่น "เมื่อเลี้ยว X ทางซ้าย ฯลฯ ") pgrouting ผลิตสิ่งนี้หรือเป็นสิ่งนี้จากระบบอื่นหรือไม่?

หวังว่าบางคนสามารถให้ข้อมูลบางอย่างแก่ฉันเกี่ยวกับระบบที่จะเลือก Neo4j, pgrouting หรือระบบอื่น ๆ


3
ฉันคิดว่าอัลกอริธึมการกำหนดเส้นทางส่วนใหญ่ไม่ทำงานด้วย "ความรู้สึกของรูปทรงเรขาคณิต" แทนการคำนวณคุณลักษณะทางเรขาคณิตและใช้เป็นค่าใช้จ่าย (เช่นการวัดระยะทางของรูปหลายเหลี่ยม) ฉันไม่เคยใช้ Neo4j แต่มันดูมีความสามารถจริงๆและฉันอาจจะใช้มันในไม่ช้า ฉันเพิ่งดูที่เอกสารและมันเป็นไปได้ที่จะใช้ A-Star: docs.neo4j.org/chunked/stable/graph-algo.html docs.neo4j.org/chunked/stable/ … pgRouting ก็มีความสามารถเช่นกัน ฉันเป็นแฟนตัวยงของมัน มันน่าสนใจที่จะเปรียบเทียบประสิทธิภาพของโซลูชันทั้งสองนี้
Allan Adair

ก่อนอื่นฉันขอแนะนำให้ดูที่urbansimรูปแบบการใช้ที่ดิน opensource สำหรับคำถามเกี่ยวกับการกำหนดเส้นทางของคุณหากนี่คือการวางแผนแอปพลิเคชันฉันขอแนะนำให้ดูซอฟต์แวร์เช่น TransCAD, CUBE, PLANAR หรือ EMME / 2 ก่อนเพื่อการใช้งานและอินเทอร์เฟซผู้ใช้ พวกเขามักจะแจกซีดีสาธิตซอฟต์แวร์ 1 ชั่วโมงหรือ 2 ชั่วโมง (ซอฟต์แวร์ที่คุณสามารถใช้งานได้หนึ่งหรือสองชั่วโมงเพื่อให้ได้ความรู้สึก) หากคุณต้องการสร้างบางสิ่งบางอย่างสำหรับการใช้งานออนไลน์หรือใช้เดสก์ท็อปให้ดูที่ pgRouting อย่างไรก็ตามจากประสบการณ์บางครั้งมันไม่ง่ายอย่างที่เวิร์กช็อป / บทช่วยสอนนำเสนอ
dassouki

ฉันกำลัง pgrouting กับดาวทำงานและมันยอดเยี่ยม! มันตอบว่าใช่ในคำถาม 3 ข้อแรกของฉัน ฉันยังสงสัยว่ามีบางคนที่นี่รู้อะไรเกี่ยวกับการสร้างเส้นทางการนำทาง verbose มีเครื่องมือบางอย่างที่ร่วมมือกับ pgrouting ที่สร้างเส้นทางแบบละเอียด ("หลังจากเลี้ยวซ้าย 200 ม. และอื่น ๆ ") จากผลลัพธ์ของเส้นทางที่คำนวณได้หรือไม่?
mrg

คำตอบ:


8

ขณะนี้ฉันกำลังสำรวจปัญหาเดียวกันกับคุณเพื่อจุดประสงค์ในการวิจัย ก่อนที่ฉันจะเริ่มทดสอบฐานข้อมูลทั้งสองนี้ฉันมีข้อสันนิษฐานเดียวกับคุณ ฐานข้อมูลกราฟ Neo4j นั้นจะเป็นทางออกที่สมบูรณ์แบบสำหรับปัญหาประเภทนี้ และบางส่วนมันเป็น แต่มีปัญหามากมาย

ปัญหาแรกคือการใช้งาน A-Star หากคุณใช้ฐานข้อมูลแบบฝังตัวไม่ใช่ผ่าน REST API (เซิร์ฟเวอร์) หากคุณต้องการใช้ Neo4j กับ REST API สนับสนุน Dijkstra algorithm เท่านั้น ปัญหาที่สองคือข้อกำหนดด้านหน่วยความจำของฮาร์ดแวร์สำหรับ Neo4j สำหรับการกำหนดเส้นทาง (Dijkstra) บนเครือข่าย "ใหญ่" คุณต้องใช้ RAM จำนวนมาก สำหรับเครือข่ายขนาดใหญ่ฉันหมายถึงบางอย่างเช่นขนาดของฐานข้อมูลถนนOSMของเยอรมนี ฉันได้ทำการทดสอบบนเซิร์ฟเวอร์ RAM ขนาด 6GB (นั่นคือทั้งหมดที่ฉันมีในปัจจุบัน) และสามารถกำหนดเส้นทางเครือข่ายขนาดเล็กได้โดยไม่มีข้อผิดพลาดข้อยกเว้น OutOfMemory เครือข่าย "เล็ก" ในกรณีทดสอบของฉันเป็นตัวอย่างเช่นฐานข้อมูลถนน OSM สำหรับออสเตรียหรือโครเอเชีย ข้อความค้นหาที่เกิดขึ้นพร้อมกันฉันยังไม่ได้ทดสอบกับ Neo4j

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

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

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

เพื่อตอบคำถามคุณ:

  • ใน pgRouting คุณไม่ต้องกังวลเกี่ยวกับการติดตั้ง AStar ใน sql ที่นำมาใช้แล้ว
  • ใช่ pgRouting สามารถให้รายการของโหนดและขอบ
  • ฉันไม่คิดว่า pgRouting สามารถให้ข้อมูลดังกล่าวแก่คุณโดยไม่ต้องมีการแก้ไขที่กำหนดเอง แต่บางทีฉันผิดอาจมีบางคนทำเช่นนี้และสามารถช่วยคุณได้มากขึ้นเกี่ยวกับคำถามนี้

ฉันไม่ทราบว่ามันจะช่วยให้คุณโดยตรง แต่อย่างใดอย่างหนึ่งของเซิร์ฟเวอร์ที่เร็วที่สุดในเส้นทางที่ฉันพบคือosm2po มันทำงานกับชุดข้อมูล OSM และค่อนข้างเร็ว ปัจจุบันมีการใช้งาน dijkstra เท่านั้น แต่ผู้พัฒนาประกาศ AStar ด้วย ฉันหวังว่าสิ่งเหล่านี้จะช่วยคุณได้ :)


เป็นการดีที่จะได้รับคำตอบจากผู้ที่ทดสอบทั้งสองระบบจริง ๆ ในขณะเดียวกันฉันมีประสบการณ์มากขึ้นกับ pgrouting ฉันสังเกตเห็นว่าการ pgrouting สร้างกราฟทั้งหมดสำหรับแต่ละข้อความค้นหาและทำให้ค่อนข้างช้าสำหรับเครือข่ายขนาดใหญ่ (ขนาดเยอรมนี) ดังนั้นฉันไม่เห็นสาเหตุที่การเริ่มต้นใหม่จะต้องใช้หน่วยความจำน้อยกว่า Neo4j ความพยายามครั้งต่อไปของฉันคือการทำให้กราฟคงที่ทั้งในหน่วยความจำและเส้นทางบนนั้น (ด้วย neo4j, nx_spatial ฯลฯ ) เพื่อให้แน่ใจว่าการตอบสนองเร็วขึ้นสำหรับการกำหนดเส้นทางตามเวลาจริง
mrg

ใช่ยิ่งกราฟมีขนาดใหญ่ขึ้นความแตกต่างก็มากขึ้นระหว่าง pgrouting และ neo4j อาจเป็นไปได้ว่าถ้าคุณนำกราฟทั้งหมดไปไว้ในหน่วยความจำมากกว่าจะเป็นวิธีแก้ปัญหาที่เร็วที่สุด Neo4j ค่อนข้างเร็วเมื่อโหลดกราฟทั้งหมดลงในหน่วยความจำ ไม่ทราบเกี่ยวกับ nx_spatial ฉันยังไม่ได้ทดสอบ แต่ฉันอาจจะ ฉันเชื่อว่ามันสามารถทำได้ดีกว่า Neo4j แต่วิธีนี้จะดีถ้ามันเป็นที่ยอมรับสำหรับแอปพลิเคชันของคุณ
Mario Miler

1
@mrg ไม่แน่ใจว่ายังคงเป็นปัญหาสำหรับคุณอยู่หรือไม่ แต่มี OSRM (C ++) และ GraphHopper (Java) กราฟขนาดกว้างถึงเวิลด์ไวด์สกรีนและอื่น ๆ เช่น GraphHopper ใช้พื้นที่น้อยกว่า 1gb สำหรับประเทศเยอรมนี (ที่ซึ่งฉันเป็นผู้เขียน)
Karussell

Karussell ขอบคุณสำหรับข้อมูล! ฉันพบ OSRM แล้ว แต่ GraphHopper เป็นของใหม่สำหรับฉัน
mrg

0

คุณสามารถดูแพ็คเกจ RW Net 4 ของเรา (www.routeware.dk) มันสามารถทำการคำนวณเส้นทางที่สั้นที่สุดโดยใช้ A * โดยตรงจากไฟล์ SHP แพ็คเกจพื้นฐานที่€ 500 นั้นเพียงพอสำหรับความต้องการของคุณ


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