เรากำลังวางแผนที่จะสร้างโปรเจ็กต์ใหม่ (การเปิดตัวใหม่ทั้งหมด) ของเว็บแอปพลิเคชันใน PHP (Symfony 2) และ PostgreSQL ปัจจุบันเราใช้ PHP และ MySQL (MyISAM) -> เว็บแอป
เว็บแอปปัจจุบันและใหม่ขึ้นอยู่กับระบบอื่น (.NET) รวมถึงฐานข้อมูล (MS SQL 8 / 2000) ซึ่งจะไม่ได้รับการแก้ไข (เปลี่ยนแปลงหรือรวมฐานข้อมูลเข้าด้วยกัน) ในเร็ว ๆ นี้ เนื่องจากมีขั้นตอนการทำงานที่ซับซ้อนกับเมจิลลาห์ทั้งหมด -> ระบบเดิม
BTW: ตารางที่ใหญ่ที่สุดมีทั้งหมด 27 ล้านแถว
ข้อมูล/ตารางส่วนใหญ่จะถูกถ่ายโอนหลายครั้งต่อวันจากฐานข้อมูลเดิมไปยังฐานข้อมูล webapp สำหรับเว็บแอปใหม่ เราได้ออกแบบสคีมาฐานข้อมูลส่วนใหญ่ใหม่แล้ว ดังนั้นเราจึงมีสคีมาเกือบเป็นมาตรฐานแล้ว (สคีมาของฐานข้อมูลแบบเดิมนั้นซ้ำซ้อนมากและยุ่งมากจริงๆ)
ขณะนี้งานการถ่ายโอนพยายามแทรกข้อมูล เมื่อมีข้อยกเว้นกับโค้ดเฉพาะ เราจะทราบแถวนั้นอยู่แล้ว จากนั้นจึงอัปเดต นี่เป็นเพราะประสิทธิภาพ (ไม่มีการเลือกก่อนอัพเดต)
สำหรับสคีมา webapp ใหม่ เรายังคงต้องการใช้ ID หลักเดียวกันเหมือนในฐานข้อมูลเดิม แต่มีปัญหาบางประการ หนึ่งในนั้นคือ บางตารางมีคีย์หลักซึ่งดูเหมือนเป็นจำนวนเต็ม แต่กลับไม่มี แถวส่วนใหญ่มีจำนวนเต็มเช่น 123456
แต่ก็มีบางแถวที่มีอักขระเช่น 123456P32
ขณะนี้มีสองตัวเลือกสำหรับสคีมาใหม่:
- ใช้ประเภทสตริงสำหรับปัญหา PK และประสิทธิภาพความเสี่ยง
ใช้ประเภทจำนวนเต็มสำหรับ PK และทำการแปลง การแปลงอาจมีลักษณะเช่นนี้ (ตามอักขระ)
legacy new -------------------------- 0 10 1 11 2 12 . .. 9 19 a 20 b 21 . .. y 45 z 46 A 50 (not 47, because the arity of the second digit is 'clean' with 50) B 51 . .. Z 76
pk แบบเดิม 123 จะถูกแปลงเป็น 111213 ดังนั้นความยาวจึงเพิ่มขึ้นเป็นสองเท่าจากต้นฉบับ อีกตัวอย่างหนึ่ง 123A9 -> 1112135019 เนื่องจากอักขระทุกตัวมีสองหลักจึงสามารถแปลงกลับได้
ข้อสงสัยแรกของฉันคือ PK ที่กระจัดกระจายจะทำให้เกิดปัญหาด้านประสิทธิภาพ แต่เมื่อใช้ b-tree (การปรับสมดุลในตัวเอง) เป็นดัชนีซึ่งเป็นระบบดัชนีเริ่มต้นสำหรับ Postgres ก็ควรจะใช้ได้
คุณคิดอย่างไร? คุณเคยมีประสบการณ์กับระบบที่คล้ายกันซึ่งมีการพึ่งพาแบบเดิมหรือไม่?
123456P32
อยู่นอกช่วงสำหรับจำนวนเต็ม - person Clodoaldo Neto   schedule 25.10.2012