Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan caching untuk mengurangi permintaan database
Gambaran Umum
Anda dapat menggunakan caching sebagai strategi yang efektif untuk membantu mengurangi biaya untuk Anda. NETaplikasi. Banyak aplikasi menggunakan basis data backend, seperti SQL Server, ketika aplikasi memerlukan akses yang sering ke data. Biaya pemeliharaan layanan backend ini untuk mengatasi permintaan bisa tinggi, tetapi Anda dapat menggunakan strategi caching yang efektif untuk mengurangi beban pada basis data backend dengan mengurangi persyaratan ukuran dan penskalaan. Ini dapat membantu Anda mengurangi biaya dan meningkatkan kinerja aplikasi Anda.
Caching adalah teknik yang berguna untuk menghemat biaya yang terkait dengan membaca beban kerja berat yang menggunakan sumber daya yang lebih mahal seperti SQL Server. Sangat penting untuk menggunakan teknik yang tepat untuk beban kerja Anda. Misalnya, caching lokal tidak dapat diskalakan dan mengharuskan Anda untuk mempertahankan cache lokal untuk setiap instance aplikasi. Anda harus mempertimbangkan dampak kinerja dibandingkan dengan biaya potensial, sehingga biaya yang lebih rendah dari sumber data yang mendasarinya mengimbangi biaya tambahan yang terkait dengan mekanisme caching.
Dampak biaya
SQLServer mengharuskan Anda untuk memperhitungkan permintaan baca saat mengukur database Anda. Ini dapat memengaruhi biaya, karena Anda mungkin perlu memperkenalkan replika baca untuk mengakomodasi beban. Jika Anda menggunakan replika baca, penting untuk dipahami bahwa replika tersebut hanya tersedia di edisi SQL Server Enterprise. Edisi ini membutuhkan lisensi yang lebih mahal daripada edisi Standar SQL Server.
Diagram berikut dirancang untuk membantu Anda memahami efektivitas caching. Ini menunjukkan Amazon RDS untuk SQL Server dengan empat node db.m4.2xlarge yang menjalankan edisi Server Enterprise. SQL Ini digunakan dalam konfigurasi multi-AZ dengan satu replika baca. Lalu lintas baca eksklusif (misalnya, SELECT kueri) diarahkan ke replika baca. Sebagai perbandingan, Amazon DynamoDB menggunakan klaster DynamoDB Accelerator () dua node r4.2xlarge. DAX
Bagan berikut menunjukkan hasil penghapusan kebutuhan untuk replika baca khusus yang menangani lalu lintas baca tinggi.
Anda dapat mencapai penghematan biaya yang signifikan dengan menggunakan caching lokal tanpa replika baca atau dengan memperkenalkan DAX berdampingan dengan SQL Server di Amazon RDS sebagai lapisan caching. Lapisan ini diturunkan dari SQL Server dan mengurangi ukuran SQL Server yang diperlukan untuk menjalankan database.
Rekomendasi pengoptimalan biaya
Caching lokal
Caching lokal adalah salah satu cara yang paling umum digunakan untuk menyimpan konten cache untuk aplikasi yang dihosting baik di lingkungan lokal atau di cloud. Ini karena relatif mudah dan intuitif untuk diterapkan. Caching lokal melibatkan pengambilan konten dari database atau sumber lain dan baik caching lokal di memori atau pada disk untuk akses yang lebih cepat. Pendekatan ini, meskipun mudah diterapkan, tidak ideal untuk beberapa kasus penggunaan. Misalnya, ini termasuk kasus penggunaan ketika konten caching perlu bertahan dari waktu ke waktu, seperti mempertahankan status aplikasi atau status pengguna. Kasus penggunaan lainnya adalah ketika konten yang di-cache diperlukan untuk diakses dari instance aplikasi lain.
Diagram di bawah ini menggambarkan cluster SQL Server yang sangat tersedia dengan empat node dan dua replika baca.
Dengan caching lokal, Anda mungkin perlu memuat lalu lintas keseimbangan di beberapa EC2 instance. Setiap instance harus mempertahankan cache lokalnya sendiri. Jika cache menyimpan informasi stateful, perlu ada komit reguler ke database, dan pengguna mungkin perlu diteruskan ke instance yang sama untuk setiap permintaan berikutnya (sesi lengket). Ini menghadirkan tantangan ketika mencoba menskalakan aplikasi karena beberapa contoh dapat digunakan secara berlebihan, sementara beberapa kurang dimanfaatkan karena distribusi lalu lintas yang tidak merata.
Anda dapat menggunakan caching lokal, baik dalam memori atau menggunakan penyimpanan lokal, untuk. NETaplikasi. Untuk melakukannya, Anda dapat menambahkan fungsionalitas untuk menyimpan objek pada disk dan mengambilnya saat diperlukan, atau kueri data dari database dan menyimpannya di memori. Untuk melakukan caching lokal dalam memori dan penyimpanan data lokal dari SQL Server di C #, misalnya, Anda dapat menggunakan kombinasi dan pustaka. MemoryCache
LiteDB
MemoryCache
menyediakan caching dalam memori, sementara LiteDB
merupakan database SQL berbasis No disk tertanam yang cepat dan ringan.
Untuk melakukan caching dalam memori, gunakan file. NETPerpustakaanSystem.Runtime.MemoryCache
. Contoh kode berikut menunjukkan bagaimana menggunakan System.Runtime.Caching.MemoryCache
kelas untuk cache data dalam memori. Kelas ini menyediakan cara untuk sementara menyimpan data dalam memori aplikasi. Ini dapat membantu meningkatkan kinerja aplikasi dengan mengurangi kebutuhan untuk mengambil data dari sumber daya yang lebih mahal, seperti database atau fileAPI.
Begini cara kerja kode:
-
Sebuah instance statis pribadi
MemoryCache
bernama_memoryCache
dibuat. Cache diberi nama (dataCache
) untuk mengidentifikasinya. Kemudian, cache menyimpan dan mengambil data. -
GetData
Metode ini adalah metode generik yang mengambil dua argumen:string
kunci danFunc<T>
delegasi dipanggil.getData
Kunci digunakan untuk mengidentifikasi data yang di-cache, sedangkangetData
delegasi mewakili logika pengambilan data yang dieksekusi ketika data tidak ada dalam cache. -
Metode pertama memeriksa apakah data ada dalam cache menggunakan
_memoryCache.Contains(key)
metode ini. Jika data berada dalam cache, metode mengambil data dengan menggunakan_memoryCache.Get(key)
dan mengirimkannya ke tipe yang diharapkan T. -
Jika data tidak ada dalam cache, metode memanggil
getData
delegasi untuk mengambil data. Kemudian, ia menambahkan data ke cache dengan menggunakan_memoryCache.Add(key, data, DateTimeOffset.Now.AddMinutes(10))
. Panggilan ini menentukan bahwa entri cache harus kedaluwarsa setelah 10 menit, di mana data dihapus dari cache secara otomatis. -
ClearCache
Metode ini mengambilstring
kunci sebagai argumen dan menghapus data yang terkait dengan kunci itu dari cache dengan menggunakan_memoryCache.Remove(key)
.
using System; using System.Runtime.Caching; public class InMemoryCache { private static MemoryCache _memoryCache = new MemoryCache("dataCache"); public static T GetData<T>(string key, Func<T> getData) { if (_memoryCache.Contains(key)) { return (T)_memoryCache.Get(key); } T data = getData(); _memoryCache.Add(key, data, DateTimeOffset.Now.AddMinutes(10)); return data; } public static void ClearCache(string key) { _memoryCache.Remove(key); } }
Anda dapat menggunakan kode berikut:
public class Program { public static void Main() { string cacheKey = "sample_data"; Func<string> getSampleData = () => { // Replace this with your data retrieval logic return "Sample data"; }; string data = InMemoryCache.GetData(cacheKey, getSampleData); Console.WriteLine("Data: " + data); } }
Contoh berikut menunjukkan cara menggunakan LiteDBLocalStorageCache
Kelas berisi fungsi utama untuk mengelola cache.
using System; using LiteDB; public class LocalStorageCache { private static string _liteDbPath = @"Filename=LocalCache.db"; public static T GetData<T>(string key, Func<T> getData) { using (var db = new LiteDatabase(_liteDbPath)) { var collection = db.GetCollection<T>("cache"); var item = collection.FindOne(Query.EQ("_id", key)); if (item != null) { return item; } } T data = getData(); using (var db = new LiteDatabase(_liteDbPath)) { var collection = db.GetCollection<T>("cache"); collection.Upsert(new BsonValue(key), data); } return data; } public static void ClearCache(string key) { using (var db = new LiteDatabase(_liteDbPath)) { var collection = db.GetCollection("cache"); collection.Delete(key); } } } public class Program { public static void Main() { string cacheKey = "sample_data"; Func<string> getSampleData = () => { // Replace this with your data retrieval logic return "Sample data"; }; string data = LocalStorageCache.GetData(cacheKey, getSampleData); Console.WriteLine("Data: " + data); } }
Jika Anda memiliki cache statis atau file statis yang tidak sering berubah, Anda juga dapat menyimpan file-file ini di penyimpanan objek Amazon Simple Storage Service (Amazon S3). Aplikasi dapat mengambil file cache statis saat startup untuk digunakan secara lokal. Untuk detail selengkapnya tentang cara mengambil file dari Amazon S3 dengan menggunakan. NET, lihat Mengunduh objek dalam dokumentasi Amazon S3.
Caching dengan DAX
Anda dapat menggunakan lapisan caching yang dapat dibagikan di semua instance aplikasi. DynamoDB Accelerator DAX () adalah cache dalam memori yang dikelola sepenuhnya dan sangat tersedia untuk DynamoDB yang dapat memberikan peningkatan kinerja sepuluh kali lipat. Anda dapat menggunakan DAX untuk mengurangi biaya dengan mengurangi kebutuhan untuk kelebihan penyediaan unit kapasitas baca di tabel DynamoDB. Ini sangat berguna untuk beban kerja yang dibaca berat dan memerlukan pembacaan berulang untuk masing-masing kunci.
DynamoDB diberi harga sesuai permintaan atau dengan kapasitas yang disediakan, sehingga jumlah pembacaan dan penulisan per bulan berkontribusi terhadap biaya. Jika Anda telah membaca beban kerja yang berat, DAX cluster dapat membantu menurunkan biaya dengan mengurangi jumlah pembacaan pada tabel DynamoDB Anda. Untuk petunjuk tentang cara mengaturDAX, lihat Akselerasi dalam memori dengan DynamoDB Accelerator (DAX) dalam dokumentasi DynamoDB. Untuk informasi tentang. NETintegrasi aplikasi, tonton Mengintegrasikan DAX Amazon ASP DynamoDB ke dalam Anda. NET
Sumber daya tambahan
-
Akselerasi dalam memori dengan DynamoDB Accelerator () DAX - Amazon DynamoDB (dokumentasi DynamoDB)
-
Mengintegrasikan DAX Amazon ASP DynamoDB ke dalam Anda. NET
Aplikasi (YouTube) -
Mengunduh objek (dokumentasi Amazon S3)