Apa yang lebih baik / lebih cepat? MySql atau FileSystem?

9

Mari kita bayangkan situs web yang merupakan direktori orang. Untuk setiap orang mungkin ada foto profil dan biografi.

Saya akan mengakui pertanyaan SQL saya bisa lebih baik tetapi secara umum apa yang akan lebih cepat dan menggunakan daya pemrosesan lebih sedikit.

Untuk memeriksa apakah ada file dan kemudian membukanya atau

periksa terhadap MySql untuk melihat apakah ada bio dan tampilkan.

Saya cukup yakin dalam kasus di atas filesystem akan merokok database mysql.

Bagaimana jika saya membuat database file txt terbatas hanya baca?

Apa yang lebih cepat dalam kasus ini?

Apakah ada titik tertentu di mana jika file txt memiliki terlalu banyak catatan, lebih baik menggunakan MySql?

BlueBerry - Vignesh4303
sumber
4
Katakanlah Anda memiliki 100 ribu orang di direktori Anda dan Anda ingin bios dari mereka yang lahir pada tahun 1978. Dari mana Anda pikir akan berasal asap? Membuka 100 ribu file dalam sistem file atau satu permintaan dalam SQL?
ypercubeᵀᴹ
1
@ ypercube - Saya setuju dengan Anda tetapi dalam kasus OS linux ada batas untuk file yang dibuka secara bersamaan dengan masing-masing prosesor.
Satish Pandey

Jawaban:

17

Sistem file berguna jika Anda mencari file tertentu, karena sistem operasi mempertahankan semacam indeks. Namun, isi file txt tidak akan diindeks, yang merupakan salah satu keunggulan utama dari database. Lain adalah memahami model relasional, sehingga data tidak perlu diulang berulang kali. Lainnya adalah tipe pemahaman. Jika Anda memiliki file txt, Anda harus menguraikan angka, tanggal, dll.

Jadi - sistem file mungkin bekerja untuk Anda dalam beberapa kasus, tetapi tentu saja tidak semua.

Rob Farley
sumber
+1, juga sistem file tidak baik untuk pencarian parsial pada nama file atau atribut lainnya. Ketika jumlah file sangat besar Anda mungkin memiliki masalah menemukan file dengan cara ini. Setelah mengatakan bahwa itu umum untuk menggunakan sistem file untuk data yang tidak bersifat transaksional dan di mana konten selalu diakses sebagai satu unit, seperti lampiran dokumen dan file gambar.
NoChance
12

Itu benar-benar tergantung pada apa yang Anda lakukan. Secara umum kecepatan di mana Anda dapat membuka file untuk membaca akan lebih baik daripada kecepatan di mana Anda dapat membuat koneksi jaringan. Jadi untuk operasi yang sangat sederhana, sistem file pasti lebih cepat. Filesystem mungkin akan mengalahkan RDBMS untuk throughput read mentah juga karena ada lebih sedikit overhead. Bahkan, jika Anda memikirkannya, basis data tidak akan pernah bisa lebih cepat daripada sistem berkas yang digunakannya dalam hal throughput mentah.

Untuk operasi yang sangat kompleks, sistem file cenderung sangat lambat. Sebagai contoh:

Baca 10 baris dari 1 miliar file baris ini dan kemudian cari baris yang cocok di file lain ini. Saya kasihan jika Anda harus melakukan ini. Server database yang baik namun memiliki strategi untuk melakukan ini dengan cepat dan baik sehingga Anda tidak menciptakan kembali roda.

Selain itu Anda benar-benar perlu mencari tahu apa yang Anda lakukan. Data apa yang Anda simpan? Bagaimana Anda akan mengubahnya? Jika 100k file gambar, solusi Anda akan terlihat sangat berbeda daripada jika itu adalah direktori untuk 100k orang. (LDAP mungkin? Atau database SQL? Tergantung pada apa yang Anda lakukan, mungkin.) Kuncinya di sini adalah untuk memilih alat yang cocok dengan apa yang Anda lakukan dan yang memberi Anda ruang untuk menambahkan lebih banyak kegunaan, daripada apa pun yang tampaknya tercepat untuk beberapa use case agak abstrak. Database adalah alat yang luar biasa, tetapi Anda tidak bisa mendapatkan jawaban yang bagus untuk pertanyaan seperti ini.

Akhirnya optimasi prematur adalah akar dari semua kejahatan. Pilih alat yang berguna sekarang dan cari sisanya nanti.

