Kapan sebaiknya penggunaan basis data lebih disukai daripada parsing data dari file teks?


13

Saya membuat program Python untuk mengukur pertumbuhan codereview.SE . Pendekatan saya adalah untuk mendapatkan "statistik Situs" yang ditampilkan di halaman depan dan menyimpannya di hard drive saya. Saya berencana melakukan ini sekali setiap hari. Sejauh ini saya telah membuat cukup untuk mendapatkan statistik dan menambahkannya ke file teks. Skrip python dapat dilihat di github . Format yang saya gunakan adalah sebagai berikut

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

Saya hanya menjalankan skrip dua kali untuk mendapatkan format yang akan saya gunakan dalam file. Awalnya ini tampak baik bagi saya karena saya akan menyimpannya sendiri dan formatnya akan sama sehingga mudah diurai tetapi tidak saya tidak yakin. Tampaknya menggunakan database harus lebih baik di sini karena dengan cara itu mengambil data harus lebih mudah. Sekedar catatan, saya belum pernah menggunakan database dan tidak memiliki pengetahuan tentang SQL, MySQL atau varian RDBMS lainnya.

Jadi ini membawa saya ke pertanyaan. Kapan seharusnya suatu basis data lebih disukai untuk menyimpan data daripada menyimpan data dalam file teks? Apakah ada beberapa petunjuk yang dapat saya cari ketika membuat keputusan tentang apakah saya memerlukan database atau file teks sederhana?

PS: Jika tag yang lebih baik dapat ditambahkan, silakan lakukan. Saya memiliki keraguan tentang tag yang dapat ditambahkan.


"Setiap alat adalah kewajiban sampai Anda belajar bagaimana menggunakannya."
JeffO

1
Database mungkin atau mungkin tidak sesuai untuk proyek Anda. Namun, Anda mungkin menemukan bahwa menggunakan format yang lebih sederhana akan sangat membantu. Ada modul CSV yang standar dengan Python yang mungkin Anda pertimbangkan untuk digunakan. Memiliki CSV akan mempermudah ekspor data ke program lain (mis. - ke dalam spreadsheet sehingga Anda dapat membuat grafiknya).
Sean McSomething

Jawaban:


13

Kapan seharusnya suatu basis data lebih disukai untuk menyimpan data daripada menyimpan data dalam file teks?

Wikipedia memberi tahu kita bahwa database adalah kumpulan data yang terorganisir . Dengan ukuran itu, file teks Anda adalah database. Selanjutnya dikatakan:

Data biasanya disusun untuk memodelkan aspek-aspek realitas yang relevan dengan cara yang mendukung proses yang membutuhkan informasi ini. Misalnya, memodelkan ketersediaan kamar di hotel dengan cara yang mendukung menemukan hotel dengan lowongan.

Bagian itu subyektif - tidak memberi tahu kami secara khusus bagaimana data harus dimodelkan atau operasi apa yang perlu dioptimalkan. File teks Anda terdiri dari sejumlah catatan berbeda, satu untuk setiap hari, jadi Anda memodelkan aspek realitas dengan cara yang relevan dengan masalah Anda.

Saya menyadari bahwa ketika Anda mengatakan "database" Anda mungkin berpikir tentang semacam sistem manajemen database relasional, tetapi memikirkan file teks Anda sebagai database mengubah pertanyaan Anda dari "kapan saya harus menggunakan database?" ke "basis data apa yang harus saya gunakan?" Melihat hal-hal seperti itu membuat jawaban lebih mudah dilihat: gunakan basis data yang lebih baik ketika yang Anda miliki tidak lagi memenuhi persyaratan Anda.

Jika skrip Python dan file teks sederhana Anda berfungsi cukup baik, tidak perlu diubah. Dengan hanya satu catatan baru per hari dan komputer semakin cepat setiap tahun, saya menduga bahwa solusi Anda saat ini bisa bertahan untuk waktu yang lama. Nilai satu dekade data akan memberi Anda hanya 3650 catatan yang, setelah diurai, mungkin akan membutuhkan kurang dari 75 kilobyte.

