Ringkasan Bigtable

Bigtable adalah tabel berpenduduk sedikit yang dapat diskalakan hingga miliaran baris dan ribuan kolom, sehingga Anda dapat menyimpan data dalam hitungan terabyte atau bahkan petabyte. Satu nilai di setiap baris diindeks; nilai ini dikenal sebagai kunci baris. Bigtable ideal untuk menyimpan data satu kunci dalam jumlah besar dengan latensi rendah. Layanan ini mendukung throughput baca dan tulis yang tinggi pada latensi rendah, dan merupakan sumber data yang ideal untuk operasi MapReduce.

Bigtable terekspos ke aplikasi melalui beberapa library klien, termasuk ekstensi yang didukung untuk library Apache HBase untuk Java. Hasilnya, BigQuery terintegrasi dengan ekosistem software big data open source Apache yang sudah ada.

Server backend Bigtable yang canggih menawarkan beberapa keunggulan utama dibandingkan penginstalan HBase yang dikelola sendiri:

  • Skalabilitas luar biasa. Bigtable melakukan penskalaan langsung sesuai jumlah mesin di cluster Anda. Penginstalan HBase yang dikelola sendiri memiliki bottleneck desain yang membatasi performa setelah batas tertentu tercapai. Bigtable tidak memiliki hambatan ini, sehingga Anda dapat meningkatkan skala cluster untuk menangani lebih banyak pembacaan dan penulisan.
  • Administrasi yang sederhana. Bigtable menangani upgrade dan memulai ulang secara transparan, dan otomatis mempertahankan daya tahan data yang tinggi. Untuk mereplikasi data, cukup tambahkan cluster kedua ke instance Anda, dan replikasi akan dimulai secara otomatis. Tidak perlu lagi mengelola replika atau region; cukup desain skema tabel Anda, dan Bigtable akan menangani sisanya untuk Anda.
  • Pengubahan ukuran cluster tanpa periode nonaktif. Anda dapat meningkatkan ukuran cluster Bigtable selama beberapa jam untuk menangani beban yang besar, lalu mengurangi ukuran cluster lagi. Semuanya dapat dilakukan tanpa periode nonaktif. Setelah ukuran cluster diubah, biasanya Bigtable hanya memerlukan waktu beberapa menit untuk menyeimbangkan performa di semua node di cluster Anda.

Efektif untuk

Bigtable ideal untuk aplikasi yang memerlukan throughput dan skalabilitas tinggi untuk data kunci/nilai, dengan setiap nilai biasanya tidak lebih dari 10 MB. Bigtable juga unggul sebagai mesin penyimpanan untuk operasi MapReduce batch, pemrosesan/analisis stream, dan aplikasi machine learning.

Anda dapat menggunakan Bigtable untuk menyimpan dan membuat kueri semua jenis data berikut:

  • Data deret waktu, seperti penggunaan CPU dan memori dari waktu ke waktu untuk beberapa server.
  • Data pemasaran, seperti histori pembelian dan preferensi pelanggan.
  • Data keuangan, seperti histori transaksi, harga saham, dan nilai tukar mata uang.
  • Data Internet of Things, seperti laporan penggunaan dari pengukur energi dan peralatan rumah tangga.
  • Data grafik, seperti informasi tentang cara pengguna terhubung satu sama lain.

Model penyimpanan Bigtable

Bigtable menyimpan data dalam tabel yang sangat skalabel, yang masing-masing merupakan peta kunci/nilai yang diurutkan. Tabel terdiri dari baris, yang masing-masing biasanya mendeskripsikan satu entity, dan kolom, yang berisi nilai individual untuk setiap baris. Setiap baris diindeks oleh satu kunci baris, dan kolom yang terkait satu sama lain biasanya dikelompokkan ke dalam kelompok kolom. Setiap kolom diidentifikasi dengan kombinasi grup kolom dan penentu kolom, yang merupakan nama unik dalam grup kolom.

Setiap persimpangan baris/kolom dapat berisi beberapa sel. Setiap sel berisi versi data dengan stempel waktu yang unik untuk baris dan kolom tersebut. Menyimpan beberapa sel dalam satu kolom memberikan catatan tentang bagaimana data yang disimpan untuk baris dan kolom tersebut telah berubah dari waktu ke waktu. Tabel Bigtable sparse; jika tidak digunakan dalam baris tertentu, kolom tersebut tidak akan memakan ruang.

Diagram model penyimpanan Bigtable