Chris Travers
sumber
Tentu saja, jika Anda memiliki dua instance virtual yang berkomunikasi melalui NIC virtual, atau DB yang berjalan pada instance yang sama dengan server aplikasi, jika Anda memiliki jumlah memori yang masuk akal, Anda dapat memastikan bahwa basis data membaca lebih cepat daripada fs yang paling banyak dibaca. pada saat itu, karena jika Anda bergantung pada sistem file, Anda berada di bawah kendali algoritma caching / penggantian halaman driver fs, sedangkan database dapat menyimpan segmen memori sedemikian rupa sehingga mereka tidak pernah terhapus, menempatkan latensi aplikasi Anda perlu diutamakan . Dengan asumsi Anda telah menukar diaktifkan.
Parthian Shot
Baris terakhir Anda mendorong saya ...
@Chris
5

Sistem file mungkin lebih cepat pada awalnya, tapi saya ragu. Namun, ketika ukuran data Anda meningkat, Anda mungkin harus merestrukturisasi sistem file Anda untuk mempertahankan kinerja. Selain kemampuan mereka yang jelas untuk mengindeks pada banyak atribut, basis data cenderung berskala lebih baik.

Tembolok web yang berfungsi sama dengan apa yang Anda pertimbangkan menggunakan pohon direktori untuk mempertahankan kinerja. Mereka juga cenderung memiliki skala yang relatif tetap, sehingga mereka tidak harus berurusan dengan skala pertumbuhan.

Untuk aplikasi semacam ini saya akan mulai dengan database, karena lebih sesuai dengan kebutuhan Anda. Ini akan skala jauh lebih baik dalam jangka panjang. Dibandingkan dengan kebanyakan sistem file, basis data juga akan lebih efisien ruang.

BillThor
sumber
4
Yah, itu tidak masalah. Mari kita buat file lain yang mencantumkan nilai dan mencari offset. Sebenarnya kami bisa mengoptimalkan ini untuk mencari dengan btrees. Lalu kita tahu di mana harus membaca file! Selanjutnya, saya kira kita harus menambahkan bahasa query deklaratif ke program kecil kami yang mampu menggabungkan hasil antara file yang berbeda dan kemudian mungkin kepatuhan ACID .... Pada waktunya, yah, mengapa menggunakan RDBMS sama sekali? ;-)
Chris Travers
@ ChrisTravers Pernah ke sana, melakukan itu, dan saya jauh lebih bahagia menggunakan database.
BillThor
5
idenya adalah sepanjang baris "Mereka yang tidak belajar dari UNIX ditakdirkan untuk menciptakannya kembali dengan buruk."
Chris Travers
1

Saya selalu suka datang ke forum-forum ini dan membaca semua guru berat database yang mengatakan bahwa Sistem file tidak dapat melakukannya secepat Database. Sebaliknya pohon yang diletakkan dengan benar, hashtable yang dirancang dengan baik dan menyimpannya sebagai objek ke file akan menghasilkan kecepatan yang sama seperti database dan dari pengujian saya. Hashtable yang dirancang dengan baik dan pohon direktori akan menang setiap saat. Jauh lebih sedikit overhead. Baru-baru ini saya telah pindah dari pemrograman berbasis database dan lebih banyak pada pohon file untuk kesederhanaan dan portabilitas program. Tanpa DB berarti pencadangan mudah, cukup zip pohon Anda dan pergi. Ini sangat bagus dan merupakan rekomendasi untuk memprogram dalam mode ini untuk klien sekali pakai dengan aplikasi kecil. Lihatlah gambar besar apakah saya punya waktu untuk mendesain sendiri atau hanya memanfaatkan apa yang sudah ada seperti db. Saya pribadi suka menyimpan objek saya ke file dan menggunakannya nanti hanya mengawasi ukuran meja Anda dan melihat ke dalam menggunakan RandomAccessFile agar dapat mencari dengan cepat meletakkannya seperti database dan memecahnya menjadi objek hashtable . Nikmati. Ingat, data apa pun yang Anda simpan di file akan menghabiskan dua kali lipat penggunaan memori pada waktu tergantung pada kode Anda. Tabel hash itu sendiri dan biasanya tempat Anda mengkonsumsinya untuk dilihat.

JDeCarlo
sumber
3
Satu-satunya tanggapan yang tepat untuk ini yang dapat saya pikirkan adalah ini .
Mark Storey-Smith
3
@ MarkStorey-Smith, itu tautan yang menarik, tetapi apakah itu terlalu berani untuk menyiratkan solusi ini berada di spektrum Dunning-Kruger di suatu tempat? :)
David Mann