ฉันใช้ pgrouting ในฐานข้อมูล postgis ที่สร้างผ่าน osm2pgrouting มันทำงานได้ดีมากในชุดข้อมูลที่มีข้อ จำกัด (วิธี 3.5k เส้นทางที่สั้นที่สุดทั้งหมด A * ค้นหา <20 ms)
อย่างไรก็ตามเนื่องจากฉันได้นำเข้ากล่องขนาดใหญ่กว่า (122k วิธี) จาก europe.osm ประสิทธิภาพการทำงานก็ลดลงมาก (เส้นทางที่สั้นที่สุดมีค่าใช้จ่ายประมาณ 900ms)
ฉันคิดว่าการใช้ A * ส่วนใหญ่ของขอบเหล่านั้นจะไม่เคยถูกเยี่ยมชมเนื่องจากอยู่นอกเส้นทาง
สิ่งที่ฉันได้ทำไปแล้วเพื่อพยายามปรับปรุงความเร็ว:
- วางดัชนีลงในคอลัมน์รูปทรงเรขาคณิต (ไม่มีเอฟเฟกต์ที่เห็นได้ชัดเจน)
- เพิ่มหน่วยความจำของฉันจาก 8GB เป็น 16GB
- เปลี่ยนการตั้งค่าหน่วยความจำ postgresql (shared_buffers, effective_cache_size) จาก (128MB, 128MB) เป็น (1GB, 2GB) (ไม่มีผลที่เห็นได้ชัดเจน)
ฉันมีความรู้สึกว่างานส่วนใหญ่กำลังทำอยู่ในห้องสมุด C Boost ที่ซึ่งกราฟกำลังทำอยู่ดังนั้นการปรับ postgresql ให้เหมาะสมจะไม่ให้ผลลัพธ์ที่ดีกว่า เนื่องจากฉันทำการเปลี่ยนแปลงเล็กน้อยในชุดของแถวที่ฉันเลือกสำหรับ A * สำหรับการค้นหาทุกครั้งฉันกลัวว่าห้องสมุดเพิ่มไม่สามารถแคชกราฟของฉันและต้องสร้างขอบ 122k ทั้งหมดทุกครั้ง (แม้ว่าจะใช้เพียง เซตย่อย จำกัด ทุกคำค้นหา) และฉันก็ไม่รู้เลยว่าจะใช้เวลาเท่าไหร่เมื่อเทียบกับการค้นหาเส้นทางที่สั้นที่สุด
คุณใช้ pgrouting ในชุดข้อมูล OSM 122k หรือมากกว่าหรือไม่ ฉันควรคาดหวังประสิทธิภาพอะไร การตั้งค่าใดที่ส่งผลต่อประสิทธิภาพมากที่สุด