ฉันอยู่ในกระบวนการออกแบบระบบใหม่สำหรับชุดข้อมูลเชิงพื้นที่ขนาดใหญ่ที่ต้องการประสิทธิภาพการสืบค้นอย่างรวดเร็ว ดังนั้นฉันต้องการดูว่าใครคิดว่าเป็นไปได้หรือมีประสบการณ์ / คำแนะนำเกี่ยวกับ DBMSs ที่เหมาะสมโครงสร้างข้อมูลหรือวิธีการทางเลือกเพื่อให้ได้ประสิทธิภาพตามที่ต้องการในสถานการณ์ต่อไปนี้:
ข้อมูลจะถูกผลิตอย่างต่อเนื่องจากข้อมูลเรดาร์ดาวเทียมที่ผ่านการประมวลผลซึ่งจะครอบคลุมทั่วโลก จากความละเอียดของดาวเทียมและพื้นที่ครอบคลุมของโลกฉันประเมินชุดข้อมูลทั้งหมดเพื่อสร้างมูลค่าที่ 75 พันล้านตำแหน่งโดยสิ้นเชิงในโลก ตลอดช่วงชีวิตของดาวเทียมดวงเดียวเอาต์พุตจะสร้างค่าได้สูงสุด 300 ค่าในแต่ละตำแหน่งเหล่านี้ (ดังนั้นชุดข้อมูลทั้งหมดที่มีค่า> 22 ล้านล้านค่า) นี่เป็นดาวเทียมหนึ่งดวงและมีวงโคจรอยู่หนึ่งวินาทีและอีกสองวางแผนในไม่กี่ปีใหม่ ดังนั้นจะมีข้อมูลจำนวนมาก! รายการข้อมูลเดียวนั้นง่ายมากและจะประกอบไปด้วย (ลองจิจูด, ค่าละติจูด, ค่า) แต่เนื่องจากจำนวนรายการที่ฉันประเมินดาวเทียมหนึ่งดวงเพื่อผลิตสูงสุด 100TB
ข้อมูลที่เป็นลายลักษณ์อักษรไม่ควรต้องมีการอัพเดทเนื่องจากจะเพิ่มขึ้นเมื่อมีการดำเนินการจัดหาดาวเทียมใหม่ ประสิทธิภาพการเขียนไม่สำคัญ แต่ประสิทธิภาพการอ่านมีความสำคัญ เป้าหมายของโครงการนี้คือเพื่อให้สามารถมองเห็นข้อมูลผ่านอินเทอร์เฟซแบบง่ายเช่นเลเยอร์เหนือแผนที่ google ซึ่งแต่ละจุดมีค่าสีตามค่าเฉลี่ยการไล่ระดับสีหรือฟังก์ชันบางช่วงเวลา (สาธิตที่ส่วนท้ายของโพสต์)
จากข้อกำหนดเหล่านี้ฐานข้อมูลจะต้องสามารถปรับขนาดได้และเรามีแนวโน้มที่จะมองหาโซลูชั่นระบบคลาวด์ ระบบจะต้องสามารถจัดการกับข้อความค้นหาเชิงพื้นที่เช่น "points near (lat, lon)" และ "points within (box)" และมีประสิทธิภาพการอ่าน <1s สำหรับการหาจุดเดียวและรูปหลายเหลี่ยมที่มีถึง 50,000 คะแนน (ถึง 200,000 คะแนนน่าจะดีกว่า)
จนถึงตอนนี้ฉันมีชุดข้อมูลทดสอบ ~ 750 ล้านรายการข้อมูลที่ 111 ล้านแห่ง ฉันได้ทดลองใช้อินสแตนซ์ postgres / postGIS ซึ่งใช้งานได้ แต่ไม่มีความเป็นไปได้ที่จะหักอกฉันไม่สามารถทำสิ่งนี้ได้เพื่อรับมือกับการเติบโตของข้อมูล เท่าที่ผ่านมาและด้วยการใช้เศษก็อาจเพียงพอที่จะไต่ระดับด้วยปริมาณข้อมูล เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้เกี่ยวกับ elasticsearch เล็กน้อยดังนั้นความคิดเห็นใด ๆ เกี่ยวกับเรื่องนี้จะเป็นประโยชน์เพราะเป็นเรื่องใหม่สำหรับฉัน
นี่คือภาพเคลื่อนไหวอย่างรวดเร็วของสิ่งที่เราต้องการบรรลุด้วยชุดข้อมูลแบบเต็ม:
gif นี้ (จากการทดลอง postgres ของฉัน) ให้บริการ (6x3) กระเบื้องแรสเตอร์ที่คำนวณล่วงหน้าซึ่งแต่ละแผ่นมี ~ 200,000 คะแนนและใช้เวลา ~ 17 วินาทีเพื่อสร้างแต่ละภาพ โดยการคลิกที่จุดกราฟจะทำโดยการดึงค่าประวัติศาสตร์ทั้งหมดที่สถานที่ที่ใกล้ที่สุดใน <1s
ขอโทษสำหรับการโพสต์ยาวความคิดเห็น / คำแนะนำทั้งหมดยินดีต้อนรับ