Model sharding

BERLAKU UNTUK: Azure Cosmos DB for PostgreSQL (didukung oleh ekstensi database Citus ke PostgreSQL)

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 tabel pecahan Azure Cosmos DB for PostgreSQL adalah database tunggal, model skema bersama yang juga dikenal sebagai sharding berbasis baris, penyewa hidup berdampingan sebagai baris dalam tabel yang sama. Penyewa ditentukan dengan menentukan kolom distribusi, yang memungkinkan pemisahan tabel secara horizontal.

Berbasis baris adalah cara sharding yang paling efisien untuk perangkat keras. Penyewa dikemas dan didistribusikan secara padat di antara simpul dalam kluster. Namun pendekatan ini mengharuskan memastikan bahwa semua tabel dalam skema memiliki kolom distribusi dan bahwa semua kueri dalam filter aplikasi olehnya. 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 modifikasi 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, dan untuk ISV yang menyebarkan aplikasi yang tidak dapat menjalani perubahan yang diperlukan untuk pemecahan berbasis baris onboard.

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 per penyewa Tabel bersama dengan kolom ID penyewa
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-10k 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 sharding) di setiap tabel, dan di kunci primer, kunci asing
Persyaratan SQL untuk kueri simpul tunggal Menggunakan skema terdistribusi tunggal per kueri Klausa Gabungan dan WHERE harus menyertakan kolom tenant_id
Kueri lintas penyewa paralel Tidak Ya
Definisi tabel kustom per penyewa 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 Setiap penyewa memiliki grup shard sendiri menurut definisi Dapat memberikan ID penyewa tertentu grup shard mereka sendiri melalui isolate_tenant_to_new_shard