Persistensi Data Python - Cassandra Driver

Cassandra adalah database NoSQL populer lainnya. Skalabilitas tinggi, konsistensi, dan toleransi kesalahan - ini adalah beberapa fitur penting Cassandra. Ini adalahColumn storedatabase. Data disimpan di banyak server komoditas. Hasilnya, data sangat tersedia.

Cassandra adalah produk dari yayasan Apache Software. Data disimpan secara terdistribusi di banyak node. Setiap node adalah satu server yang terdiri dari ruang kunci. Blok bangunan fundamental dari database Cassandra adalahkeyspace yang dapat dianggap analog dengan database.

Data dalam satu node Cassandra, direplikasi di node lain melalui jaringan node peer-to-peer. Itu membuat Cassandra menjadi database yang sangat mudah. Jaringan itu disebut pusat data. Beberapa pusat data mungkin saling berhubungan untuk membentuk sebuah cluster. Sifat replikasi dikonfigurasi dengan mengatur Strategi replikasi dan faktor replikasi pada saat pembuatan ruang kunci.

Satu ruang kunci mungkin memiliki lebih dari satu keluarga Kolom - seperti satu database yang dapat berisi banyak tabel. Ruang kunci Cassandra tidak memiliki skema yang telah ditentukan sebelumnya. Ada kemungkinan bahwa setiap baris dalam tabel Cassandra mungkin memiliki kolom dengan nama dan nomor variabel yang berbeda.

Software Cassandra juga tersedia dalam dua versi: komunitas dan perusahaan. Versi perusahaan terbaru dari Cassandra tersedia untuk diunduh dihttps://cassandra.apache.org/download/. Edisi komunitas ditemukan dihttps://academy.datastax.com/planet-cassandra/cassandra.

Cassandra memiliki bahasa kuerinya sendiri yang disebut Cassandra Query Language (CQL). Kueri CQL dapat dieksekusi dari dalam shell CQLASH - mirip dengan shell MySQL atau SQLite. Sintaks CQL tampak mirip dengan SQL standar.

Edisi komunitas Datastax, juga dilengkapi dengan Develcenter IDE yang ditunjukkan pada gambar berikut -

Modul Python untuk bekerja dengan database Cassandra disebut Cassandra Driver. Ini juga dikembangkan oleh yayasan Apache. Modul ini berisi API ORM, serta API inti yang serupa dengan DB-API untuk database relasional.

Pemasangan driver Cassandra mudah dilakukan dengan menggunakan pip utility.

pip3 install cassandra-driver

Interaksi dengan database Cassandra, dilakukan melalui objek Cluster. Modul Cassandra.cluster mendefinisikan kelas Cluster. Pertama-tama kita perlu mendeklarasikan objek Cluster.

from cassandra.cluster import Cluster
clstr=Cluster()

Semua transaksi seperti penyisipan / pembaruan, dll., Dilakukan dengan memulai sesi dengan ruang kunci.

session=clstr.connect()

Untuk membuat ruang kunci baru, gunakan execute()metode objek sesi. Metode execute () mengambil argumen string yang harus berupa string kueri. CQL memiliki pernyataan CREATE KEYSPACE sebagai berikut. Kode lengkapnya adalah sebagai berikut -