Bayangkan bahwa alih-alih satu catatan kecil per hari, Anda memutuskan untuk merekam setiap pertanyaan yang ditanyakan pada CodeReview, siapa yang bertanya, dan kapan. Selain itu, Anda juga mengumpulkan semua jawaban dan metadata yang relevan. Anda dapat menyimpan semua itu dalam file teks, tetapi file flat akan mempersulit untuk menemukan informasi ketika Anda membutuhkannya. Akan ada terlalu banyak data untuk membaca semuanya ke dalam memori, jadi setiap kali Anda ingin menemukan pertanyaan atau jawaban, Anda harus memindai melalui file sampai Anda menemukan apa yang Anda cari. Ketika Anda ingin menemukan semua pertanyaan yang diajukan oleh pengguna tertentu, Anda harus memindai seluruh file. Jika Anda ingin menemukan semua pertanyaan yang memiliki "bug" sebagai tag, Anda harus memindai melalui file.

Itu akan sangat lambat, jadi Anda mungkin memutuskan untuk mempercepat dengan membuat beberapa indeks yang memberi tahu Anda ke mana harus mencari file untuk menemukan catatan yang diberikan. Anda bisa memiliki indeks untuk pertanyaan, yang lain untuk pengguna, yang ketiga untuk jawaban, dan sebagainya. Ketika Anda ingin menemukan pertanyaan, Anda akan mencari indeks pertanyaan (jauh lebih kecil), dapatkan posisi pertanyaan di file data utama, dan lompat cepat ke tempat yang tepat di file. Itu akan menjadi peningkatan kinerja besar. Memang, itulah yang disebut sistem manajemen basis data.

Jadi, gunakan DBMS saat itu yang Anda butuhkan. Gunakan ketika Anda memiliki banyak data, ketika Anda harus dapat mengakses data itu dengan cepat dan mungkin dengan cara yang tidak dapat Anda prediksi sepenuhnya sejak awal. Jika Anda memiliki berbagai jenis data - berbagai jenis catatan - yang terhubung satu sama lain, gunakan RDBMS sehingga Anda dapat menghubungkan berbagai catatan dengan tepat.


3
"Memikirkan file teks Anda sebagai perubahan basis data" Sangat berwawasan. Juga bagian tentang saya yang hanya memiliki 3650 entri sangat membantu. Ini membantu untuk mendapatkan perspektif masalah yang nyata.
Aseem Bansal

1
Jawaban yang sangat diremehkan, ini adalah kedua kalinya saya kembali ke sana.
Hashim

6

Basis data memiliki banyak keuntungan, tetapi membuat akses lebih mudah bukan salah satunya. Lebih cepat, lebih terstandarisasi, dapat ditafsirkan sebagai sub-bahasa perintah yang disematkan, lebih aman, ya - tetapi tidak mudah. Tidak peduli berapa banyak gula sintaksis yang disediakan oleh bahasa dan perpustakaan standar Anda, Anda harus memiliki basis data, membuka koneksi ke sana dan merutekan data dari program Anda sesuatu yang sama sekali berbeda dan kembali. Selama tidak ada masalah dengan apa yang Anda lakukan, dan kemudahan pemrograman adalah prioritas Anda, jangan pernah beralih ke database hanya karena Anda pikir itu "praktik yang baik".

Saya mengambil waktu untuk beralih adalah mengikuti perkembangan sejarah. Bagaimanapun, orang-orang menyimpan data dalam file untuk waktu yang lama sebelum DB relasional ditemukan, dan pada kenyataannya sejumlah model database yang lebih rendah (DB hirarkis, DB jaringan ...) diciptakan sebelum itu. Mereka mulai menulis basis data dan menggunakannya ketika menjadi jelas bahwa ini akan menghemat upaya pemrosesan besar, meningkatkan keandalan dll secara keseluruhan dan dalam jangka panjang . Selama itu bukan masalahnya untuk Anda, dan Anda tidak memperkirakan itu akan menjadi masalah dalam waktu dekat, beralih akan menjadi rekayasa berlebihan.


