Pertanyaan Umum
Apa perbedaan antara algoritma yang menggunakan struktur data dan algoritma yang menggunakan basis data?
Beberapa konteks
Ini adalah pertanyaan yang telah mengganggu saya selama beberapa waktu, dan saya belum dapat memberikan jawaban yang meyakinkan untuk itu.
Saat ini, saya sedang berusaha memperkuat pemahaman saya tentang algoritma yang, tentu saja, sangat melibatkan struktur data. Ini adalah struktur dasar seperti Bag, Queue, Stack, Priority Queue, dan Heap.
Saya juga menggunakan basis data setiap hari untuk menyimpan data yang telah diproses dan dikirim oleh pengguna akhir atau diproses oleh program. Saya mengambil dan mengirimkan data melalui DAL, yang memiliki struktur data sendiri yang dihasilkan berdasarkan tabel dalam database.
Pertanyaan saya muncul ketika saya memiliki opsi untuk mengurutkan data menggunakan database untuk mengirimkannya kembali kepada saya yang dipesan dengan cara naik / turun atau mengambil dan memuat data ke dalam logika saya, memproses data ini dalam antrian prioritas, dan mengurutkan tumpukan semua itu. Atau yang lain akan mencari catatan menggunakan database daripada memuat subset dari catatan dan menggunakan sesuatu seperti pencarian biner untuk menemukan catatan atau catatan yang saya tertarik.
Dalam pikiran saya, saya akan mencoba untuk memiliki banyak operasi yang terjadi pada database-end sebelum mengirimkannya karena komunikasi itu mahal. Ini juga membuat saya bertanya-tanya kapan Anda menggunakan algoritma dan struktur data yang didefinisikan secara ketat dalam logika Anda sendiri daripada untuk memproses data daripada database?
Jadi inilah pertanyaannya ...
Pertanyaan
- Apa perbedaan antara struktur data dan database?
- Kapan kita menggunakan algoritma yang menggunakan struktur data yang ditentukan hanya dalam logika Anda sendiri dan bukan dari database?
- @ Posting Harvey: Kapan metode dalam database menjadi kurang efisien untuk digunakan daripada metode dalam logika Anda sendiri?
- @mirculixx post: Apa yang membuat suatu metode efisien?
- @ Posting Harvey: Bagaimana memproses data dengan struktur data lebih cepat daripada melakukannya di basis data?
Klarifikasi
- @Grant post: Basis data yang biasanya saya gunakan adalah relasional, dan pertanyaan-pertanyaan ini muncul karena bekerja dengan mereka. Namun, saya pikir pertanyaan-pertanyaan ini berlaku untuk setiap kerangka kerja yang bertahan lama (ketika saya mengatakan kerangka kerja, saya maksudkan dalam pengertian yang paling umum).
Saya tahu jawaban tanpa konteks spesifik itu sulit. Pokok-pokok pemikiran, saran, atau poin diskusi terutama adalah apa yang saya cari dan akan sangat dihargai!
sumber
Jawaban:
Struktur Data sebagian besar adalah:
Database sebagian besar adalah:
Struktur data dimaksudkan untuk diteruskan dari satu tempat ke tempat lain, dan digunakan secara internal dalam suatu program. Kapan terakhir kali Anda mengirim data dari halaman web ke server web menggunakan database, atau melakukan perhitungan pada database yang sepenuhnya ada dalam memori?
Sistem basis data menggunakan struktur data sebagai bagian dari implementasi internal mereka. Ini masalah ukuran dan ruang lingkup; Anda menggunakan struktur data dalam program Anda, tetapi sistem database adalah program dengan sendirinya.
sumber
Pada tingkat abstrak, tidak ada - basis data adalah struktur data.
Pada tingkat tertentu, basis data biasanya memiliki tujuan untuk mempertahankan data, biasanya dalam format yang dioptimalkan untuk penyisipan, pembaruan, pengambilan, bergabung atau tujuan lain (atau kombinasi).
Misalnya jika Anda membandingkan tabel dalam RDBMS untuk mengatakan sebuah array data, perbedaannya mungkin pada waktu proses algoritma, jumlah kode yang harus Anda tulis, jumlah memori yang Anda butuhkan untuk menjalankan algoritma, atau fleksibilitas untuk bekerja / mengakses data dari luar program / algoritma Anda.
Dalam kecenderungan saya berpendapat
a) untuk menggunakan database jika Anda perlu mempertahankan data dengan cara yang dapat diakses di luar run-time atau tujuan dari algoritma tertentu.
b) untuk menggunakan struktur data Anda sendiri (dalam memori) jika kecepatan run-time penting, atau kegigihan tidak diperlukan
Misalnya, jika algoritma Anda memproses catatan pelanggan, Anda mungkin ingin menyimpan catatan pelanggan tersebut (katakanlah untuk menemukan semua pelanggan di bidang tertentu) untuk digunakan nanti oleh beberapa program / algoritma lain dan untuk tujuan yang sama sekali berbeda (katakan untuk menemukan pelanggan yang paling berharga) ). Dalam hal menggunakan database untuk bertahan, data mungkin merupakan ide yang bagus.
Namun, perlu diketahui bahwa ada konsep basis data di dalam memori yang tidak selalu bertahan dengan data, karena alasan kinerja. Misalnya Redis atau HANA .
Jawabannya sangat tergantung pada keadaan dan (tipe) database yang digunakan. Saya akan mengubah pertanyaan menjadi "apa yang membuat suatu metode efisien?" Ini kemudian menjadi latihan menilai metode (= algoritma) yang akan Anda gunakan untuk struktur data Anda sendiri vs metode yang digunakan oleh database. Lihat juga poin selanjutnya.
Sekali lagi, ini tergantung pada spesifikasinya. Secara umum, pemrosesan data yang ada dalam memori, dapat diakses langsung ke proses yang menjalankan algoritme Anda, lebih cepat daripada mengirim permintaan ke proses lain (di komputer yang sama atau melintasi jaringan) dan memintanya untuk mengirim kembali hasilnya . Namun jika data sudah berada dalam database, mengirimkannya perintah - katakan pernyataan SQL untuk bergabung dengan dua tabel dan menghitung beberapa fungsi agregat - dan hanya mengambil ringkasan kecil atau bagian dari data mungkin jauh lebih efisien daripada pertama-tama mentransfer semua data dan menghitung hasilnya secara lokal (menggunakan struktur data Anda sendiri).
sumber
Akses disk adalah yang paling mahal dalam operasi ini, lebih sering daripada akses jaringan (http://serverfault.com/questions/238417/are-networks-now-faster-than-disks). Kecuali jika basis data Anda tidak terletak di setidaknya jaringan 1 Gbps dan jaringan yang sama dengan server aplikasi web Anda, kinerja jaringan tidak akan sebanyak masalah kinerja disk untuk kumpulan data yang lebih besar. Atau jika data Anda berada pada disk solid state yang sangat cepat yang akan lebih cepat daripada akses jaringan biasa. Selain itu, database biasanya menyediakan mekanisme IPC seperti pipa bernama daripada menggunakan TCP / IP jika database berada di server yang sama dengan server aplikasi Anda.
Jika Anda dapat menyimpan sebagian besar struktur data dalam memori di antara permintaan, maka ini umumnya akan menjadi taruhan tercepat Anda. Jika Anda tidak bisa, maka sulit untuk mengalahkan struktur database yang baik dengan tabel yang dinormalisasi dan indeks yang tepat untuk mencari dan memperbarui kinerja pada apa pun selain set kecil catatan, terutama dalam sistem dengan jutaan catatan.
Database relasional biasanya menggunakan pohon B + atau varian daripadanya di bawah tenda dan memiliki banyak optimasi seperti penyelarasan data pada disk dan buffer pool untuk catatan yang sering diakses. Ini membuat mereka unggul dalam memproses dataset besar dengan cepat, terutama jika agregasi atau penyaringan terlibat.
sumber
Apa yang Anda maksud dengan database? Maksud Anda database relasional seperti MySQL, atau SQL Server? Database relasional adalah struktur meta-data yang mendukung beberapa himpunan bagian dari operasi yang didefinisikan oleh model relasional . Teori model relasional yang sebagian besar dikerjakan oleh Edgar Codd di tahun 60an.
Model relasional adalah tujuan yang sangat umum dan fleksibel, tetapi itu berarti ia tidak dapat mengambil keuntungan dari struktur dalam data atau pola akses. Struktur data berguna ketika Anda mengetahui sesuatu tentang data dan bagaimana itu akan diakses. Misalnya, jika Anda tahu data terakhir yang Anda masukkan ke dalam struktur data akan menjadi data pertama yang Anda inginkan, Anda dapat menggunakan tumpukan.
Saya menyebut basis data relasional sebagai struktur meta-data karena secara umum cukup banyak peranti lunak yang menggunakan banyak struktur data seperti tumpukan, antrian, pohon, dan daftar untuk membuat struktur data abstrak dari tabel relasional.
sumber