การผสมประเภทรูปทรงเรขาคณิตในหนึ่งตาราง PostGIS


24

ฉันประสบกับปัญหาต่อไปนี้ ฉันต้องย้ายจากฐานข้อมูล Oracle ไปยัง PostgreSQL + PostGIS ปัจจุบันรูปทรงเรขาคณิตทุกประเภททุกประเภทจะถูกเก็บไว้ในตารางเดียวและแต่ละระเบียนจะมีช่อง "ฝา" ซึ่งระบุถึงคุณสมบัติของเลเยอร์เดียวกัน

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


คุณกำลังพูดถึง "ประเภท" ประเภทใด มันคือ POLYGON, LINE และ POINTS หรือไม่? หรือเป็นประเภทเช่น "ถนน" "แม่น้ำ" ฯลฯ ใช่ไหม
Pablo

ฉันหมายถึงประเภทของรูปทรงเรขาคณิตเช่นรูปหลายเหลี่ยมเส้นและคะแนน
drnextgis

คำตอบ:


24

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

http://www.postgis.us/chapter_03_edition_1

จากมุมมองของสถาปัตยกรรม PostGIS ไม่สนใจจริง ๆ ว่าในแบบสอบถามมีการใช้งานหลายประเภท ถ้ามันทำงานได้ดีสำหรับคุณใน Oracle มันจะเหมือนกับว่าไม่มีประสิทธิภาพดีกว่าใน PostGIS

มี 2 ​​เหตุผลในการแยกมัน (และสามารถทำได้ในภายหลังตามต้องการ): 1) ป้องกันผู้คนจากการแทรกประเภทต่าง ๆ ที่คุณไม่ต้องการเช่นคอลเลกชันเรขาคณิตสตริงวงกลมและสิ่งที่ไม่ (ซึ่งคุณสามารถกำหนดข้อ จำกัด ด้วยตนเอง )

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


1
เพื่อประโยชน์ของผู้คนที่กลับมาที่นี่: ใน PostGIS ใน Actions 2nd edition สิ่งนี้ถูกย้ายไปที่ ch 14.
yeedle

11

อันนี้ทำให้ฉันลำบากจริงๆ ฉันเดาว่าเป็นเพราะฉันเห็นไฟล์ CAD จำนวนมากเกินไปที่มีข้อมูลทั้งหมดในหนึ่งเลเยอร์แตกต่างกันไปตามสี

สิ่งที่มันลงมาให้เป็นจริงทางเลือกระหว่างการจัดระเบียบข้อมูลที่เป็นโครงสร้างหรือโดยแอตทริบิวต์

ด้วยตัวเลือกนั้นฉันจะทำการจัดระเบียบข้อมูลของฉันผ่านโครงสร้างข้อมูลเสมอ

สำหรับการเริ่มต้นเมื่อประมวลผลข้อมูลคุณมีห่วงน้อยลงหนึ่งข้าม (เช่นเลือก a, b, c จากตารางที่ id = Xตรงข้ามกับการเลือก a, b, c จากตารางโดยที่ id = X และฝา = Y )

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

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

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


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