Optimalkan biaya penyimpanan di Azure Cosmos DB

BERLAKU UNTUK: Nosql MongoDB Cassandra Gremlin Meja

Microsoft Azure Cosmos DB menawarkan penyimpanan dan throughput tanpa batas. Tidak seperti throughput, yang harus Anda provisikan/konfigurasikan pada kontainer atau database Azure Cosmos DB Anda, penyimpanan ditagih berdasarkan konsumsi. Anda ditagih hanya untuk penyimpanan logis yang Anda konsumsi dan tidak perlu memesan penyimpanan terlebih dahulu. Penyimpanan secara otomatis meningkatkan dan menurunkan skala berdasarkan data yang Anda tambahkan atau hapus ke kontainer Azure Cosmos DB.

Biaya penyimpanan

Penyimpanan ditagih sesuai satuan GB. Penyimpanan lokal yang didukung SSD digunakan oleh data dan pengindeksan Anda. Total penyimpanan yang digunakan sama dengan penyimpanan yang diperlukan oleh data dan indeks yang digunakan di semua wilayah tempat Anda menggunakan Azure Cosmos DB. Jika Anda mereplikasi akun Azure Cosmos DB secara global di tiga wilayah, Anda akan membayar total biaya penyimpanan di masing-masing dari ketiga wilayah tersebut. Untuk memperkirakan kebutuhan penyimpanan Anda, lihat alat perencana kapasitas. Biaya untuk penyimpanan di Azure Cosmos DB adalah $0,25 GB/bulan, lihat Halaman harga untuk pembaruan terbaru. Anda dapat menyiapkan pemberitahuan untuk menentukan penyimpanan yang digunakan oleh kontainer Azure Cosmos DB Anda, untuk memantau penyimpanan Anda, lihat artikel Memantau Azure Cosmos DB).

Optimalkan biaya dengan ukuran item

Azure Cosmos DB mengharapkan ukuran item sebesar 2 MB atau kurang demi manfaat performa dan biaya yang optimal. Jika Anda memerlukan item apa pun untuk menyimpan data lebih besar dari 2 MB, pertimbangkan untuk mendesain ulang skema item. Seandainya timbul peristiwa yang jarang terjadi, di mana Anda tidak dapat mendesain ulang skema, Anda dapat membagi item menjadi beberapa subitem dan menautkannya secara logis dengan pengidentifikasi umum (ID). Semua fitur Azure Cosmos DB bekerja secara konsisten dengan menjangkar ke pengidentifikasi logis tersebut.

Optimalkan biaya dengan pengindeksan

Secara default, data diindekskan secara otomatis, yang dapat meningkatkan total penyimpanan yang dikonsumsi. Namun, Anda dapat menerapkan kebijakan indeks kustom untuk mengurangi kelebihan ini. Pengindeksan otomatis yang belum disesuaikan melalui kebijakan adalah sekitar 10-20% dari ukuran item. Dengan menghapus atau menyesuaikan kebijakan indeks, Anda tidak membayar biaya tambahan untuk operasi tulis dan tidak memerlukan kapasitas throughput tambahan. Lihat Pengindeksan di Azure Cosmos DB untuk mengonfigurasi kebijakan pengindeksan kustom. Jika Anda pernah bekerja dengan database relasional sebelumnya, Anda mungkin berpikir bahwa "mengindeks semuanya" berarti membuat penyimpanan berlipat ganda atau lebih tinggi. Namun, di Azure Cosmos DB, dalam kasus median, ini jauh lebih rendah. Di Azure Cosmos DB, kelebihan penyimpanan indeks biasanya rendah (10-20%) bahkan dengan pengindeksan otomatis, karena dirancang untuk jejak penyimpanan yang rendah. Dengan mengelola kebijakan pengindeksan, Anda dapat mengontrol pertukaran jejak indeks dan performa kueri dengan cara yang lebih mulus.

Optimalkan biaya dengan waktu hidup dan umpan perubahan

Setelah Anda tidak lagi memerlukan data, Anda dapat menghapusnya dengan anggun dari akun Azure Cosmos DB Anda dengan menggunakan waktu hidup, ubah umpan, atau Anda dapat memigrasikan data lama ke penyimpanan data lain seperti penyimpanan blob Azure atau gudang data Azure. Dengan time to live atau TTL, Azure Cosmos DB menyediakan kemampuan untuk menghapus item secara otomatis dari kontainer setelah jangka waktu tertentu. Secara default, Anda dapat mengatur waktu hidup di tingkat kontainer dan mengambil alih nilai berbasis per item. Setelah Anda mengatur TTL di kontainer atau pada tingkat item, Azure Cosmos DB akan secara otomatis menghapus item ini setelah jangka waktu berlalu sejak item tersebut terakhir kali dimodifikasi. Dengan menggunakan umpan perubahan, Anda dapat memigrasikan data ke kontainer lain di Azure Cosmos DB, atau ke penyimpanan data eksternal. Migrasi membutuhkan waktu henti nol dan ketika Anda selesai bermigrasi, Anda dapat menghapus atau mengonfigurasi waktu hidup untuk menghapus kontainer Azure Cosmos DB sumber.

Optimalkan biaya dengan jenis data media yang kaya

Jika Anda ingin menyimpan jenis media yang kaya, misalnya: video, gambar, dll., Anda memiliki sejumlah opsi di Azure Cosmos DB. Salah satu opsinya adalah menyimpan jenis media kaya ini sebagai item Azure Cosmos DB. Ada batas 2-MB per item, dan Anda dapat menghindari batas ini dengan menautkan item data ke dalam beberapa subitem. Atau Anda dapat menyimpannya di penyimpanan Azure Blob dan menggunakan metadata untuk mereferensikannya dari item Azure Cosmos DB Anda. Ada sejumlah pro dan kontra seputar pendekatan ini. Pendekatan pertama memberi Anda performa terbaik dalam hal latensi, throughput SLA ditambah kemampuan distribusi global turnkey untuk jenis data media yang kaya selain item Azure Cosmos DB reguler Anda. Namun, dukungan tersedia dengan harga yang lebih tinggi. Dengan menyimpan media dalam penyimpanan Azure Blob, Anda dapat menekan biaya keseluruhan Anda. Jika latensi sangat penting, Anda dapat menggunakan penyimpanan premium untuk file media kaya yang dirujuk dari item Azure Cosmos DB. Ini terintegrasi secara asli dengan CDN untuk menyajikan gambar dari server tepi dengan biaya lebih rendah untuk menghindari pembatasan geografis. Kekurangan skenario ini adalah Anda harus menangani dua layanan - Azure Cosmos DB dan penyimpanan Azure Blob, yang dapat meningkatkan biaya operasional.

Memeriksa penyimpanan yang digunakan

Untuk memeriksa konsumsi penyimpanan kontainer Azure Cosmos DB, Anda dapat menjalankan permintaan HEAD atau GET pada kontainer, dan memeriksa x-ms-request-quota header dan x-ms-request-usage . Atau, ketika bekerja dengan .NET SDK, Anda dapat menggunakan properti DocumentSizeQuota dan DocumentSizeUsage untuk mengetahui penyimpanan yang digunakan.

Menggunakan SDK

// Measure the item size usage (which includes the index size)
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));   

Console.WriteLine("Item size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);

Langkah berikutnya

Berikutnya, Anda dapat lanjut mempelajari pengoptimalan biaya di Microsoft Azure Cosmos DB dengan artikel berikut: