Haruskah saya menyimpan data atau menekan basis data?

10

Saya belum bekerja dengan mekanisme caching dan bertanya-tanya apa pilihan saya di dunia .net untuk skenario berikut.

Kami pada dasarnya memiliki Layanan ISTIRAHAT di mana pengguna melewati ID dari Kategori (folder think) dan kategori ini mungkin memiliki banyak sub kategori dan masing-masing sub kategori dapat memiliki 1000 wadah media (pikirkan objek referensi file) yang berisi informasi tentang file yang mungkin berada di server NAS atau SAN (file adalah video dalam kasus ini). Hubungan antara kategori-kategori ini disimpan dalam database bersama dengan beberapa aturan izin dan meta data tentang sub kategori.

Jadi dari perspektif UI kami memiliki kontrol pohon malas dimuat yang didorong oleh pengguna dengan mengklik pada setiap sub folder (pikirkan Windows explorer). Begitu mereka datang ke URL file video, mereka kemudian dapat menonton video.

Jumlah pengguna bisa bertambah menjadi 1000-an dan sub-kategori dan video bisa mencapai 10.000-an saat sistem bertambah.

Pertanyaannya adalah apakah kita harus melanjutkan cara kerjanya saat ini di mana setiap permintaan menyentuh basis data atau haruskah kita berpikir tentang menyimpan data?

Kami menggunakan IIS 6/7 dan Asp.net.

JD01
sumber
4
Sudahkah Anda membuat profil sistem Anda di bawah beban yang realistis? Bisakah data di-cache? Apakah ini masuk akal?

Jawaban:

13

Pertama, pastikan kode dipartisi sedemikian rupa sehingga penyedia data Anda dapat beralih dengan mudah. Kami sedang berbicara pemisahan antarmuka dan prinsip-prinsip SOLID lainnya di sini.

Selanjutnya Anda perlu mengetahui jawaban untuk yang berikut:

1) Apakah data akan sering berubah? 2) Apakah aplikasi polling layanan REST Anda sering mendapatkan pembaruan ini? 3) Apakah database digunakan untuk tujuan lain? 4) Apakah Anda mengetahui adanya masalah kinerja saat ini? 5) Apakah data diperbarui oleh aplikasi Anda dan apakah pembaruan itu perlu tercermin dalam aplikasi?

Yang menarik adalah bahwa dengan menggunakan basis data, Anda sudah secara teknis menyimpan data. Itu yang dilakukan database. Banyak R&D melakukan pembuatan database secepat mungkin untuk mengambil data. Ini menggunakan cache memori sendiri untuk data yang sering digunakan misalnya.

Jadi tanyakan pada diri sendiri apa yang ingin Anda dapatkan dengan menukar penyedia cache? Dan apa saja batasan saat ini yang perlu ditangani?

Jika saat ini Anda tidak mengalami penurunan yang lambat saya hanya akan mengatakan "tidak, tidak perlu beralih".

Ini topik yang sangat besar. Cache cenderung bekerja dengan sangat baik ketika data perlu didistribusikan secara geografis, tetapi ada overhead yang besar dalam hal manajemen.

Saya sedang mengerjakan proyek pada saat saya membuat keputusan yang persis sama.

Solusi saya sejauh ini adalah menggunakan database saja dan memukulnya banyak dengan permintaan polling dari setiap klien. Kedengarannya menjijikkan, tetapi timbangan (dalam pengujian) jauh lebih dari yang saya butuhkan, kodenya sangat sederhana.

Yang mengatakan, kode saya menggunakan semacam pola repositori yang mengabstraksi penyedia data aplikasi utama dari kode database. Jika saya ingin bertukar di penyedia cache seperti GemFire, itu akan membutuhkan sejumlah kecil kode untuk dilakukan.

Ian
sumber
Terima kasih lan. Pada tahap ini kita memiliki database tetapi itu lebih merupakan pertanyaan pendidikan tentang hal-hal yang harus diwaspadai.
JD01
18

Sebenarnya tidak ada informasi yang cukup, sesuai komentar Thorbjørn.

Caching, ketika dilakukan dengan salah, dapat menyebabkan Anda & pengguna Anda banyak kesedihan. Pastikan Anda perlu khawatir tentang caching sebelum terlalu rumit aplikasi Anda.

Jadi, dengan tidak adanya informasi yang menunjukkan Anda benar-benar perlu melakukan cache, jangan cache.

[Aturan umum optimasi: Jika Anda perlu bertanya apakah saya harus melakukan sesuatu, jawabannya adalah tidak] *
* Ini akan menjadi pernyataan, bukan pertanyaan, di sebagian besar tempat di mana jawabannya adalah ya.

Dan McGrath
sumber
Suka aturan umum, kata baik :)
Ian
@ dan-mcgrath Apakah ide yang bagus untuk me-cache entri jika saya akan mengakses setiap entri tepat 2 kali hanya dalam rentang katakan 5 menit dan tidak pernah setelah itu?
nishantbhardwaj2002