Kami berencana membuat proyek baru (peluncuran ulang lengkap) aplikasi web dalam PHP (Symfony 2) dan PostgreSQL. Saat ini kami menggunakan PHP dan MySQL (MyISAM). -> aplikasi web
Webapp saat ini dan yang baru bergantung pada sistem lain (.NET) termasuk database (MS SQL 8/2000), yang tidak akan dimodifikasi (mengubah atau menggabungkan database bersama-sama) dalam waktu dekat, karena ada alur kerja yang kompleks dengan keseluruhan megillah -> sistem lama
BTW: tabel terbesar memiliki total 27 juta baris
Sebagian besar data/tabel akan ditransfer beberapa kali per hari dari database lama ke database webapp. Untuk aplikasi web baru, kami telah mendesain ulang sebagian besar skema basis data, jadi sekarang kami memiliki skema yang hampir dinormalisasi (skema basis data lama sangat mubazir dan sangat berantakan)
Saat ini tugas transfer mencoba memasukkan data. Ketika ada pengecualian dengan kode tertentu, kita mengetahui baris tersebut sudah ada dan kemudian melakukan pembaruan. Ini karena kinerja (tidak ada pilihan sebelum pembaruan).
Untuk skema webapp baru kami masih ingin menggunakan ID utama yang sama seperti di database lama. Namun ada beberapa masalah, salah satunya: beberapa tabel memiliki kunci utama yang terlihat seperti bilangan bulat, padahal sebenarnya tidak. sebagian besar baris memiliki bilangan bulat seperti 123456
, tetapi ada beberapa baris dengan karakter seperti 123456P32
.
Sekarang ada dua opsi untuk skema baru:
- Gunakan tipe string untuk PK dan risiko masalah kinerja
Gunakan tipe integer untuk PK dan lakukan konversi. Konversinya akan terlihat seperti ini (berbasis karakter)
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 lama 123 akan diubah menjadi 111213, sehingga panjangnya menjadi dua kali lipat dari aslinya. Contoh lain 123A9 -> 1112135019. Karena setiap karakter memiliki dua digit maka juga dapat dikonversi kembali.
Keraguan pertama saya adalah bahwa PK yang jarang akan membawa beberapa masalah kinerja, tetapi ketika menggunakan b-tree (self-balancing) sebagai indeks yang merupakan sistem indeks default untuk Postgres, itu akan baik-baik saja.
Bagaimana menurutmu? Apakah Anda punya pengalaman dengan sistem serupa dengan ketergantungan lama?
123456P32
berada di luar jangkauan bilangan bulat. - person Clodoaldo Neto   schedule 25.10.2012