ปัจจุบันงานของฉันใช้ MySQL (MyISAM) สำหรับการจัดเก็บข้อมูลทั้งหมดโดยเฉพาะ ขณะนี้เรามีเว็บเซิร์ฟเวอร์มากกว่า 300 แห่งและฐานข้อมูลประมาณ 150 แห่ง น่าเสียดายที่ฉันอยู่ในฐานะที่ต้องเขียนโครงสร้างตารางเพื่อรองรับแถวมากกว่า 100 ล้านแถวในระยะเวลา 30 วัน แนวคิดคือ:
- ส่วนแทรกที่มีปริมาณมาก (ไม่มีการอัพเดตหรือการลบและจะอยู่ท้ายตารางเสมอ)
- เลือก 1 แถว
- ข้อมูลที่เก่ากว่า 30 วันจะถูกละทิ้ง
ทางออกที่ดีที่สุดน่าจะเป็นการรวมตารางในแต่ละวันเข้ากับตารางผสานสำหรับการเลือก จะมีข้อมูลที่ซ้ำกันแน่นอน แต่ SELECT จะดึงเฉพาะแถวล่าสุดตามการประทับเวลาและฟิลด์ int เท่านั้น แน่นอนว่าการมีโต๊ะ 30 โต๊ะนั้นไม่เหมาะนัก แต่ชีวิตก็ดำเนินไปเช่นกัน
มีข้อบกพร่องโดยธรรมชาติในแนวทางนี้หรือไม่? มีวิธีอื่นใดในการเข้าถึงสิ่งนี้ที่ฉันขาดหายไป (เราติดอยู่ที่ 5.0) การล็อกตารางจะเป็นปัญหาใหญ่หรือไม่เมื่อดำเนินการ ALTER TABLE บนตารางผสานเมื่อมีการสร้างตารางของวันใหม่ ขณะนี้เรามีโครงสร้างการหมุนเวียนตารางอยู่แล้ว แต่ถ้าเราเลือกตารางเดียวโดยต้องเลือกข้อมูลที่เราต้องการจากตารางเก่าไปเป็นตารางใหม่คงจะค่อนข้างช้าเนื่องจากมีเข้าใกล้ 100 ล้านแถว
มีเทคโนโลยีอื่นๆ ที่ช่วยให้บรรลุเป้าหมายนี้ได้อย่างสง่างาม แต่ทีมขายของเราขายโซลูชันไปแล้ว และเราไม่มีเวลามากพอ
ข้อมูลใด ๆ ที่จะได้รับการชื่นชม
โครงสร้าง:
CREATE TABLE `merge_test_1` (
`date_stamp` long NOT NULL,
`hash` char(32) NOT NULL,
`p_id` mediumint(8) unsigned NOT NULL,
`a_id` mediumint(8) unsigned NOT NULL,
`b_id` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`hash`,`p_id`,`date_stamp`)
) ENGINE=MyISAM
ตัวอย่างแบบสอบถาม
SELECT b_id,a_id FROM merge_test WHERE hash='1' AND p_id=1
ORDER BY date_stamp DESC LIMIT 1