from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect()
session.execute(“create keyspace mykeyspace with replication={
   'class': 'SimpleStrategy', 'replication_factor' : 3
};”

Sini, SimpleStrategy adalah nilai untuk replication strategy dan replication factordiatur ke 3. Seperti disebutkan sebelumnya, ruang kunci berisi satu atau lebih tabel. Setiap tabel dicirikan oleh tipe datanya. Tipe data Python secara otomatis diurai dengan tipe data CQL yang sesuai menurut tabel berikut -

Jenis Python Jenis CQL
Tidak ada BATAL
Bool Boolean
Mengapung mengapung, ganda
int, panjang int, bigint, varint, smallint, tinyint, counter
desimal. desimal Desimal
str, Unicode ascii, varchar, teks
buffer, bytearray Gumpal
Tanggal Tanggal
Tanggal Waktu Stempel waktu
Waktu Waktu
daftar, tupel, generator Daftar
set, frozenset Set
dict, OrderedDict Peta
uuid.UUID timeuuid, uuid

Untuk membuat tabel, gunakan objek sesi untuk mengeksekusi query CQL untuk membuat tabel.

from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
qry= '''
create table students (
   studentID int,
   name text,
   age int,
   marks int,
   primary key(studentID)
);'''
session.execute(qry)

Ruang kunci yang dibuat selanjutnya dapat digunakan untuk menyisipkan baris. Versi CQL dari kueri INSERT mirip dengan pernyataan SQL Insert. Kode berikut menyisipkan baris dalam tabel siswa.

from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
session.execute("insert into students (studentID, name, age, marks) values 
   (1, 'Juhi',20, 200);"

Seperti yang Anda harapkan, pernyataan SELECT juga digunakan dengan Cassandra. Dalam kasus metode execution () yang berisi string kueri SELECT, ia mengembalikan objek set hasil yang dapat dilintasi menggunakan loop.

from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
rows=session.execute("select * from students;")
for row in rows:
print (StudentID: {} Name:{} Age:{} price:{} Marks:{}'
   .format(row[0],row[1], row[2], row[3]))

Query SELECT Cassandra mendukung penggunaan klausa WHERE untuk menerapkan filter pada set hasil yang akan diambil. Operator logika tradisional seperti <,> == dll. Dikenali. Untuk mengambil, hanya baris tersebut dari tabel siswa untuk nama dengan usia> 20, string kueri dalam metode execute () harus seperti berikut -

rows=session.execute("select * from students WHERE age>20 allow filtering;")

Perhatikan, penggunaan ALLOW FILTERING. Bagian ALLOW FILTERING dari pernyataan ini memungkinkan untuk secara eksplisit mengizinkan (beberapa) kueri yang memerlukan pemfilteran.

Cassandra driver API mendefinisikan kelas tipe Pernyataan berikut dalam modul cassendra.query-nya.

SimpleStatement

Kueri CQL sederhana dan tidak siap yang terdapat dalam string kueri. Semua contoh di atas adalah contoh SimpleStatement.

BatchStatement

Beberapa kueri (seperti INSERT, UPDATE, dan DELETE) dimasukkan ke dalam batch dan dijalankan sekaligus. Setiap baris pertama-tama diubah sebagai SimpleStatement dan kemudian ditambahkan secara berkelompok.

Mari kita letakkan baris yang akan ditambahkan pada tabel Siswa berupa daftar tupel sebagai berikut -

studentlist=[(1,'Juhi',20,100), ('2,'dilip',20, 110),(3,'jeevan',24,145)]

Untuk menambahkan baris di atas menggunakan BathStatement, jalankan skrip berikut -

from cassandra.query import SimpleStatement, BatchStatement
batch=BatchStatement()
for student in studentlist:
   batch.add(SimpleStatement("INSERT INTO students 
      (studentID, name, age, marks) VALUES
      (%s, %s, %s %s)"), (student[0], student[1],student[2], student[3]))
session.execute(batch)

PreparedStatement

Pernyataan yang disiapkan seperti kueri berparameter di DB-API. String kuerinya disimpan oleh Cassandra untuk digunakan nanti. Metode Session.prepare () mengembalikan instance PreparedStatement.

Untuk tabel siswa kami, kueri PreparedStatement untuk INSERT adalah sebagai berikut -

stmt=session.prepare("INSERT INTO students (studentID, name, age, marks) VALUES (?,?,?)")

Selanjutnya, hanya perlu mengirim nilai parameter yang akan diikat. Misalnya -

qry=stmt.bind([1,'Ram', 23,175])

Terakhir, jalankan pernyataan terikat di atas.

session.execute(qry)

Ini mengurangi lalu lintas jaringan dan pemakaian CPU karena Cassandra tidak perlu mengurai ulang kueri setiap kali.