แพลตฟอร์มใดสำหรับฐานข้อมูลคณิตศาสตร์ขนาดใหญ่ที่ใช้บันทึก


11

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

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

ข้อสังเกตส่วนใหญ่จะอ่านจากไฟล์ข้อความ ในแต่ละเร็กคอร์ดจะมีตำแหน่งกริด (จำนวนเต็ม 2 x) (แถวและคอลัมน์) ระดับพื้นดิน (จุดลอยตัว) และรหัสข้อมูลสตริงต่างๆ (อาจรวมได้สูงสุด 30 อักขระ)

กริดอาจมีประมาณ 10,000 แถว x 10,000 คอลัมน์ ไม่ใช่ทุกตำแหน่งบนกริดที่จะมีการบันทึกในการสำรวจแต่ละครั้ง แต่โดยทั่วไปจะมีการบันทึกได้มากถึงร้อยรายการ ตำแหน่งกริดจำนวนมากจะไม่มีการบันทึกเลย (ไซต์จะไม่เป็นรูปสี่เหลี่ยมที่สมบูรณ์แบบ)

ฉันต้องการค้นหาระเบียนแยกข้อมูลและทำการคำนวณเช่นคำนวณระดับพื้นดินต่ำสุดหรือสูงสุดสำหรับตำแหน่งกริดแต่ละแห่ง ฉันค่อนข้างมั่นใจว่าฉันจะมีความสามารถในการเขียนโปรแกรมนี้ค่อนข้างง่ายในภาษาเช่น FORTRAN, BASIC หรือ C โดยใช้อาร์เรย์ องค์ประกอบอาร์เรย์มากมายจะว่างเปล่า แต่และฉันเดาว่านี่ไม่ใช่วิธีที่ถูกต้องในการทำและฐานข้อมูลขนาดใหญ่เช่นนี้ต้องการเครื่องมือพิเศษที่ฉันจะต้องเรียนรู้วิธีใช้

ฉันกำลังคิดถึงตัวเลือกที่เป็นไปได้สำหรับแพลตฟอร์ม -

  1. ใช้โปรแกรมฐานข้อมูล ฉันไม่คุ้นเคยกับความสามารถของสิ่งเหล่านี้ที่มีประสิทธิภาพ แต่ฉันคิดว่าพวกเขาจะมีค่าใช้จ่ายจำนวนมากกับ GUI

  2. ใช้ SQL หรือไม่ สิ่งนี้ฉันไม่รู้มาก แต่ดูเหมือนจะเป็นภาษาสำหรับฐานข้อมูล ฉันมักจะใช้ภาษาที่จำเป็นมากกว่าที่จะเปิดเผยและตามที่ฉันเข้าใจจากวิกิพีเดียว่า SQL เป็นสิ่งที่เปิดเผยฉันรู้สึกประหม่าเล็กน้อยต่อการเปลี่ยนแปลง ฉันไม่เข้าใจกระบวนการใช้งานอย่างสมบูรณ์ มีคอมไพเลอร์ที่สร้างโปรแกรมคอนโซลหรือไม่? ฐานข้อมูลถูกเก็บไว้ในดิสก์หรือไม่? ขออภัยสำหรับคำถามโง่ ๆ

  3. ใช้ API เช่น c-treeACE หรือไม่ ฉันคิดว่านี่อาจเป็นวิธีที่จะให้ความคุ้นเคยกับภาษา "ทำสิ่งนี้จากนั้นทำเช่นนั้น" (น่าเสียดายที่นี่เป็นวิธีที่ฉันคิดว่าเป็นวิศวกร!) แต่ฉันหวังว่าหน่วยความจำเบื้องหลังและการจัดการการประมวลผลที่นำเสนอโดย API จะดีกว่าสิ่งที่ฉันสามารถทำได้ด้วยอาร์เรย์ขนาดใหญ่

  4. หรือฉันสามารถทำมันด้วยภาษาที่มุ่งเน้นวัตถุและปล่อยให้คอมพิวเตอร์กังวลเกี่ยวกับข้อกำหนดในการเก็บ เช่นถ้าฉันเก็บบันทึกเป็นวัตถุด้วยวิธีการและคุณสมบัติที่จะช่วยให้ฉันได้รับผลลัพธ์ที่ฉันต้องการจากแต่ละระเบียน - มันจะเป็นโปรแกรมขนาดใหญ่ป่องเมื่อเทียบกับ 3)

มีแนวโน้มที่จะมีการบันทึกหลายร้อยล้านรายการและฉันต้องการที่จะค้นหาและประมวลผลพวกเขาในไม่กี่นาทีไม่ใช่ชั่วโมง (โดยเฉพาะอย่างยิ่งวินาที!) บนพีซีที่ใช้ Windows รุ่นใหม่ ในการเป็นเหมืองที่เฉพาะเจาะจงมากขึ้นคือโปรเซสเซอร์ i7 ที่มี 6Gb ram และ 120Gb SSD ที่ใช้ Windows 7 64 บิต

