Saya sedang mengerjakan desain untuk proyek RoR untuk perusahaan saya, dan tim pengembangan kami telah mengalami sedikit perdebatan tentang desain, khususnya database.
Kami memiliki model yang disebut Message
yang perlu dipertahankan. Ini adalah model yang sangat, sangat kecil dengan hanya tiga kolom db selain id, namun kemungkinan akan ada BANYAK model ini saat kita pergi ke produksi. Kami melihat sebanyak 1.000.000 penyisipan per hari. Model hanya akan dicari oleh dua kunci asing yang dapat diindeks. Selain itu, model tidak perlu dihapus, tetapi kami juga tidak harus menyimpannya setelah berusia sekitar tiga bulan.
Jadi, yang kami ingin tahu adalah apakah menerapkan tabel ini di Postgres akan menghadirkan masalah kinerja yang signifikan? Apakah ada yang punya pengalaman dengan database SQL yang sangat besar untuk memberi tahu kami apakah ini akan menjadi masalah atau tidak? Dan jika ya, alternatif apa yang harus kita gunakan?
sumber
Jawaban:
Baris per tabel tidak akan menjadi masalah itu sendiri.
Jadi secara kasar, 1 juta baris sehari selama 90 hari sama dengan 90 juta baris. Saya tidak melihat alasan Postgres tidak dapat menangani itu, tanpa mengetahui semua detail dari apa yang Anda lakukan.
Bergantung pada distribusi data Anda, Anda dapat menggunakan campuran indeks, indeks yang difilter, dan beberapa jenis tabel partisi untuk mempercepat setelah Anda melihat masalah kinerja apa yang mungkin Anda miliki atau tidak. Masalah Anda akan sama di RDMS lain yang saya ketahui. Jika Anda hanya membutuhkan desain data selama 3 bulan dalam proses untuk memangkas data, Anda tidak memerlukannya lagi. Dengan begitu Anda akan memiliki volume data yang konsisten di atas tabel. Keberuntungan Anda, Anda tahu berapa banyak data yang akan ada, uji volume Anda dan lihat apa yang Anda dapatkan. Menguji satu tabel dengan 90 juta baris semudah:
https://wiki.postgresql.org/wiki/FAQ
sumber
Cara lain untuk mempercepat kueri Anda secara signifikan pada tabel dengan> 100 juta baris adalah di kluster di luar jam kerja, tabel pada indeks yang paling sering digunakan dalam kueri Anda. Kami memiliki tabel dengan> 218 juta baris dan telah menemukan 30X peningkatan.
Selain itu, untuk tabel yang sangat besar, sebaiknya buat indeks pada kunci asing Anda.
sumber