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.