หวังว่าใครบางคนมีเวลาที่จะแบ่งปันคำสองสามคำของภูมิปัญญากับมือใหม่


หากคุณสามารถออนไลน์ได้ระหว่าง 1 ถึง 5 ในตอนบ่าย (หรือหลังจากนั้นจะดีมาก) เรายินดีที่จะให้คุณแชทเพื่อช่วยคุณในเรื่องนี้ chat.stackexchange.com/rooms/179/the-heap (อาจมีเพื่อนบริอยู่ก่อนหน้านั้นแน่นอน) ฉันมีความคิดเฉพาะเช่นระบบข้อมูลทางภูมิศาสตร์อาจช่วยได้
jcolebrand

คำตอบ:


9

มีตัวเลือกมากมายและโปรดอย่า จำกัด ตัวเองกับคำตอบของฉันที่นี่ โดยเฉพาะอย่างยิ่งคุณอาจพบว่าฐานข้อมูลอาเรย์ดั้งเดิมมีประโยชน์ คำตอบของฉันจะเกี่ยวกับคำถามของคุณเฉพาะในฐานข้อมูล SQL

ฟังดูเหมือนว่านี่เป็นคำถามเกี่ยวกับข้อมูลเชิงพื้นที่ ในความเป็นจริงแล้วฐานข้อมูลบนฐานข้อมูล SQL นั้นใช้ค่อนข้างดี แต่นี่ก็เป็นฟิลด์ผู้เชี่ยวชาญภายในฐานข้อมูล

ในบรรดาฐานข้อมูล SQL ในพื้นที่นี้ PostgreSQL ที่มีส่วนเสริม PostGIS ถือเป็นหนึ่งในสิ่งที่ดีที่สุด ถ้าฉันเป็นคุณนี่คือที่ฉันจะเริ่ม ข้อได้เปรียบหลักของ SQL คือช่วยรักษาความยืดหยุ่นในการใช้ข้อมูลของคุณเพื่อการใช้งานที่คุณยังไม่ได้คิด การทำเช่นนี้ด้วยการสนับสนุนเชิงพื้นที่ทางภูมิศาสตร์ที่ดีหมายความว่าคุณสามารถคำนวณระยะทางข้ามพื้นที่ขนาดใหญ่โดยไม่ต้องกังวลเกี่ยวกับความเฉพาะเจาะจงของ trig

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

ดังนั้น PostGIS อาจยังคงทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยอนุญาตให้ใช้การแทนค่าและการคำนวณบนระบบพิกัดเรขาคณิตสามมิติและ 4 มิติ

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

ผลกระทบของภาษาที่ประกาศ

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

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

ความแตกต่างใหญ่ที่เกิดขึ้นคือการที่เคียวรี SQL แบบยาวนั้นสามารถดีบักได้ง่ายกว่ารูทีนย่อยที่มีความจำเป็นแบบยาวเพียงเพราะว่ามันสามารถแคบลงได้อย่างรวดเร็วซึ่งในการสืบค้นนั้นเกิดความผิดปกติขึ้น

มันจะทำงานอย่างไร

โอกาสคือถ้าคุณไปเส้นทางนี้คุณจะมีฐานข้อมูลและโปรแกรมที่เขียนด้วยภาษาที่คุณเลือก โปรแกรมจะส่งข้อความค้นหาไปยังฐานข้อมูลและรับคำตอบกลับ นอกจากนี้คุณยังสามารถ (ใน PostgreSQL และฐานข้อมูลเชิงสัมพันธ์อื่น ๆ อีกมากมาย) ใส่ข้อความค้นหาของคุณลงในฟังก์ชั่นซึ่งสามารถเรียกใช้โดยแอปพลิเคชันซึ่งให้ส่วนต่อประสานที่จำเป็นหรือใช้งานได้มากกว่า ข้อมูลจะถูกเก็บไว้ในดิสก์และเข้าถึงได้จากซอฟต์แวร์แยกต่างหากกว่าโปรแกรมของคุณ คุณสามารถเชื่อมต่อกับโปรแกรมอื่น (จาก MS Access ไปยัง pgAdmin) และเรียกใช้แบบสอบถามหรือสร้างรายงาน

ในสาระสำคัญคุณสามารถคิดว่า RDBMS เป็น "เอ็นจินคณิตศาสตร์" ซึ่งจัดการข้อมูลของคุณและโปรแกรมของคุณจะโต้ตอบกับมันเพื่อทำสิ่งที่คุณต้องการ


1
ขอโทษที่ตอบช้าฉันยุ่งมาก ฉันขอขอบคุณคำแนะนำโดยละเอียดของคุณ ฉันเริ่มด้วย SQL เรียนรู้ด้วยหนังสือ O'Reilly และเพิ่งดาวน์โหลด mySQl ตามที่หนังสือแนะนำ ฉันจะพิจารณาการใช้ส่วนขยาย postgreSQL GIS และอาจเข้าถึง SQL จาก C # ในภายหลัง ขอบคุณอีกครั้งฉันจะกลับมาอีก!
user19109
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.