Halaman ini membandingkan arsitektur Apache Cassandra dan Spanner, serta membantu Anda memahami kemampuan dan batasan antarmuka Cassandra Spanner. Panduan ini mengasumsikan bahwa Anda sudah terbiasa dengan Cassandra dan ingin memigrasikan aplikasi yang ada atau mendesain aplikasi baru sambil menggunakan Spanner sebagai database Anda.
Cassandra dan Spanner adalah database terdistribusi berskala besar yang dibuat untuk aplikasi yang memerlukan skalabilitas tinggi dan latensi rendah. Meskipun kedua database dapat mendukung workload NoSQL yang berat, Spanner menyediakan fitur canggih untuk pemodelan data, kueri, dan operasi transaksional. Untuk mengetahui informasi selengkapnya tentang cara Spanner memenuhi kriteria database NoSQL, lihat Spanner untuk workload non-relasional.
Konsep inti
Bagian ini membandingkan konsep utama Cassandra dan Spanner.
Terminologi
Cassandra | Spanner |
---|---|
Cluster |
Instance Cluster Cassandra setara dengan instance Spanner - kumpulan server dan resource penyimpanan. Karena Spanner adalah layanan terkelola, Anda tidak perlu mengonfigurasi hardware atau software yang mendasarinya. Anda hanya perlu menentukan jumlah node yang ingin Anda cadangkan untuk instance atau menggunakan penskalaan otomatis untuk menskalakan instance secara otomatis. Instance berfungsi seperti penampung untuk database Anda. Anda juga memilih topologi replikasi data (regional, dual-region, atau multi-region) di tingkat instance. |
Keyspace |
Database Keyspace Cassandra setara dengan database Spanner, yang merupakan kumpulan tabel dan elemen skema lainnya (misalnya, indeks dan peran). Tidak seperti keyspace, Anda tidak perlu mengonfigurasi lokasi replikasi. Spanner otomatis mereplikasi data Anda ke region yang ditetapkan di instance Anda. |
Tabel |
Tabel Di Cassandra dan Spanner, tabel adalah kumpulan baris yang diidentifikasi oleh kunci utama yang ditentukan dalam skema tabel. |
Partisi |
Pemisahan Cassandra dan Spanner dapat diskalakan dengan memisahkan data. Di Cassandra, setiap shard disebut partisi, sedangkan di Spanner, setiap shard disebut split. Cassandra menggunakan partisi hash, yang berarti setiap baris ditetapkan secara independen ke node penyimpanan berdasarkan hash kunci utama. Spanner di-shard berdasarkan rentang, yang berarti bahwa baris yang berdekatan di ruang kunci kunci utama juga berdekatan dalam penyimpanan (kecuali di batas pemisahan). Spanner menangani pemisahan dan penggabungan berdasarkan beban dan penyimpanan, dan hal ini transparan bagi aplikasi. Implikasi utamanya adalah bahwa tidak seperti Cassandra, pemindaian rentang melalui awalan kunci utama adalah operasi yang efisien di Spanner. |
Baris |
Baris Di Cassandra dan Spanner, baris adalah kumpulan kolom yang diidentifikasi secara unik oleh kunci utama. Seperti Cassandra, Spanner mendukung kunci utama gabungan. Tidak seperti Cassandra, Spanner tidak membedakan kunci partisi dan kolom pengelompokan, karena data di-shard berdasarkan rentang. Anda dapat menganggap Spanner hanya memiliki kolom pengelompokan, dengan partisi dikelola di balik layar. |
Kolom |
Kolom Di Cassandra dan Spanner, kolom adalah sekumpulan nilai data yang memiliki jenis yang sama. Ada satu nilai untuk setiap baris tabel. Untuk mengetahui informasi selengkapnya tentang membandingkan jenis kolom Cassandra dengan Spanner, lihat Jenis data. |
Arsitektur
Cluster Cassandra terdiri dari serangkaian server dan penyimpanan yang ditempatkan bersama dengan server tersebut. Fungsi hash memetakan baris dari keyspace partisi ke node virtual (vnode). Kemudian, sekumpulan vnode ditetapkan secara acak ke setiap server untuk melayani sebagian keyspace cluster. Penyimpanan untuk vnode terpasang secara lokal ke node penayangan. Driver klien terhubung langsung ke node penayangan dan menangani load balancing serta perutean kueri.
Instance Spanner terdiri dari serangkaian server dalam topologi replikasi. Spanner secara dinamis membagi setiap tabel menjadi rentang baris berdasarkan penggunaan CPU dan disk. Shard ditetapkan ke node komputasi untuk penayangan. Data disimpan secara fisik di Colossus, sistem file terdistribusi Google, terpisah dari node komputasi. Driver klien terhubung ke server frontend Spanner yang melakukan perutean permintaan dan load balancing. Untuk mempelajari lebih lanjut, lihat Laporan resmi tentang proses baca dan tulis Spanner.
Secara umum, kedua arsitektur ini dapat diskalakan saat resource ditambahkan ke cluster yang mendasarinya. Pemisahan komputasi dan penyimpanan Spanner memungkinkan beban di antara node komputasi diseimbangkan kembali lebih cepat sebagai respons terhadap perubahan workload. Tidak seperti Cassandra, pemindahan partisi tidak melibatkan pemindahan data karena data tetap berada di Colossus. Selain itu, partisi berbasis rentang Spanner mungkin lebih alami untuk aplikasi yang mengharapkan data diurutkan berdasarkan kunci partisi. Sisi lain partisi berbasis rentang adalah bahwa workload yang menulis ke satu ujung keyspace (misalnya, tabel yang dikunci oleh stempel waktu saat ini) mungkin memiliki hotspot jika desain skema tambahan tidak dipertimbangkan. Untuk mengetahui informasi selengkapnya tentang teknik mengatasi hotspot, lihat Praktik terbaik desain skema.
Konsistensi
Dengan Cassandra, Anda harus menentukan tingkat konsistensi untuk setiap operasi. Jika Anda menggunakan tingkat konsistensi kuorum, sebagian besar node replika harus merespons node koordinator agar operasi dianggap berhasil. Jika Anda menggunakan tingkat konsistensi satu, Cassandra memerlukan satu node replika untuk merespons agar operasi dianggap berhasil.
Spanner memberikan konsistensi yang kuat. Spanner API tidak mengekspos replika ke klien. Klien Spanner berinteraksi dengan Spanner seolah-olah Spanner adalah database satu mesin. Penulisan selalu ditulis ke sebagian besar replika sebelum Spanner melaporkan keberhasilannya kepada pengguna. Setiap pembacaan berikutnya akan mencerminkan data yang baru ditulis. Aplikasi dapat memilih untuk membaca snapshot database pada waktu di masa lalu, yang mungkin memiliki manfaat performa dibandingkan pembacaan yang kuat. Untuk mengetahui informasi selengkapnya tentang properti konsistensi Spanner, lihat Ringkasan transaksi.
Spanner dibuat untuk mendukung konsistensi dan ketersediaan yang diperlukan dalam aplikasi berskala besar. Spanner memberikan konsistensi kuat dalam skala besar dan dengan performa tinggi. Untuk kasus penggunaan yang memerlukannya, Spanner mendukung pembacaan snapshot (tidak terbaru) yang mengurangi persyaratan keaktualan.
Antarmuka Cassandra
Antarmuka Cassandra memungkinkan Anda memanfaatkan infrastruktur Spanner yang terkelola sepenuhnya, skalabel, dan memiliki ketersediaan tinggi menggunakan alat dan sintaksis Cassandra yang sudah dikenal. Halaman ini membantu Anda memahami kemampuan dan batasan antarmuka Cassandra.
Manfaat antarmuka Cassandra
- Portabilitas: antarmuka Cassandra menyediakan akses ke berbagai fitur Spanner, menggunakan skema, kueri, dan klien yang kompatibel dengan Cassandra. Hal ini menyederhanakan pemindahan aplikasi yang dibangun di Spanner ke lingkungan Cassandra lain atau sebaliknya. Portabilitas ini memberikan fleksibilitas deployment dan mendukung skenario pemulihan dari bencana, seperti keluar paksa.
- Keakraban: jika sudah menggunakan Cassandra, Anda dapat mulai menggunakan Spanner dengan cepat menggunakan banyak pernyataan dan jenis CQL yang sama.
- Spanner yang tidak berkompromi: karena dibangun di atas fondasi Spanner yang ada, antarmuka Cassandra memberikan semua manfaat ketersediaan, konsistensi, dan rasio harga-performa Spanner yang ada tanpa harus mengorbankan kemampuan apa pun yang tersedia di ekosistem GoogleSQL yang saling melengkapi.
Kompatibilitas CQL
Dukungan dialek CQL: Spanner menyediakan subset dialek CQL, termasuk Bahasa Kueri Data (DQL), Bahasa Pengolahan Data (DML), transaksi ringan (LWT), fungsi agregat dan tanggal/waktu.
Fungsi Cassandra yang didukung: antarmuka Cassandra mendukung banyak fitur Cassandra yang paling umum digunakan. Ini mencakup bagian inti skema dan sistem jenis, banyak bentuk kueri umum, berbagai fungsi dan operator, serta aspek utama katalog sistem Cassandra. Aplikasi dapat menggunakan banyak klien atau driver Cassandra dengan terhubung melalui penerapan protokol wire Cassandra di Spanner.
Dukungan protokol klien dan wire: Spanner mendukung kemampuan kueri inti protokol wire Cassandra v4 menggunakan Cassandra Adapter, klien ringan yang berjalan bersama aplikasi Anda. Hal ini memungkinkan banyak klien Cassandra berfungsi sebagaimana adanya dengan database antarmuka Spanner Cassandra, sekaligus memanfaatkan pengelolaan koneksi dan endpoint global serta autentikasi IAM Spanner.
Jenis data Cassandra yang didukung
Tabel berikut menunjukkan jenis data Cassandra yang didukung dan memetakan setiap jenis data ke jenis data GoogleSQL Spanner yang setara.
Jenis data Cassandra yang didukung | Jenis data GoogleSQL Spanner | |
---|---|---|
Jenis numerik | tinyint (bilangan bulat 8-bit yang telah ditandai) |
INT64 (bilangan bulat 64-bit yang telah ditandai)
Spanner mendukung satu jenis data lebar 64-bit untuk bilangan bulat bertanda. |
smallint (bilangan bulat 16-bit yang telah ditandai) |
||
int (bilangan bulat 32-bit yang telah ditandai) |
||
bigint (bilangan bulat 64-bit yang telah ditandai) |
||
float (floating point IEEE-754 32-bit) |
FLOAT32 (floating point IEEE-754 32-bit) |
|
double (floating point IEEE-754 64-bit) |
FLOAT64 (floating point IEEE-754 64-bit) |
|
decimal |
Untuk angka desimal presisi tetap, gunakan jenis data
NUMERIC (presisi 38 skala 9). |
|
varint (bilangan bulat presisi variabel) |
||
Jenis string | text |
STRING(MAX)
|
varchar |
||
ascii |
STRING(MAX) |
|
uuid |
STRING(MAX) |
|
inet |
STRING(MAX) |
|
blob |
BYTES(MAX)
Untuk menyimpan data biner, gunakan jenis data |
|
Jenis tanggal dan waktu | date |
DATE |
time |
INT64
Spanner tidak mendukung jenis data waktu khusus. Gunakan
|
|
timestamp |
TIMESTAMP |
|
timeuuid |
STRING(MAX) |
|
Jenis penampung | set |
ARRAY
Spanner tidak mendukung jenis data |
list |
ARRAY
Gunakan |
|
map |
JSON
Spanner tidak mendukung jenis peta khusus. Gunakan kolom
|
|
Jenis lainnya | boolean |
BOOL |
counter |
INT64 |
Anotasi jenis data
Opsi kolom cassandra_type
memungkinkan Anda menentukan pemetaan antara jenis data Cassandra dan Spanner. Saat membuat tabel di Spanner yang ingin Anda ajak berinteraksi menggunakan kueri yang kompatibel dengan Cassandra, Anda dapat menggunakan opsi cassandra_type
untuk menentukan jenis data Cassandra yang sesuai untuk setiap kolom. Pemetaan ini kemudian digunakan oleh Spanner untuk menafsirkan dan mengonversi data dengan benar saat mentransfernya di antara dua sistem database.
Misalnya, jika ada tabel di Cassandra dengan skema berikut:
CREATE TABLE Albums (
albumId uuid,
title varchar,
artists set<varchar>,
tags map<varchar, varchar>,
numberOfSongs tinyint,
releaseDate date,
copiesSold bigint,
score frozen<set<int>>
....
PRIMARY KEY(albumId)
)
Di Spanner, Anda menggunakan anotasi jenis untuk memetakan ke jenis data Cassandra, seperti yang ditunjukkan berikut:
CREATE TABLE Albums (
albumId STRING(MAX) OPTIONS (cassandra_type = 'uuid'),
title STRING(MAX) OPTIONS (cassandra_type = 'varchar'),
artists ARRAY<STRING(max)> OPTIONS (cassandra_type = 'set<varchar>'),
tags JSON OPTIONS (cassandra_type = 'map<varchar, varchar>'),
numberOfSongs INT64 OPTIONS (cassandra_type = 'tinyint'),
releaseDate DATE OPTIONS (cassandra_type = 'date'),
copiesSold INT64 OPTIONS (cassandra_type = 'bigint'),
score ARRAY<INT64> OPTIONS (cassandra_type = 'frozen<set<int>>')
...
) PRIMARY KEY (albumId);
Pada contoh sebelumnya, klausa OPTIONS
memetakan jenis data Spanner kolom ke jenis data Cassandra yang sesuai.
albumId
(SpannerSTRING(MAX)
) dipetakan keuuid
di Cassandra.title
(SpannerSTRING(MAX)
) dipetakan kevarchar
di Cassandra.artists
(SpannerARRAY<STRING(MAX)>
) dipetakan keset<varchar>
di Cassandra.tags
(SpannerJSON
) dipetakan kemap<varchar,varchar>
di Cassandra.numberOfSongs
(SpannerINT64
) dipetakan ketinyint
di Cassandra.releaseDate
(SpannerDATE
) dipetakan kedate
di Cassandra.copiesSold
(SpannerINT64
) dipetakan kebigint
di Cassandra.score
(SpannerARRAY<INT64>
) dipetakan kefrozen<set<int>>
di Cassandra.
Mengubah opsi cassandra_type
Anda dapat menggunakan pernyataan ALTER TABLE
untuk menambahkan atau mengubah opsi cassandra_type
pada kolom yang ada.
Untuk menambahkan opsi cassandra_type
ke kolom yang belum memilikinya, gunakan pernyataan berikut:
ALTER TABLE Albums ALTER COLUMN uuid SET OPTIONS (cassandra_type='uuid');
Dalam contoh ini, kolom uuid
di tabel Album diperbarui dengan opsi
cassandra_type
yang ditetapkan ke uuid
.
Untuk mengubah opsi cassandra_type
yang ada, gunakan pernyataan ALTER TABLE
dengan nilai cassandra_type
baru. Misalnya, untuk mengubah cassandra_type
kolom numberOfSongs
di tabel Album dari tinyint
menjadi bigint
,
gunakan pernyataan berikut:
ALTER TABLE Albums ALTER COLUMN numberOfSongs SET OPTIONS (cassandra_type='bigint');
Anda hanya diizinkan untuk mengubah jenis berikut:
Dari | Ke |
---|---|
tinyint | smallint, int, bigint |
smallint | int, bigint |
int | bigint |
float | double |
teks biasa | varchar |
ascii | varchar, text |
Pemetaan langsung dan bernuansa
Dalam banyak kasus, pemetaan antara jenis data Spanner dan Cassandra
cukup mudah. Misalnya, STRING(MAX)
Spanner dipetakan ke varchar
Cassandra, dan INT64
Spanner dipetakan ke bigint
Cassandra.
Namun, ada situasi saat pemetaan memerlukan lebih banyak pertimbangan dan penyesuaian. Misalnya, Anda mungkin perlu memetakan smallint
Cassandra
ke INT64
Spanner.
Fungsi Cassandra yang didukung
Bagian ini mencantumkan fungsi Cassandra yang didukung di Spanner.
Daftar berikut menunjukkan dukungan Spanner untuk fungsi Cassandra.
- Semua fungsi agregat
- Semua fungsi tanggal dan waktu kecuali
currentTimeUUID
- Semua fungsi transmisi kecuali fungsi konversi blob
- Semua fungsi transaksi ringan kecuali untuk kondisi
BATCH
- Tidak ada fungsi kueri berikut:
Time to live (TTL)
Saat bermigrasi dari Cassandra, tambahkan kebijakan penghapusan baris ke tabel Spanner Anda untuk menggunakan opsi USING TTL
dalam pernyataan INSERT
atau UPDATE
atau TTL Spanner.
Logika TTL Spanner beroperasi di tingkat baris, berbeda dengan Cassandra, yang logika TTL-nya dapat diterapkan di tingkat sel. Untuk menggunakan TTL Spanner, Anda harus menyertakan kolom stempel waktu dan interval waktu dalam kebijakan penghapusan baris. Spanner menghapus baris setelah baris melampaui durasi yang ditentukan relatif terhadap stempel waktu.
Penghapusan TTL Spanner tidak instan. Proses latar belakang asinkron menghapus baris yang sudah tidak berlaku, dan penghapusan dapat memerlukan waktu hingga 72 jam.
Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan TTL pada data Cassandra.
Fitur Cassandra yang tidak didukung di Spanner
Penting untuk dipahami bahwa antarmuka Cassandra menyediakan kemampuan Spanner melalui skema, jenis, kueri, dan klien yang kompatibel dengan Cassandra. Fitur ini tidak mendukung semua fitur Cassandra. Memigrasikan aplikasi Cassandra yang ada ke Spanner, meskipun menggunakan antarmuka Cassandra, kemungkinan memerlukan beberapa pengerjaan ulang untuk mengakomodasi kemampuan Cassandra yang tidak didukung atau perbedaan perilaku, seperti pengoptimalan kueri atau desain kunci utama. Namun, setelah dimigrasikan, workload Anda dapat memanfaatkan keandalan Spanner dan kemampuan multi-model yang unik.
Daftar berikut memberikan informasi selengkapnya tentang fitur Cassandra yang tidak didukung:
- Beberapa fitur bahasa CQL tidak didukung: jenis dan fungsi yang ditentukan pengguna, stempel waktu penulisan.
- Spanner dan Google Cloud control plane: database dengan
antarmuka Cassandra menggunakan Spanner dan alat Google Cloud
untuk menyediakan, mengamankan, memantau, dan mengoptimalkan instance.
Spanner tidak mendukung alat, seperti
nodetool
untuk aktivitas administratif.
Dukungan DDL
Pernyataan DDL CQL tidak didukung secara langsung menggunakan antarmuka Cassandra. Untuk perubahan DDL, Anda harus menggunakan konsol Google Cloud Spanner, perintah gcloud, atau library klien.
Konektivitas
Dukungan klien Cassandra
Spanner memungkinkan Anda terhubung ke database dari berbagai klien:
- Cassandra Adapter dapat digunakan sebagai helper dalam proses atau sebagai proxy file bantuan untuk menghubungkan aplikasi Cassandra Anda ke antarmuka Cassandra. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke Spanner menggunakan Cassandra Adapter.
- Cassandra Adapter dapat dimulai sebagai proses mandiri secara lokal dan terhubung menggunakan
CQLSH
. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan antarmuka Cassandra ke aplikasi Anda.
Kontrol akses dengan Identity and Access Management
Anda harus memiliki izin spanner.databases.adapt
, spanner.databases.select
, dan
spanner.databases.write
untuk melakukan operasi baca dan tulis
terhadap endpoint Cassandra. Untuk mengetahui informasi selengkapnya, lihat
Ringkasan IAM.
Untuk mengetahui informasi selengkapnya tentang cara memberikan izin IAM Spanner, lihat Menerapkan peran IAM.
Pemantauan
Spanner menyediakan metrik berikut untuk membantu Anda memantau Cassandra Adapter:
spanner.googleapis.com/api/adapter_request_count
: mencatat dan mengekspos jumlah permintaan adaptor yang dilakukan Spanner per detik, atau jumlah error yang terjadi di server Spanner per detik.spanner.googleapis.com/api/adapter_request_latencies
: mencatat dan mengekspos jumlah waktu yang diperlukan Spanner untuk menangani permintaan adaptor.
Anda dapat membuat dasbor Cloud Monitoring kustom untuk menampilkan dan memantau metrik untuk Cassandra Adapter. Dasbor kustom berisi diagram berikut:
Latensi Permintaan P99: Distribusi persentil ke-99 latensi permintaan server per
message_type
untuk database Anda.Latensi Permintaan P50: Distribusi persentil ke-50 latensi permintaan server per
message_type
untuk database Anda.Jumlah Permintaan API menurut Jenis Pesan: Jumlah permintaan API per
message_type
untuk database Anda.Jumlah Permintaan API menurut Jenis Operasi: Jumlah permintaan API per
op_type
untuk database Anda.Tingkat Error: Tingkat error API untuk database Anda.
Google Cloud console
- Download file
cassandra-adapter-dashboard.json
. File ini memiliki informasi yang diperlukan untuk mengisi dasbor kustom di Monitoring. -
Di konsol Google Cloud , buka halaman
Dashboards:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.
- Di halaman Dashboards Overview, klik Create Custom Dashboard.
- Di toolbar dasbor, klik ikon Setelan dasbor. Kemudian pilih JSON, lalu Editor JSON.
- Di panel JSON Editor, salin konten file
cassandra-adapter-dashboard.json
yang Anda download dan tempelkan di editor. - Untuk menerapkan perubahan pada dasbor, klik Terapkan perubahan. Jika Anda tidak ingin menggunakan dasbor ini, kembali ke halaman Ringkasan Dasbor.
- Setelah dasbor dibuat, klik Tambahkan Filter. Kemudian, pilih
project_id
atauinstance_id
untuk memantau Cassandra Adapter.
gcloud CLI
- Download file
cassandra-adapter-dashboard.json
. File ini memiliki informasi yang diperlukan untuk mengisi dasbor kustom di Monitoring. Untuk membuat dasbor dalam project, gunakan perintah
gcloud monitoring dashboards create
:gcloud monitoring dashboards create --config-from-file=cassandra-adapter-dashboard.json
Untuk informasi selengkapnya, lihat referensi
gcloud monitoring dashboards create
.
Selain itu, metrik Spanner berikut berguna untuk memantau Cassandra Adapter:
- Metrik pemakaian CPU memberikan informasi tentang penggunaan CPU untuk tugas pengguna dan sistem dengan perincian menurut prioritas dan jenis operasi.
- Metrik penggunaan penyimpanan memberikan informasi tentang penyimpanan database dan cadangan.
- Tabel statistik bawaan Spanner memberikan insight tentang kueri, transaksi, dan pembacaan untuk membantu Anda menemukan masalah dalam database Anda.
Untuk mengetahui daftar lengkap insight sistem, lihat Memantau instance dengan insight sistem. Untuk mempelajari lebih lanjut cara memantau resource Spanner, lihat Memantau instance dengan Cloud Monitoring.
Harga
Tidak ada biaya tambahan untuk menggunakan endpoint Cassandra. Anda akan dikenai biaya sesuai harga Spanner standar untuk jumlah kapasitas komputasi yang digunakan instance Anda dan jumlah penyimpanan yang digunakan database Anda.
Untuk mengetahui informasi selengkapnya, lihat Harga Spanner.
Langkah berikutnya
- Pelajari cara Bermigrasi dari Cassandra ke Spanner.
- Pelajari cara Menghubungkan ke Spanner menggunakan Cassandra Adapter.
- Coba codelab Spanner untuk pengguna Cassandra.