Beberapa hal yang perlu diperhatikan dalam ilustrasi ini:

  • Kolom tidak dapat digunakan di baris.
  • Setiap sel di baris dan kolom tertentu memiliki stempel waktu unik (t).

Arsitektur Bigtable

Diagram berikut menunjukkan versi sederhana dari arsitektur keseluruhan Bigtable:

Keseluruhan arsitektur
Bigtable.

Seperti yang digambarkan dalam diagram, semua permintaan klien melewati server frontend sebelum dikirim ke node Bigtable. (Dalam kertas Bigtable asli, node ini disebut "server tablet".) Node tersebut disusun menjadi cluster Bigtable, yang termasuk dalam instance Bigtable, yang merupakan container untuk cluster.

Setiap node dalam cluster menangani subset permintaan ke cluster. Dengan menambahkan node ke cluster, Anda dapat meningkatkan jumlah permintaan serentak yang dapat ditangani cluster. Menambahkan node juga akan meningkatkan throughput maksimum untuk cluster. Jika mengaktifkan replikasi dengan menambahkan cluster tambahan, Anda juga dapat mengirim berbagai jenis traffic ke cluster yang berbeda. Kemudian, jika satu cluster menjadi tidak tersedia, Anda dapat beralih ke cluster lain.

Tabel Bigtable di-sharding menjadi blok baris yang berdekatan, yang disebut tablet, untuk membantu menyeimbangkan beban kerja kueri. (Tablet mirip dengan region HBase.) Tablet disimpan di Colossus, sistem file Google, dalam format SSTable. SSTable menyediakan peta persisten yang diurutkan dan tidak dapat diubah dari kunci ke nilai, dengan kunci dan nilai berupa string byte arbitrer. Setiap tablet dikaitkan dengan node Bigtable tertentu. Selain file SSTable, semua operasi tulis disimpan di log bersama Colossus segera setelah dikonfirmasi oleh Bigtable, sehingga memberikan ketahanan yang lebih baik.

Yang penting, data tidak pernah disimpan dalam node Bigtable sendiri; setiap node memiliki pointer ke kumpulan tablet yang disimpan di Colossus. Hasilnya:

  • Menyeimbangkan ulang tablet dari satu node ke node lainnya terjadi dengan cepat karena data sebenarnya tidak disalin. Bigtable memperbarui pointer untuk setiap node.
  • Pemulihan dari kegagalan node Bigtable dapat dilakukan dengan cepat, karena hanya metadata yang harus dimigrasikan ke node pengganti.
  • Jika node Bigtable gagal, tidak ada data yang hilang.

Baca Instance, Cluster, dan Node untuk mengetahui informasi selengkapnya tentang cara menggunakan elemen penyusun dasar ini.

Load balancing

Setiap zona Bigtable dikelola oleh proses utama, yang menyeimbangkan beban kerja dan volume data dalam cluster. Proses ini membagi tablet yang lebih sibuk/lebih besar menjadi dua dan menggabungkan tablet yang kurang diakses/lebih kecil, dan mendistribusikannya kembali antar-node sesuai kebutuhan. Jika tablet tertentu mendapatkan lonjakan traffic, Bigtable akan membagi tablet tersebut menjadi dua, lalu memindahkan salah satu tablet baru ke node lainnya. Bigtable mengelola pemisahan, penggabungan, dan penyeimbangan ulang secara otomatis, sehingga Anda tidak perlu repot mengelola tablet secara manual. Memahami performa memberikan detail selengkapnya tentang proses ini.

Untuk mendapatkan performa penulisan terbaik dari Bigtable, penting untuk mendistribusikan penulisan secara merata di seluruh node. Salah satu cara untuk mencapai sasaran ini adalah dengan menggunakan row key yang tidak mengikuti urutan yang dapat diprediksi. Misalnya, nama pengguna cenderung didistribusikan kurang lebih secara merata di seluruh alfabet. Jadi, menyertakan nama pengguna di awal row key akan cenderung mendistribusikan penulisan secara merata.

