Model Data Cassandra dengan Contoh Sederhana

Daftar Isi:

Anonim

Meskipun bahasa kueri Cassandra mirip dengan bahasa SQL, metode pemodelan datanya sangat berbeda.

Di Cassandra, model data yang buruk dapat menurunkan performa, terutama saat pengguna mencoba mengimplementasikan konsep RDBMS di Cassandra. Sebaiknya perhatikan beberapa aturan yang dirinci di bawah ini.

Dalam tutorial ini, Anda akan belajar-

  • Aturan Model Data Cassandra
  • Buat Model Data Anda di Cassandra
  • Menangani Hubungan Satu dengan Satu
  • Menangani hubungan satu ke banyak
  • Menangani Banyak ke Banyak Hubungan

Aturan Model Data Cassandra

Di Cassandra, menulis tidak mahal. Cassandra tidak mendukung gabungan, dikelompokkan berdasarkan, klausa OR, agregasi, dll. Jadi, Anda harus menyimpan data Anda sedemikian rupa sehingga data tersebut dapat diambil sepenuhnya. Jadi aturan ini harus diingat saat memodelkan data di Cassandra.

  1. Maksimalkan jumlah tulis

    Di Cassandra, menulis sangat murah. Cassandra dioptimalkan untuk kinerja tulis yang tinggi. Jadi, coba maksimalkan penulisan Anda untuk performa baca dan ketersediaan data yang lebih baik. Ada pertukaran antara penulisan data dan pembacaan data. Jadi, optimalkan kinerja pembacaan data Anda dengan memaksimalkan jumlah penulisan data.

  2. Maksimalkan Duplikasi Data

    Denormalisasi data dan duplikasi data adalah defacto dari Cassandra. Ruang disk tidak lebih mahal dari memori, pemrosesan CPU, dan operasi IO. Karena Cassandra adalah database terdistribusi, duplikasi data menyediakan ketersediaan data instan dan tidak ada titik kegagalan tunggal.

Tujuan Pemodelan Data

Anda harus memiliki tujuan berikut saat memodelkan data di Cassandra.

  1. Sebarkan Data Secara Merata di Sekitar Cluster

    Anda menginginkan jumlah data yang sama pada setiap node cluster Cassandra. Data disebarkan ke node yang berbeda berdasarkan kunci partisi yang merupakan bagian pertama dari kunci utama. Jadi, coba pilih bilangan bulat sebagai kunci utama untuk menyebarkan data secara merata di sekitar cluster.

  2. Minimalkan jumlah partisi yang dibaca saat membuat kueri data

    Partisi adalah sekumpulan record dengan kunci partisi yang sama. Ketika kueri baca dikeluarkan, itu mengumpulkan data dari node yang berbeda dari partisi yang berbeda.

    Jika akan ada banyak partisi, maka semua partisi ini perlu dikunjungi untuk mengumpulkan data query.

    Ini tidak berarti bahwa partisi tidak boleh dibuat. Jika data Anda sangat besar, Anda tidak dapat menyimpan data dalam jumlah besar itu di satu partisi. Partisi tunggal akan diperlambat.

    Jadi cobalah untuk memilih jumlah partisi yang seimbang.

Kunci Utama yang Baik

Mari kita ambil contoh dan temukan kunci utama mana yang bagus.

Berikut adalah tabel MusicPlaylist.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));

Dalam contoh di atas, tabel MusicPlaylist,

  • Songid adalah kunci partisi, dan
  • SongName adalah kolom pengelompokan
  • Data akan dikelompokkan berdasarkan SongName. Hanya satu partisi yang akan dibuat dengan SongId. Tidak akan ada partisi lain di tabel MusicPlaylist.

Pengambilan data akan lambat oleh model data ini karena kunci utama yang buruk.

Berikut adalah tabel MusicPlaylist lainnya.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));

