Python 데이터 지속성-Cassandra 드라이버

Cassandra는 또 다른 인기있는 NoSQL 데이터베이스입니다. 높은 확장 성, 일관성 및 내결함성-이들은 Cassandra의 중요한 기능 중 일부입니다. 이것은Column store데이터 베이스. 데이터는 많은 상용 서버에 저장됩니다. 결과적으로 데이터의 가용성이 높아집니다.

Cassandra는 Apache Software Foundation의 제품입니다. 데이터는 여러 노드에 분산 방식으로 저장됩니다. 각 노드는 키 스페이스로 구성된 단일 서버입니다. Cassandra 데이터베이스의 기본 구성 요소는keyspace 데이터베이스와 유사한 것으로 간주 될 수 있습니다.

Cassandra의 한 노드에있는 데이터는 피어-투-피어 노드 네트워크를 통해 다른 노드에 복제됩니다. 그것은 Cassandra를 완벽한 데이터베이스로 만듭니다. 네트워크를 데이터 센터라고합니다. 여러 데이터 센터를 상호 연결하여 클러스터를 형성 할 수 있습니다. 복제 특성은 키 스페이스 생성시 복제 전략 및 복제 요소를 설정하여 구성됩니다.

하나의 데이터베이스에 여러 테이블이 포함될 수있는 것처럼 하나의 키 스페이스에는 둘 이상의 Column family가있을 수 있습니다. Cassandra의 키 스페이스에는 미리 정의 된 스키마가 없습니다. Cassandra 테이블의 각 행에는 이름과 변수 번호가 다른 열이있을 수 있습니다.

Cassandra 소프트웨어는 커뮤니티와 엔터프라이즈의 두 가지 버전으로도 제공됩니다. 최신 엔터프라이즈 버전의 Cassandra는 다음 사이트에서 다운로드 할 수 있습니다.https://cassandra.apache.org/download/. 커뮤니티 에디션은https://academy.datastax.com/planet-cassandra/cassandra.

Cassandra에는 자체 쿼리 언어가 있습니다. Cassandra Query Language (CQL). CQL 쿼리는 MySQL 또는 SQLite 셸과 유사한 CQLASH 셸 내부에서 실행할 수 있습니다. CQL 구문은 표준 SQL과 유사합니다.

Datastax 커뮤니티 에디션은 다음 그림과 같이 Develcenter IDE와 함께 제공됩니다.

Cassandra 데이터베이스 작업을위한 Python 모듈이 호출됩니다. Cassandra Driver. 또한 Apache 재단에서 개발했습니다. 이 모듈에는 ORM API는 물론 관계형 데이터베이스 용 DB-API와 본질적으로 유사한 핵심 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 strategyreplication factor앞에서 언급했듯이 키 스페이스에는 하나 이상의 테이블이 포함됩니다. 각 테이블은 데이터 유형이 특징입니다. Python 데이터 유형은 다음 표에 따라 해당 CQL 데이터 유형으로 자동 구문 분석됩니다.

파이썬 유형 CQL 유형
없음 없는
부울 부울
흙손 float, double
int, long int, bigint, varint, smallint, tinyint, 카운터
decimal.Decimal 소수
str, 유니 코드 ascii, varchar, 텍스트
버퍼, 바이트 배열 얼룩
데이트 데이트
날짜 시간 타임 스탬프
시각 시각
목록, 튜플, 생성기 명부
set, frozenset 세트
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)

이렇게 생성 된 키 스페이스는 행을 삽입하는 데 사용할 수 있습니다. INSERT 쿼리의 CQL 버전은 SQL Insert 문과 유사합니다. 다음 코드는 students 테이블에 행을 삽입합니다.

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에서도 사용됩니다. SELECT 쿼리 문자열이 포함 된 execute () 메서드의 경우 루프를 사용하여 순회 할 수있는 결과 집합 객체를 반환합니다.

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

Cassandra의 SELECT 쿼리는 가져올 결과 집합에 필터를 적용하기 위해 WHERE 절 사용을 지원합니다. <,> == 등과 같은 전통적인 논리 연산자가 인식됩니다. 검색하려면 학생 테이블에서 나이가 20 세 이상인 이름의 행만 실행 () 메서드의 쿼리 문자열은 다음과 같아야합니다.

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

참고, 사용 ALLOW FILTERING. 이 문의 ALLOW FILTERING 부분은 필터링이 필요한 (일부) 쿼리를 명시 적으로 허용 할 수 있습니다.

Cassandra 드라이버 API는 cassendra.query 모듈에서 다음과 같은 Statement 유형 클래스를 정의합니다.

SimpleStatement

쿼리 문자열에 포함 된 단순하고 준비되지 않은 CQL 쿼리입니다. 위의 모든 예는 SimpleStatement의 예입니다.

BatchStatement

여러 쿼리 (예 : INSERT, UPDATE 및 DELETE)가 일괄 처리되고 한 번에 실행됩니다. 각 행은 먼저 SimpleStatement로 변환 된 다음 일괄 처리에 추가됩니다.

다음과 같이 튜플 목록의 형태로 Students 테이블에 추가 할 행을 입력합니다.

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)

PreparedStatement

준비된 문은 DB-API의 매개 변수화 된 쿼리와 같습니다. 쿼리 문자열은 나중에 사용하기 위해 Cassandra에 의해 저장됩니다. Session.prepare () 메서드는 PreparedStatement 인스턴스를 반환합니다.

학생 테이블의 경우 INSERT 쿼리에 대한 PreparedStatement는 다음과 같습니다.

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

이후에는 바인딩 할 매개 변수 값만 보내면됩니다. 예를 들면-

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

마지막으로 위의 바인딩 된 문을 실행합니다.

session.execute(qry)

이렇게하면 Cassandra가 매번 쿼리를 다시 구문 분석 할 필요가 없기 때문에 네트워크 트래픽과 CPU 사용률이 감소합니다.