Pada saat yang sama, hal ini berguna untuk mengelompokkan baris yang terkait sehingga baris tersebut bersebelahan satu sama lain, sehingga jauh lebih efisien untuk membaca beberapa baris secara bersamaan. Misalnya, jika Anda menyimpan berbagai jenis data cuaca dari waktu ke waktu, kunci baris Anda mungkin merupakan lokasi pengumpulan data, diikuti dengan stempel waktu (misalnya, WashingtonDC#201803061617). Jenis kunci baris ini akan mengelompokkan semua data dari satu lokasi ke dalam rentang baris yang berdekatan. Untuk lokasi lain, baris akan dimulai dengan ID yang berbeda; dengan banyak lokasi yang mengumpulkan data dengan kecepatan yang sama, operasi tulis akan tetap disebarkan secara merata di seluruh tablet.

Lihat Memilih kunci baris untuk mengetahui detail selengkapnya tentang cara memilih kunci baris yang sesuai untuk data Anda.

Jenis data yang didukung

Bigtable memperlakukan semua data sebagai string byte mentah untuk sebagian besar tujuan. Bigtable hanya mencoba menentukan jenis ini untuk operasi inkremental, dengan target harus berupa bilangan bulat 64-bit yang dienkode sebagai nilai big-endian 8 byte.

Penggunaan memori dan disk

Bagian berikut menjelaskan pengaruh beberapa komponen Bigtable terhadap penggunaan memori dan disk untuk instance Anda.

Kolom yang tidak digunakan

Kolom yang tidak digunakan di baris Bigtable tidak akan menggunakan ruang di baris tersebut. Setiap baris pada dasarnya merupakan kumpulan entri kunci/nilai, dengan kuncinya adalah kombinasi dari grup kolom, penentu kolom, dan stempel waktu. Jika baris tidak menyertakan nilai untuk kolom tertentu, entri kunci/nilai tidak akan ada.

Penentu kolom

Penentu kolom menghabiskan ruang dalam satu baris, karena setiap penentu kolom yang digunakan dalam baris disimpan di baris tersebut. Akibatnya, menggunakan penentu kolom sebagai data sering kali efisien.

Pemadatan

Bigtable secara berkala menulis ulang tabel Anda untuk menghapus entri yang dihapus, dan mengatur ulang data agar operasi baca dan tulis menjadi lebih efisien. Proses ini dikenal sebagai pemadatan. Tidak ada setelan konfigurasi untuk pemadatan—Bigtable akan memadatkan data Anda secara otomatis.

Mutasi dan penghapusan

Mutasi, atau perubahan, pada baris menggunakan ruang penyimpanan ekstra, karena Bigtable menyimpan mutasi secara berurutan dan memadatkannya secara berkala. Ketika Bigtable memadatkan tabel, Bigtable akan menghapus nilai yang tidak lagi diperlukan. Jika Anda memperbarui nilai di dalam sel, nilai asli dan nilai baru akan disimpan di disk selama beberapa waktu hingga data dipadatkan.

Penghapusan juga memerlukan ruang penyimpanan tambahan, setidaknya dalam jangka pendek, karena penghapusan sebenarnya adalah jenis mutasi khusus. Sebelum tabel diringkas, penghapusan akan menggunakan penyimpanan ekstra, bukan mengosongkan ruang penyimpanan.

Kompresi data

Bigtable mengompresi data Anda secara otomatis menggunakan algoritma cerdas. Anda tidak dapat mengonfigurasi setelan kompresi untuk tabel. Namun, penting untuk mengetahui cara menyimpan data agar dapat dikompresi secara efisien:

  • Data acak tidak dapat dikompresi seefisien data berpola. Data berpola mencakup teks, seperti halaman yang sedang Anda baca.
  • Kompresi berfungsi optimal jika nilai yang identik berdekatan satu sama lain, baik di baris yang sama maupun di baris yang bersebelahan. Jika Anda mengatur kunci baris sehingga baris dengan potongan data yang identik bersebelahan satu sama lain, data dapat dikompresi secara efisien.
  • Bigtable mengompresi nilai yang berukuran hingga 1 MiB. Jika Anda menyimpan nilai yang lebih besar dari 1 MiB, kompresikan sebelum menulisnya ke Bigtable, sehingga Anda dapat menghemat siklus CPU, memori server, dan bandwidth jaringan.

Ketahanan data

Saat Anda menggunakan Bigtable, data Anda disimpan di Colossus, sistem file internal Google yang sangat tahan lama, menggunakan perangkat penyimpanan di pusat data Google. Anda tidak perlu menjalankan cluster HDFS atau sistem file lainnya untuk menggunakan Bigtable. Di balik layar, Google menggunakan metode penyimpanan eksklusif untuk mencapai ketahanan data melebihi apa yang disediakan oleh replikasi tiga arah HDFS standar.

Ketahanan lebih ditingkatkan saat menggunakan replikasi. Bigtable menyimpan salinan terpisah dari data Anda di lokasi yang Anda pilih untuk setiap cluster instance yang direplikasi.

Model konsistensi

Instance Bigtable cluster tunggal memberikan konsistensi yang kuat. Secara default, instance yang memiliki lebih dari satu cluster akan memberikan konsistensi akhir, tetapi untuk beberapa kasus penggunaan, instance dapat dikonfigurasi untuk memberikan konsistensi baca-Anda-tulis atau konsistensi yang kuat, bergantung pada beban kerja dan setelan profil aplikasi.

Keamanan

Akses ke tabel Bigtable Anda dikontrol oleh project Google Cloud dan peran Pengelolaan Akses dan Identitas (IAM) yang Anda tetapkan kepada pengguna. Misalnya, Anda dapat menetapkan peran IAM yang mencegah setiap pengguna membaca dari tabel, menulis ke tabel, atau membuat instance baru. Jika seseorang tidak memiliki akses ke project Anda atau tidak memiliki peran IAM dengan izin yang sesuai untuk Bigtable, orang tersebut tidak dapat mengakses tabel Anda.

Anda juga dapat mengontrol akses ke data tabel dengan membuat tampilan sah dari tabel yang mewakili subset data tabel. Kemudian, Anda dapat memberikan izin tingkat tampilan yang diotorisasi kepada beberapa pengguna tanpa memberi mereka izin tingkat tabel.

Anda dapat mengelola keamanan di tingkat project, instance, tabel, atau tampilan yang diizinkan. Bigtable tidak mendukung batasan keamanan tingkat baris, tingkat kolom, atau tingkat sel.

Enkripsi

Secara default, semua data yang disimpan dalam Google Cloud, termasuk data dalam tabel Bigtable, dienkripsi dalam penyimpanan menggunakan sistem pengelolaan kunci yang telah melalui proses hardening yang sama dengan yang kami gunakan untuk data terenkripsi kami sendiri.

Jika ingin lebih mengontrol kunci yang digunakan untuk mengenkripsi data dalam penyimpanan Bigtable, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK).