Dalam contoh di atas, tabel MusicPlaylist,

  • Songid dan Year adalah kunci partisi, dan
  • SongName adalah kolom pengelompokan.
  • Data akan dikelompokkan berdasarkan SongName. Dalam tabel ini, setiap tahun, partisi baru akan dibuat. Semua lagu tahun ini akan berada di simpul yang sama. Kunci utama ini akan sangat berguna untuk data.

Pengambilan data kami akan cepat dengan model data ini.

Buat Model Data Anda di Cassandra

Hal-hal berikut harus diingat saat memodelkan kueri Anda.

  1. Tentukan kueri apa yang ingin Anda dukung
  2. Pertama-tama, tentukan kueri yang Anda inginkan.

    Misalnya, apakah Anda membutuhkan?

    • Bergabung
    • Kelompokkan menurut
    • Memfilter kolom mana, dll.
  3. Buat tabel sesuai dengan permintaan Anda

    Buat tabel sesuai dengan permintaan Anda. Buat tabel yang akan memenuhi permintaan Anda. Cobalah untuk membuat tabel sedemikian rupa sehingga jumlah partisi minimum perlu dibaca.

Menangani Hubungan Satu dengan Satu

Hubungan satu ke satu berarti dua tabel memiliki korespondensi satu ke satu. Misalnya, siswa hanya dapat mendaftarkan satu mata pelajaran, dan saya ingin mencari siswa di mana siswa tertentu terdaftar.

Jadi dalam kasus ini, skema tabel Anda harus mencakup semua detail siswa yang sesuai dengan kursus tertentu seperti nama kursus, no roll siswa, nama siswa, dll.

Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);

Menangani hubungan satu ke banyak

Hubungan satu ke banyak berarti memiliki satu ke banyak korespondensi antara dua tabel.

Misalnya, suatu mata kuliah dapat dipelajari oleh banyak siswa. Saya ingin mencari semua siswa yang sedang mempelajari kursus tertentu.

Jadi dengan menanyakan nama mata kuliah, saya akan memiliki banyak nama siswa yang akan mempelajari mata kuliah tertentu.

Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);

Saya dapat mengambil semua siswa untuk kursus tertentu dengan kueri berikut.

Select * from Student_Course where Course_name='Course Name';

Menangani Banyak ke Banyak Hubungan

Hubungan banyak ke banyak berarti memiliki banyak ke banyak korespondensi antara dua tabel.

Misalnya, suatu mata pelajaran dapat dipelajari oleh banyak siswa, dan seorang siswa juga dapat mempelajari banyak mata pelajaran.

Saya ingin mencari semua siswa yang sedang mempelajari kursus tertentu. Juga, saya ingin mencari semua kursus yang dipelajari oleh siswa tertentu.

Jadi dalam kasus ini, saya akan memiliki dua tabel yaitu membagi masalah menjadi dua kasus.

Pertama, saya akan membuat tabel di mana Anda dapat menemukan kursus oleh siswa tertentu.

Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);

Saya dapat menemukan semua kursus oleh siswa tertentu dengan kueri berikut. ->

Select * from Student_Course where student_rollno=rollno;

Kedua, saya akan membuat tabel di mana Anda dapat mengetahui berapa banyak siswa yang mempelajari mata pelajaran tertentu.

Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);

Saya dapat menemukan seorang siswa dalam kursus tertentu dengan pertanyaan berikut.

Select * from Course_Student where Course_name=CourseName;

Perbedaan antara RDBMS dan Cassandra Data Modeling

RDBMS

Cassandra

Menyimpan data dalam bentuk normalisasi

Menyimpan data dalam bentuk yang dinormalisasi

Dbms lama; data terstruktur

Toko baris lebar, Dinamis; data terstruktur & tidak terstruktur

Ringkasan

Pemodelan data di Cassandra berbeda dari database RDBMS lainnya. Pemodelan data Cassandra memiliki beberapa aturan. Aturan-aturan ini harus diikuti untuk pemodelan data yang baik. Selain aturan ini, kami melihat tiga kasus pemodelan data yang berbeda dan cara menanganinya.