Trwałość danych w języku Python - sterownik Cassandra

Cassandra to kolejna popularna baza danych NoSQL. Wysoka skalowalność, spójność i odporność na błędy - to niektóre z ważnych cech Cassandry. To jestColumn storeBaza danych. Dane są przechowywane na wielu serwerach towarowych. W rezultacie dane są wysoce dostępne.

Cassandra to produkt fundacji Apache Software. Dane są przechowywane w sposób rozproszony w wielu węzłach. Każdy węzeł to pojedynczy serwer składający się z przestrzeni kluczy. Podstawowym elementem składowym bazy danych Cassandra jestkeyspace które można uznać za analogiczne do bazy danych.

Dane w jednym węźle Cassandry są replikowane w innych węzłach za pośrednictwem sieci węzłów peer-to-peer. To sprawia, że ​​Cassandra jest niezawodną bazą danych. Sieć nazywana jest centrum danych. Wiele centrów danych może być połączonych ze sobą, tworząc klaster. Charakter replikacji jest konfigurowany przez ustawienie strategii replikacji i współczynnika replikacji w momencie tworzenia obszaru kluczy.

Jedna przestrzeń kluczowa może mieć więcej niż jedną rodzinę kolumn - tak jak jedna baza danych może zawierać wiele tabel. Przestrzeń klawiszy Cassandry nie ma wstępnie zdefiniowanego schematu. Jest możliwe, że każdy wiersz w tabeli Cassandra może mieć kolumny o różnych nazwach i zmiennych liczbach.

Oprogramowanie Cassandra jest również dostępne w dwóch wersjach: społecznościowej i korporacyjnej. Najnowsza wersja aplikacji Cassandra dla przedsiębiorstw jest dostępna do pobrania pod adresemhttps://cassandra.apache.org/download/. Wydanie społeczności znajduje się pod adresemhttps://academy.datastax.com/planet-cassandra/cassandra.

Cassandra ma własny język zapytań o nazwie Cassandra Query Language (CQL). Zapytania CQL można wykonywać z wnętrza powłoki CQLASH - podobnie jak w powłoce MySQL lub SQLite. Składnia języka CQL wygląda podobnie do standardowego języka SQL.

Wydanie społecznościowe Datastax jest również dostarczane z Develcenter IDE pokazanym na poniższym rysunku -

Nazywa się moduł Pythona do pracy z bazą danych Cassandra Cassandra Driver. Jest również rozwijany przez fundację Apache. Ten moduł zawiera ORM API, a także rdzeń API podobny w naturze do DB-API dla relacyjnych baz danych.

Instalację sterownika Cassandra można łatwo wykonać za pomocą pip utility.

pip3 install cassandra-driver

Interakcja z bazą danych Cassandra odbywa się za pośrednictwem obiektu Cluster. Moduł Cassandra.cluster definiuje klasę Cluster. Najpierw musimy zadeklarować obiekt Cluster.

from cassandra.cluster import Cluster
clstr=Cluster()

Wszystkie transakcje, takie jak wstawianie / aktualizowanie itp., Są wykonywane przez rozpoczęcie sesji z przestrzenią kluczy.

session=clstr.connect()

Aby utworzyć nową przestrzeń klawiszy, użyj execute()metoda obiektu sesji. Metoda execute () przyjmuje argument typu string, który musi być ciągiem zapytania. CQL ma instrukcję CREATE KEYSPACE w następujący sposób. Pełny kod jest jak poniżej -

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

Tutaj, SimpleStrategy jest wartością dla replication strategy i replication factorjest ustawiona na 3. Jak wspomniano wcześniej, obszar kluczy zawiera jedną lub więcej tabel. Każda tabela charakteryzuje się typem danych. Typy danych Python są automatycznie analizowane z odpowiednimi typami danych CQL zgodnie z poniższą tabelą -

Typ Pythona Typ CQL
Żaden ZERO
Bool Boolean
Pływak pływak, podwójny
int, long int, bigint, varint, smallint, tinyint, counter
decimal.Decimal Dziesiętny
str, Unicode ascii, varchar, tekst
bufor, bytearray Kropelka
Data Data
Datetime Znak czasu
Czas Czas
lista, krotka, generator Lista
zestaw, zamrożony Zestaw
dict, OrderedDict Mapa
uuid.UUID timeuuid, uuid

Aby utworzyć tabelę, użyj obiektu sesji do wykonania zapytania CQL w celu utworzenia tabeli.

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)

Tak utworzony obszar kluczy może być dalej używany do wstawiania wierszy. Wersja CQL zapytania INSERT jest podobna do instrukcji SQL Insert. Poniższy kod wstawia wiersz w tabeli uczniów.

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);"

Jak można się spodziewać, instrukcja SELECT jest również używana z Cassandrą. W przypadku metody execute () zawierającej ciąg zapytania SELECT, zwraca ona obiekt zestawu wyników, po którym można przejść za pomocą pętli.

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]))

Zapytanie SELECT Cassandry obsługuje użycie klauzuli WHERE w celu zastosowania filtru do zestawu wyników do pobrania. Rozpoznawane są tradycyjne operatory logiczne, takie jak <,> == itd. Aby pobrać tylko te wiersze z tabeli uczniów dla nazwisk w wieku> 20 lat, ciąg zapytania w metodzie execute () powinien wyglądać następująco -

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

Uwaga, użycie ALLOW FILTERING. Część ALLOW FILTERING tej instrukcji umożliwia jawne zezwolenie na (niektóre) zapytania, które wymagają filtrowania.

Interfejs API sterownika Cassandra definiuje następujące klasy typu Statement w module cassendra.query.

SimpleStatement

Proste, nieprzygotowane zapytanie CQL zawarte w ciągu zapytania. Wszystkie powyższe przykłady są przykładami SimpleStatement.

BatchStatement

Wiele zapytań (takich jak INSERT, UPDATE i DELETE) jest umieszczanych w partii i wykonywanych jednocześnie. Każdy wiersz jest najpierw konwertowany jako SimpleStatement, a następnie dodawany w partii.

Umieśćmy wiersze do dodania w tabeli Studentów w postaci listy krotek w następujący sposób -

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

Aby dodać powyższe wiersze za pomocą BathStatement, uruchom następujący skrypt -

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)

Przygotowane oświadczenie

Prepared Statement jest jak sparametryzowane zapytanie w DB-API. Jego ciąg zapytania jest zapisywany przez Cassandrę do późniejszego użycia. Metoda Session.prepare () zwraca instancję PreparedStatement.

W przypadku tabeli naszych studentów, PreparedStatement for INSERT jest następująca:

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

Następnie wystarczy wysłać wartości parametrów do powiązania. Na przykład -

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

Na koniec wykonaj powyższą instrukcję bound.

session.execute(qry)

Zmniejsza to ruch w sieci i wykorzystanie procesora, ponieważ Cassandra nie musi za każdym razem ponownie analizować zapytania.