Membuat cadangan

Pencadangan Bigtable memungkinkan Anda menyimpan salinan skema dan data tabel, lalu memulihkannya ke tabel baru di lain waktu. Dengan menggunakan cadangan dan salinan cadangan, Anda dapat memulihkan ke tabel baru di region atau project mana pun tempat Anda memiliki instance Bigtable, terlepas dari lokasi tabel sumber.

Ubah pengambilan data

Bigtable menyediakan pengambilan data perubahan (CDC) dalam bentuk aliran perubahan. Aliran data perubahan memungkinkan Anda mengambil dan mengalirkan perubahan data ke tabel saat perubahan terjadi. Anda dapat membaca aliran perubahan menggunakan layanan seperti Dataflow untuk mendukung kasus penggunaan termasuk analisis data, audit, persyaratan pengarsipan, dan pemicu logika aplikasi downstream. Untuk mengetahui informasi selengkapnya, lihat Ringkasan aliran perubahan.

Meminta pemilihan rute dengan profil aplikasi

Kebijakan perutean profil aplikasi memungkinkan Anda mengontrol cluster mana yang menangani permintaan masuk dari aplikasi Anda. Opsi untuk kebijakan perutean meliputi hal berikut:

  • Pemilihan rute cluster tunggal: Mengirim semua permintaan ke satu cluster.
  • Pemilihan rute multi-cluster ke cluster apa pun: Mengirim permintaan ke cluster terdekat yang tersedia dalam sebuah instance.
  • Pemilihan rute grup cluster: Mengirim permintaan ke cluster terdekat yang tersedia dalam grup cluster yang dipilih dalam sebuah instance.

Opsi penyimpanan dan database lainnya

Bigtable bukan merupakan database relasional. Metode ini tidak mendukung kueri SQL, gabungan, atau transaksi multi-baris.

  • Jika Anda memerlukan dukungan SQL penuh untuk sistem pemrosesan transaksi online (OLTP), pertimbangkan Spanner atau Cloud SQL.
  • Jika Anda memerlukan kueri interaktif dalam sistem pemrosesan analisis online (OLAP), pertimbangkan BigQuery.
  • Jika Anda harus menyimpan objek yang sangat terstruktur dalam database dokumen, dengan dukungan untuk transaksi ACID dan kueri yang mirip SQL, pertimbangkan Firestore.
  • Untuk penyimpanan data dalam memori dengan latensi rendah, pertimbangkan Memorystore.
  • Untuk menyinkronkan data antarpengguna secara real time, pertimbangkan Firebase Realtime Database.

Untuk informasi selengkapnya tentang opsi database lainnya, lihat ringkasan layanan database. Google Cloud juga memiliki berbagai opsi penyimpanan.

Langkah selanjutnya