พื้นหลัง
ฐานข้อมูลท้องถิ่นมีแถวที่ไม่ซ้ำกันเกือบ 1.3 พันล้านแถว แต่ละแถวมีความสัมพันธ์ทางอ้อมกับละติจูดและลองจิจูดเฉพาะ (ตำแหน่ง) แต่ละแถวมีการประทับวันที่
ใช้ Case
ปัญหาดังต่อไปนี้:
- ผู้ใช้ตั้งวันที่เริ่มต้น / สิ้นสุดและช่วงของค่า (เช่น 100 ถึง 105)
- ระบบรวบรวมแถวทั้งหมดที่ตรงกับวันที่กำหนดจัดกลุ่มตามสถานที่
- ระบบดำเนินการกำหนดสถานที่ที่ในช่วงวันที่เหล่านั้นมีความเป็นไปได้ทางสถิติของการตกอยู่ในช่วงของค่าที่กำหนด
- ระบบจะแสดงตำแหน่งที่ตรงกันทั้งหมดให้กับผู้ใช้
นี่เป็นปัญหาของความเร็วและสเกล
คำถาม
สถาปัตยกรรมโซลูชันที่มีราคาแพงน้อยที่สุดที่คุณสามารถจินตนาการได้ว่าจะอนุญาตให้ระบบดังกล่าวดึงข้อมูลผลลัพธ์สำหรับผู้ใช้ในเวลาไม่เกินห้าวินาทีคืออะไร
ระบบปัจจุบัน
สภาพแวดล้อมปัจจุบัน:
- PostgreSQL 8.4 (สามารถปรับรุ่นได้การสลับฐานข้อมูลไม่ใช่ตัวเลือก)
- R และ PL / R
- XFS
- WD VelociRaptor
- RAM 8 GB (Corsair G.Skill; 1.3 GHz)
- Quad core GenuineIntel 7 (2.8 GHz)
- Ubuntu 10.10
สามารถอัพเกรดฮาร์ดแวร์ได้
อัพเดท - โครงสร้างฐานข้อมูล
พันล้านแถวอยู่ในตารางคล้าย:
id | taken | location_id | category | value1 | value2 | value3
- id - คีย์หลัก
- ถ่าย - วันที่กำหนดให้กับแถว
- location_id - อ้างอิงถึงละติจูด / ลองจิจูด
- หมวดหมู่ - คำอธิบายของข้อมูล
- value1 .. 3 - ค่าอื่น ๆ ที่ผู้ใช้สามารถสืบค้นได้
โดยtaken
ทั่วไปคอลัมน์จะเป็นวันที่ต่อเนื่องกันlocation_id
บางครั้งสถานที่แต่ละแห่งมีข้อมูลตั้งแต่ 1800 ถึง 2010 (ประมาณ 77,000 วันที่ส่วนใหญ่จะซ้ำกันเนื่องจากแต่ละสถานที่มีข้อมูลในช่วงวันที่เดียวกัน)
มีเจ็ดหมวดหมู่และตารางจะแบ่งตามหมวดหมู่แล้ว (โดยใช้ตารางย่อย) แต่ละหมวดหมู่มีประมาณ 190 ล้านแถว ในอนาคตอันใกล้จำนวนแถวต่อหมวดหมู่จะเกินหนึ่งพันล้าน
มีประมาณ 20,000 แห่งและ 70,000 เมือง ตำแหน่งมีความสัมพันธ์กับเมืองตามละติจูดและลองจิจูด การกำหนดที่ตั้งแต่ละแห่งให้กับเมืองใดเมืองหนึ่งหมายถึงการค้นหาขอบเขตของเมืองซึ่งไม่ใช่งานที่สำคัญ
ไอเดีย
ความคิดบางอย่างที่ฉันมีรวมถึง:
- ค้นหาบริการคลาวด์เพื่อโฮสต์ฐานข้อมูล
- สร้างแถบตรวจค้น SSD (วิดีโอยอดเยี่ยม)
- สร้างตารางที่รวมตำแหน่งที่ตั้งทั้งหมดตามเมือง (การคำนวณล่วงหน้า)
ขอบคุณ!