Bagikan melalui


Model sharding

Penting

Azure Cosmos DB for PostgreSQL tidak lagi didukung untuk proyek baru. Jangan gunakan layanan ini untuk proyek baru. Sebagai gantinya, gunakan salah satu dari dua layanan ini:

Sharding adalah teknik yang digunakan dalam sistem database dan komputasi terdistribusi untuk mempartisi data secara horizontal di beberapa server atau simpul. Ini melibatkan pemecahan database besar atau himpunan data menjadi bagian yang lebih kecil dan lebih mudah dikelola yang disebut Shard. Shard berisi subset data, dan bersama-sama shard membentuk himpunan data lengkap.

Azure Cosmos DB for PostgreSQL menawarkan dua jenis pemecahan data, yaitu berbasis baris dan berbasis skema. Setiap opsi dilengkapi dengan tradeoff Sharding sendiri, memungkinkan Anda memilih pendekatan yang paling sesuai dengan kebutuhan aplikasi Anda.

Sharding berbasis baris

Cara tradisional di mana Azure Cosmos DB untuk PostgreSQL memecah tabel adalah melalui model skema bersama dalam satu database yang juga dikenal sebagai sharding berbasis baris, di mana penyewa berbagi tempat sebagai baris dalam tabel yang sama. Penyewa ditentukan dengan menentukan kolom distribusi kolom distribusi, yang memungkinkan pemisahan tabel secara horizontal.

Sharding berbasis baris merupakan cara yang paling efisien untuk perangkat keras. Penyewa ditempatkan secara padat dan didistribusikan di antara simpul-simpul dalam kluster. Namun, pendekatan ini mengharuskan memastikan bahwa semua tabel dalam skema memiliki kolom distribusi dan bahwa semua kueri dalam aplikasi memfilter berdasarkan kolom tersebut. Sharding berbasis baris bersinar dalam beban kerja IoT dan untuk mencapai margin terbaik dari penggunaan perangkat keras.

Keuntungan:

  • Performa terbaik
  • Kepadatan penyewa terbaik per simpul

Halangan-halangan:

  • Memerlukan modifikasi skema
  • Memerlukan perubahan kueri aplikasi
  • Semua penyewa harus berbagi skema yang sama

Sharding berbasis skema

Tersedia dengan Citus 12.0 di Azure Cosmos DB for PostgreSQL, sharding berbasis skema adalah database bersama, model skema terpisah, skema menjadi pecahan logis dalam database. Aplikasi multipenyewa dapat menggunakan skema per penyewa untuk dengan mudah memecah di sepanjang dimensi penyewa. Perubahan kueri tidak diperlukan dan aplikasi hanya memerlukan modifikasi kecil untuk mengatur search_path yang tepat saat beralih penyewa. Sharding berbasis skema adalah solusi ideal untuk layanan mikro serta bagi Vendor Perangkat Lunak Independen (ISV) yang menerapkan aplikasi yang tidak dapat menjalani perubahan yang diperlukan untuk menggunakan pemecahan berbasis baris.

Keuntungan:

  • Penyewa dapat memiliki skema heterogen
  • Tidak diperlukan modifikasi skema
  • Tidak diperlukan modifikasi kueri aplikasi
  • Kompatibilitas SQL sharding berbasis skema lebih baik dibandingkan dengan sharding berbasis baris

Halangan-halangan:

  • Lebih sedikit penyewa per simpul dibandingkan dengan sharding berbasis baris

Tradeoff sharding

Sharding berbasis skema Sharding berbasis baris
Model multipenyewa Skema terpisah untuk setiap penyewa Tabel-tabel yang dibagikan dengan kolom ID penyewa di dalamnya
Versi Citus 12.0+ Semua versi
Langkah tambahan dibandingkan dengan vanilla PostgreSQL Tidak ada, hanya perubahan konfigurasi Gunakan create_distributed_table pada setiap tabel untuk mendistribusikan & mengalokasikan tabel menurut ID penyewa
Jumlah penyewa 1-10 ribu 1-1 M+
Persyaratan pemodelan data Tidak ada kunci asing di seluruh skema terdistribusi Perlu menyertakan kolom ID penyewa (kolom distribusi, juga dikenal sebagai kunci pemartisian) di setiap tabel serta dalam kunci primer dan kunci asing.
Persyaratan SQL untuk kueri simpul tunggal Menggunakan skema terdistribusi tunggal per kueri Klausa JOIN dan WHERE harus menyertakan kolom tenant_id
Permintaan paralel antar penyewa Tidak Ya
Definisi tabel kustom per pengguna Ya Tidak
Kontrol akses Izin skema Izin skema
Berbagi data di seluruh penyewa Ya, menggunakan tabel referensi (dalam skema terpisah) Ya, menggunakan tabel referensi
Penyewa ke isolasi shard Menurut definisi, setiap penyewa memiliki grup shard-nya sendiri. Dapat memberikan ID penyewa tertentu grup shard mereka sendiri dengan memisahkan penyewa ke shard baru.