Bukankah kekompakan yang ditawarkan lebih baik sesuai dengan desain keseluruhan? misalnya dalam kasus saya, saya menyimpan 5 nilai yang sesuai untuk setiap tanggal. Dalam kondisi saat ini tidak ada kekompakan di antara data.
Aseem Bansal

Anda benar, memastikan bahwa semua catatan memiliki set bidang dan nilai yang konsisten adalah keunggulan lainnya. (Sebenarnya, ini hanya basis data relasional yang menjamin itu. Orang-orang menggunakan basis data non-relasional dalam produksi untuk waktu yang lama, dan saat ini mereka mendapatkan traksi lagi dengan gerakan "NoSQL".)
Kilian Foth

3

Ini tentu saja akan menjadi panggilan penilaian, tetapi tiga kriteria utama yang akan saya pertimbangkan adalah: apakah harus sesuai dengan ACID , seberapa rumit data itu dan akhirnya, berapa banyak hal yang perlu dibaca / dituliskan. Selama Anda hanya membaca dan menulis satu baris per dan aplikasi Anda adalah satu-satunya aplikasi baik membaca atau menulis, Anda mungkin dapat melewati database. Setelah Anda mulai memiliki beberapa aplikasi baik membaca atau menulis atau struktur data Anda menjadi kompleks (terutama jika memiliki hubungan antara baris yang terpisah) maka DB mulai terlihat sangat menarik.


"berapa banyak hal yang perlu dibaca / tulis itu" - Itu membantu.
Aseem Bansal

2

Database digunakan untuk tidak hanya menyimpan tetapi memanipulasi dan meminta data, oleh karena itu Anda harus membuat keputusan yang berpendidikan:

Faktor besar adalah manfaat yang Anda dapatkan dari menginstal database pada mesin vs fungsionalitas yang dibawanya

Tentunya jika Anda perlu query dan memanipulasi data, dan Anda ingin akses menjadi cepat - dan Anda mungkin berpikir untuk menggunakan database untuk fungsi lain, mungkin itu ide yang bagus. Model penyimpanan basis data memungkinkan data dilihat dengan cepat oleh nilai-nilai kunci, dan saya bisa membayangkan mem-parsing file bisa lambat (tergantung bagaimana Anda melakukannya)

Jika Anda ingin bermain dengan SQL dan apa yang bisa dilakukan, SQLFiddle.com memiliki beberapa model RDBMS yang dapat Anda mainkan (jalankan kueri, buat skema, dll.)


Python memiliki antarmuka pustaka standar bawaan untuk sqlite3. Jadi menginstal basis data bukanlah masalah. Pertimbangan saya adalah bahwa jika saya terus menyimpan data maka kecuali saya memiliki semacam pengindeksan mungkin menjadi lambat. Database bisa mengatasi itu, saya pikir. Saya mengunduh sqlite3 secara terpisah untuk mempelajarinya, menemukan bahwa saya perlu belajar tentang model-model basis data sebelum menggunakan basis data, mencobanya. Saya dapat belajar sqlite3 menggunakan contoh berbasis internet tetapi saya saat ini mengalami masalah dalam mempelajari model basis data. Lalu terlintas di benak saya apakah itu sepadan dengan masalahnya?
Aseem Bansal

2

Seperti biasa menggunakan database atau tidak tergantung pada apa yang perlu Anda lakukan. Jika Anda memiliki sejumlah besar data dan Anda perlu melakukan banyak pertanyaan berbeda, mungkin sebuah basis data dapat membantu Anda.

Dalam kasus Anda, saya akan menyimpan penyimpanan dalam file uji sampai kinerja dapat diterima. Biasanya membaca file teks (bahkan besar) tidak butuh waktu lama. Jika Anda membutuhkan lebih banyak, Anda selalu dapat menambahkan database nanti.

Untuk pengalaman saya, jika Anda benar-benar baru di database, Anda mungkin menemukan lebih mudah menggunakan sesuatu seperti couchdb: http://couchdb.apache.org/ yang tidak-sql dan Anda dapat menggunakan langsung javascript atau python, dll untuk kueri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.