Сохранение данных Python - драйвер Cassandra
Cassandra - еще одна популярная база данных NoSQL. Высокая масштабируемость, согласованность и отказоустойчивость - вот некоторые из важных особенностей Cassandra. ЭтоColumn storeбаза данных. Данные хранятся на многих обычных серверах. В результате данные высокодоступны.
Cassandra - продукт от Apache Software Foundation. Данные хранятся распределенным образом на нескольких узлах. Каждый узел - это отдельный сервер, состоящий из пространств ключей. Основным строительным блоком базы данных Cassandra являетсяkeyspace которую можно считать аналогом базы данных.
Данные в одном узле Cassandra реплицируются в других узлах по одноранговой сети узлов. Это делает Cassandra надежной базой данных. Сеть называется дата-центром. Несколько центров обработки данных могут быть соединены между собой в кластер. Характер репликации настраивается путем установки стратегии репликации и коэффициента репликации во время создания пространства ключей.
В одном пространстве ключей может быть несколько семейств столбцов - точно так же, как одна база данных может содержать несколько таблиц. В пространстве ключей Кассандры нет предопределенной схемы. Возможно, что каждая строка в таблице Cassandra может иметь столбцы с разными именами и номерами переменных.
Программное обеспечение Cassandra также доступно в двух версиях: для сообщества и для предприятий. Последняя корпоративная версия Cassandra доступна для загрузки по адресуhttps://cassandra.apache.org/download/. Версия сообщества находится по адресуhttps://academy.datastax.com/planet-cassandra/cassandra.
У Кассандры есть собственный язык запросов, который называется Cassandra Query Language (CQL). Запросы CQL могут выполняться из оболочки CQLASH - аналогично оболочке MySQL или SQLite. Синтаксис CQL похож на стандартный SQL.
Версия сообщества Datastax также поставляется с IDE Develcenter, показанной на следующем рисунке -
Модуль Python для работы с базой данных Cassandra называется Cassandra Driver. Он также разработан Apache Foundation. Этот модуль содержит ORM API, а также базовый API, аналогичный DB-API для реляционных баз данных.
Установка драйвера Cassandra легко выполняется с помощью pip utility.
pip3 install cassandra-driver
Взаимодействие с базой данных Cassandra осуществляется через объект Cluster. Модуль Cassandra.cluster определяет класс Cluster. Сначала нам нужно объявить объект Cluster.
from cassandra.cluster import Cluster
clstr=Cluster()
Все транзакции, такие как вставка / обновление и т. Д., Выполняются путем запуска сеанса с пространством ключей.
session=clstr.connect()
Чтобы создать новое пространство ключей, используйте execute()метод объекта сеанса. Метод execute () принимает строковый аргумент, который должен быть строкой запроса. В CQL есть инструкция CREATE KEYSPACE, как показано ниже. Полный код приведен ниже -
from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect()
session.execute(“create keyspace mykeyspace with replication={
'class': 'SimpleStrategy', 'replication_factor' : 3
};”
Вот, SimpleStrategy это ценность для replication strategy и replication factorустановлено в 3. Как упоминалось ранее, пространство ключей содержит одну или несколько таблиц. Каждая таблица характеризуется своим типом данных. Типы данных Python автоматически анализируются с соответствующими типами данных CQL в соответствии со следующей таблицей:
Тип Python | Тип CQL |
---|---|
Никто | НОЛЬ |
Bool | Булево |
Плавать | поплавок, двойной |
int, long | int, bigint, varint, smallint, tinyint, счетчик |
десятичный. десятичный | Десятичный |
str, Юникод | ascii, varchar, текст |
буфер, массив байтов | Blob |
Свидание | Свидание |
Дата и время | Отметка времени |
Время | Время |
список, кортеж, генератор | Список |
набор, морозильник | Набор |
dict, OrderedDict | карта |
uuid.UUID | timeuuid, uuid |
Чтобы создать таблицу, используйте объект сеанса для выполнения запроса CQL для создания таблицы.
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)
Созданное таким образом пространство ключей можно в дальнейшем использовать для вставки строк. CQL-версия запроса INSERT аналогична инструкции SQL Insert. Следующий код вставляет строку в таблицу студентов.
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);"
Как и следовало ожидать, оператор SELECT также используется с Cassandra. В случае метода execute (), содержащего строку запроса SELECT, он возвращает объект набора результатов, который можно пройти с помощью цикла.
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]))
Запрос SELECT Cassandra поддерживает использование предложения WHERE для применения фильтра к выбираемому набору результатов. Распознаются традиционные логические операторы, такие как <,> == и т. Д. Чтобы получить только те строки из таблицы студентов для имен с возрастом> 20, строка запроса в методе execute () должна быть следующей:
rows=session.execute("select * from students WHERE age>20 allow filtering;")
Обратите внимание, использование ALLOW FILTERING. Часть ALLOW FILTERING этого оператора позволяет явно разрешить (некоторые) запросы, требующие фильтрации.
API драйвера Cassandra определяет следующие классы типа Statement в своем модуле cassendra.query.
SimpleStatement
Простой неподготовленный CQL-запрос, содержащийся в строке запроса. Все приведенные выше примеры являются примерами SimpleStatement.
BatchStatement
Несколько запросов (таких как INSERT, UPDATE и DELETE) помещаются в пакет и выполняются одновременно. Каждая строка сначала преобразуется как SimpleStatement, а затем добавляется в пакете.
Давайте поместим строки для добавления в таблицу студентов в виде списка кортежей следующим образом:
studentlist=[(1,'Juhi',20,100), ('2,'dilip',20, 110),(3,'jeevan',24,145)]
Чтобы добавить строки выше с помощью BathStatement, запустите следующий скрипт -
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)
Подготовленное заявление
Подготовленный оператор похож на параметризованный запрос в DB-API. Его строка запроса сохраняется Cassandra для дальнейшего использования. Метод Session.prepare () возвращает экземпляр PreparedStatement.
Для нашей таблицы студентов PreparedStatement для запроса INSERT выглядит следующим образом:
stmt=session.prepare("INSERT INTO students (studentID, name, age, marks) VALUES (?,?,?)")
Впоследствии ему нужно только отправить значения параметров для привязки. Например -
qry=stmt.bind([1,'Ram', 23,175])
Наконец, выполните связанный оператор выше.
session.execute(qry)
Это снижает сетевой трафик и использование ЦП, поскольку Cassandra не нужно каждый раз повторно анализировать запрос.