Saya baru dalam reka bentuk sistem pangkalan data. Selepas membaca banyak artikel, saya benar-benar keliru apakah had yang sepatutnya kita ada 1 meja tanpa sharding atau partitioning. Saya tahu sangat sukar untuk memberikan jawapan universal, perkara bergantung pada faktor seperti
- Saiz baris
- Jenis data (rentetan, gumpalan, dll.)
- Bilangan pertanyaan aktif
- Apa jenis pertanyaan
- Indeks
- Baca/Tulis Semula
- Jangkaan kelewatan
Tapi bila ada yang tanya soalan ni
- Apakah yang akan anda lakukan jika 1 bilion keping data dan berjuta-juta baris ditambahkan setiap hari? Untuk pangkalan data yang begitu besar, kependaman untuk 4 pertanyaan baca, 1 tulis dan 2 kemas kini perlu kurang daripada 5 milisaat.
- Jika anda hanya mempunyai 10 juta baris tetapi kemas kini tinggi dan volum bacaan, apakah yang akan anda pilih? Bilangan baris baharu yang ditambah tidak penting. Konsistensi tinggi dan kependaman rendah adalah keperluan.
Jika bilangan baris kurang daripada sejuta dan saiz baris bertambah ribuan, pilihannya mudah sahaja. Tetapi keadaan menjadi lebih rumit apabila pemilihan melibatkan berjuta-juta atau berbilion-bilion baris.
Nota: Saya tidak menyebut nombor kelewatan dalam soalan. tolonglah
Jawab berdasarkan bilangan kelewatan yang anda selesa. Juga, kita bercakap tentang data berstruktur.
Saya tidak pasti, tetapi saya boleh menambah 3 soalan khusus:
- Andaikan anda memilih pangkalan data SQL untuk Amazon atau mana-mana sistem pengurusan pesanan e-dagang. Bilangan pesanan meningkat berjuta-juta setiap hari. Sudah ada 1 bilion rekod. Sekarang, anggap tiada arkib data. Pertanyaan bacaan tinggi dengan lebih seribu pertanyaan sesaat. Dan juga ditulis. Nisbah Baca:tulis ialah 100:1
- Mari kita ambil contoh nombor yang kini lebih kecil. Katakan anda memilih pangkalan data SQL untuk abc atau mana-mana sistem pengurusan pesanan e-dagang. Bilangan pesanan meningkat ribuan setiap hari. Sudah ada 10 juta rekod. Sekarang, anggap tiada arkib data. Pertanyaan bacaan tinggi dengan lebih sepuluh ribu pertanyaan sesaat. Dan juga ditulis. Nisbah membaca dan menulis ialah 10:1
- Contoh ketiga: Pengedaran percuma. Kami ada 10 juta barang untuk dihadiahkan. 1 goody setiap pengguna. Konsistensi tinggi dan kependaman rendah adalah matlamatnya. Dengan mengandaikan sudah ada 20 juta pengguna menunggu pengedaran percuma, sebaik sahaja masa bermula, mereka semua akan cuba mendapatkan barangan percuma itu.
Nota: Sepanjang soalan ini, diandaikan bahawa kita akan memilih
penyelesaian SQL. Selain itu, jika kes penggunaan yang disediakan tidak masuk akal, abaikan ia. Matlamatnya adalah untuk memperoleh pengetahuan berangka.
Bolehkah sesiapa membantu saya memahami apakah penanda aras itu? Sebarang nombor nyata daripada projek yang sedang anda kerjakan akan menunjukkan bahawa ini ialah kependaman yang diperhatikan untuk pangkalan data yang besar dengan begitu banyak pertanyaan. Apa-apa sahaja yang boleh membantu saya mewajarkan bilangan jadual pilihan untuk bilangan pertanyaan tertentu untuk kependaman tertentu.
Beberapa jawapan untuk MySQL. Memandangkan semua pangkalan data tertakluk kepada ruang cakera, kependaman rangkaian, dsb. enjin lain mungkin serupa.
SELECT
yang mengambil masa berjam-jam atau bahkan berhari-hari untuk dijalankan. Oleh itu, anda perlu memahami jika pertanyaan adalah patologi seperti ini. (Saya rasa ini adalah contoh "latensi" tinggi.)PARTITIONing
(terutama dalam MySQL) mempunyai kegunaan yang sangat sedikit. Butiran lanjut: PartitionINDEX
Sangat penting untuk prestasi.每天插入
Satu juta baris tidak menjadi masalah. (Sudah tentu, beberapa reka bentuk skema mungkin menyebabkan masalah ini.) Peraturan praktikal: 100/saat mungkin tidak menjadi masalah; Lebih lanjut mengenai High Speed InestApabila anda masuk ke pangkalan data yang besar, ia datang dalam beberapa jenis yang berbeza; setiap satu mempunyai beberapa ciri yang berbeza.
SPATIAL
atau beberapa teknik di sini