티스토리 뷰
Apache Cassandra 소개
Apache Cassandra 란 무엇입니까?
Cassandra는 Google BigTable 또는 HBase와 유사한 분산 NoSql 데이터베이스입니다.
Key-Value와 Column 지향 데이터베이스의 하이브리드입니다.
모든 언어에 대한 클라이언트 드라이버가 있습니다 (내부 프로토콜은 바이너리 "Thrift"임).
SQL과 매우 유사한 언어 CQL도 있으며 명령을 실행하는 대화 형 쉘이 있습니다. CQLSH
Cassandra CQL Shell을 사용한 첫 번째
아래 더보기 펼쳐보면 데이터 정의부터 기본적인 부분을 확인해보자!
데이터 정의
CQL은 테이블에 데이터를 저장 하며, 스키마는 테이블에서 해당 데이터의 레이아웃을 정의하며 해당 테이블은 키 스페이스 로 그룹화됩니다 . 키 스페이스는 포함 된 모든 테이블에 적용되는 여러 옵션을 정의합니다. 가장 두드러 지는 것은 키 스페이스에서 사용 하는 복제 전략 입니다. 일반적으로 애플리케이션 별로 하나의 키 스페이스를 사용하는 것이 권장 되므로 많은 클러스터가 하나의 키 스페이스 만 정의 할 수 있습니다.
이 섹션에서는 이러한 키 스페이스 및 테이블을 생성, 수정 및 제거하는 데 사용되는 문에 대해 설명합니다.
선택권종류기본기술
comment speculative_retry | 간단 간단 | 없음 99PERCENTILE | 자유 형식의 사람이 읽을 수있는 주석입니다. 추측 재시도 옵션 . |
cdc | 부울 | 그릇된 | 테이블에 CDC (변경 데이터 캡처) 로그를 만듭니다. |
additional_write_policy | 단순한 | 99 퍼센트 | 추측 재시도 옵션 . |
gc_grace_seconds | 단순한 | 864000 | 가비지 수집 삭제 표시 (삭제 표시) 전에 대기 할 시간입니다. |
bloom_filter_fp_chance | 단순한 | 0.00075 | 안정적인 블룸 필터의 오 탐지 목표 확률입니다. 상기 블룸 필터는 제공된 확률을 제공하도록 크기가 조정됩니다 (따라서이 값을 낮추면 메모리 및 디스크 내 블룸 필터의 크기에 영향을줍니다). |
default_time_to_live | 단순한 | 0 | 테이블의 기본 만료 시간 ( "TTL") (초)입니다. |
compaction | 지도 | 아래 참조 | 압축 옵션 . |
compression | 지도 | 아래 참조 | 압축 옵션 . |
caching | 지도 | 아래 참조 | 캐싱 옵션 . |
memtable_flush_period_in_ms | 단순한 | 0 | Cassandra가 memtable을 디스크로 플러시하기까지의 시간 (ms)입니다. |
read_repair | 단순한 | 블로킹 | 읽기 복구 동작을 설정합니다 (아래 참조). |
1. ALTER TABLE
기존 테이블을 변경하면 다음 명령문이 사용됩니다.ALTER TABLE
*********************************************************************************************************
alter_table_statement :: = ALTER TABLE alter_table_instruction :: = ADD ( ',' ) *table_name alter_table_instruction column_name cql_typecolumn_name cql_type | 드롭 column_name( column_name) * | 와options
예를 들면 :
ALTER TABLE addamsFamily ADD gravesite varchar; ALTER TABLE addamsFamily WITH comment = 'A most excellent and useful table';
2. 드롭 테이블
DROP TABLE
3. 자르기
다음 TRUNCATE명령문을 사용하여 테이블을자를 수 있습니다 .
truncate_statement :: = TRUNCATE [TABLE]table_name
4. 키 스페이스 설명
모든 키 스페이스의 이름을 출력합니다.
describe_keyspaces_statement :: = DESCRIBE KEYSPACES
keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
5. DESCRIBE INDEX
주어진 인덱스를 다시 만드는 데 사용할 수있는 CQL 명령을 출력합니다.
describe_index_statement :: = DESCRIBE INDEX [ keyspace_name.]index_name
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
6. 구체화 된 뷰 설명
주어진 구체화 된 뷰를 재생성하는 데 사용할 수있는 CQL 명령을 출력합니다.
describe_materialized_view_statement :: = DESCRIBE MATERIALIZED VIEW [ keyspace_name.]view_name
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
7. 클러스터 설명
클러스터 이름, 사용중인 파티 셔너 및 스 니치와 같은 연결된 Cassandra 클러스터에 대한 정보를 출력합니다. 시스템이 아닌 키 스페이스에 연결되면 Cassandra 링에 대한 엔드 포인트 범위 소유권 정보도 표시됩니다.
describe_cluster_statement :: = DESCRIBE 클러스터
반환 된 열 :
기둥유형기술클러스터 | 본문 | 클러스터 이름 |
파티 셔너 | 본문 | 클러스터에서 사용중인 파티 셔너 |
절도 | 본문 | 클러스터에서 사용중인 스 니치 |
range_ownership | 지도 <텍스트, 목록 <텍스트 >> | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
8. DESCRIBE 스키마
전체 (비 시스템) 스키마를 재생성하는 데 사용할 수있는 출력 CQL 명령입니다. 각 비 시스템 키 스페이스에 대해 "DESCRIBE KEYSPACE k"가 호출 된 것처럼 작동합니다.
describe_schema_statement :: = DESCRIBE [FULL] SCHEMA [WITH INTERNALS]
시스템 키 스페이스를 포함하는 데 사용 합니다.DESCRIBE FULL SCHEMA
경우 지정된 출력 테이블 ID를 포함하고, 열을 떨어 "재 작성"필요한 DDL을 나타내는데 채택된다.WITH INTERNALS
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
9. 설명 유형
현재 키 스페이스 또는 현재 키 스페이스가없는 경우 모든 키 스페이스에서 모든 사용자 정의 유형의 이름을 출력합니다.
describe_types_statement :: = 설명 유형
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
10. 설명 유형
주어진 사용자 정의 유형을 다시 만드는 데 사용할 수있는 CQL 명령을 출력합니다.
describe_type_statement :: = DESCRIBE TYPE [ keyspace_name.]type_name
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
11. 설명 기능
현재 키 스페이스 또는 현재 키 스페이스가없는 경우 모든 키 스페이스의 모든 사용자 정의 함수 이름을 출력합니다.
describe_functions_statement :: = DESCRIBE 기능
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
12 . 설명 기능
주어진 사용자 정의 함수를 다시 만드는 데 사용할 수있는 CQL 명령을 출력합니다.
describe_function_statement :: = DESCRIBE FUNCTION [ keyspace_name.]function_name
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
13. AGGREGATES 설명
현재 키 스페이스 또는 현재 키 스페이스가없는 경우 모든 키 스페이스의 모든 사용자 정의 집계 이름을 출력합니다.
describe_aggregates_statement :: = AGGREGATES 설명
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
14. DESCRIBE AGGREGATE
주어진 사용자 정의 집계를 다시 만드는 데 사용할 수있는 CQL 명령을 출력합니다.
describe_aggregate_statement :: = DESCRIBE AGGREGATE [ keyspace_name.]aggregate_name
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
15. DESCRIBE 객체
전체 객체 스키마를 재생성하는 데 사용할 수있는 출력 CQL 명령입니다. 여기서 객체는 키 스페이스, 테이블 또는 인덱스 또는 구체화 된 뷰 (이 순서대로) 일 수 있습니다.
describe_object_statement :: = DESCRIBE object_name[내부 포함]
가 지정되고 키 스페이스 또는 테이블을 나타내는 경우 출력에는 테이블 ID가 포함되며 삭제 된 열을 "재 작성"하는 데 필요한 DDL을 나타내는 데 채택됩니다.WITH INTERNALSobject_name
object_name "클러스터", "테이블"등과 같은 "설명"한정자가 될 수 없습니다.
반환 된 열 :
기둥유형기술keyspace_name | 본문 | 키 스페이스 이름 |
유형 | 본문 | 스키마 요소 유형 |
이름 | 본문 | 스키마 요소 이름 |
create_statement | 본문 | 스키마 요소를 다시 만드는 데 사용할 CQL 문 |
Astra TEST 진행 해보기
1. Astra 는 서버리스 기반의 AWS 와 Google 에 DB 를 간단히 생성해서 테스트 가능!
2. 샘플 앱 갤러리 보면 마치 market place ! 라 이해 하면 된다.
3. Java + spring + AstraDB , 또는 스프링 기반 reacicve tetclinic 등 여러가지 생성가능 하다.
4. 스프링 데이터, nest,js , Node.js 등 여러가지 활용도 가능하다.
5. 마이그레이션 및 데이터 로드또한 가능한듯!
6. 실제 생성에 보면 기본 25$를 기본으로 제공해주며, 사용량에 따라 후불제로 진행!
7. DataBase 생성에는 Database name , key space 를 기본적으로 입력하면 간단히 AWS 에 구성이 가능하다.
아마 리전은. US-EAST-1 에 설치 되는 모양이다.
8. 생성된 DashBoard 살펴 보면 기본적으로 남은 creadit 은 25$ 아마 read write 따라 비용발생!
9. 느리다! 중간중간 errloading 도 발생한다! 리전...흠..
10. 상단 메뉴중 health 에 보면 그라파나도 연동해서 헬스체크도 가능하며 모니터링도 할수 있도록 구성된듯!
11.CSV 파일또한 loading 가능한듯 보인다. 이런 엑셀파일을 만들어 loading 해보자!
12. Dash Board 중에 CQL 콘솔을 살펴 보면 직접 테이블도 생성해보고 키도 입력해보고
(기본적인 사용법을 알아보자! )
13. 테스트로 Keyspace 생성및 Table 생성 데이터는 T1 이라는 테이블이 insert , Select T1 조회 까지 쭉~ 진행!
cqlsh> CREATE KEYSPACE myks WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};
cqlsh>
cqlsh> USE myks;
cqlsh:myks>
테이블 만들기 :
CREATE TABLE t1 (
f1 int,
f2 int,
f3 text,
f4 text,
PRIMARY KEY (f1, f2)
);
CRUD DML 명령 :
INSERT INTO t1 (f1,f2,f3,f4) VALUES (0, 0, 'value0-0:f3', 'value0-0:f4');
INSERT INTO t1 (f1,f2,f3,f4) VALUES (0, 1, 'value0-1:f3', 'value0-1:f4');
SELECT * FROM t1;
그냥 작동합니다!
f1 | f2 | f3 | f4
----+----+-------------+-------------
0 | 0 | value0-0:f3 | value0-0:f4
0 | 1 | value0-1:f3 | value0-1:f4
(2 rows)
기준으로 선택하기
select * from t1 where f1 = 0 and f2 = 1;
f1 | f2 | f3 | f4
----+----+-------------+-------------
0 | 1 | value0-1:f3 | value0-1:f4
(1 rows)
색인화되지 않은 기준으로 선택을 시도하는 중 ... SQL의 "Full Table Scan"과 같이 :
cqlsh:myks> select * from t1 where f2 = 1;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
좋아, 명시 적으로 sql과 같은 잘못된 일을하자 :
cqlsh:myks> select * from t1 where f2 = 1 ALLOW FILTERING;
f1 | f2 | f3 | f4
----+----+-------------+-------------
0 | 1 | value0-1:f3 | value0-1:f4
(1 rows)
보조 인덱스 사용 :
cqlsh:myks> CREATE INDEX ON t1 (f3);
cqlsh:myks> select * from t1 where f3 = 'value0-0:f3';
f1 | f2 | f3 | f4
----+----+-------------+-------------
0 | 0 | value0-0:f3 | value0-0:f4
(1 rows)
완전한 pk를 사용하여 1 행 업데이트 :
update t1 set f3 = 'f3' where f1=0 and f2=0;
부분 pk를 사용하여 행 업데이트를 시도하십시오.
cqlsh:myks> update t1 set f3 = 'f3' where f1=0;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Some clustering keys are missing: f2"
비 pk 기준을 사용하여 행 업데이트를 시도하십시오.
cqlsh:myks> update t1 set f3 = 'f3' where f3 = 'value0-0:f3';
InvalidRequest: Error from server: code=2200 [Invalid query] message="Some partition key parts are missing: f1"
Cassandra 및 CQL에 대한 예비 결론 : 정말 간단 해 보이지만 SQL과 비슷하지만 키-값 데이터베이스의 "자연스러운"제한이 있습니다.
# TEST 캡쳐본
14. 음... 마지막 터미네이트 잊지말자! 그리고 지금껏 테스트 한 비용을 알아보자!
15. 읽기 5회 쓰기 1회 사용데이터는 8.58Kb
16. 그라파나로 사용량 확인
17. 서버 삭제!
18. 총 사용한 금액은 25$ 중 23.52$ 남았으며, 1.48$ 사용 되었다. 비싸다! ;;;
- Total
- Today
- Yesterday
- [오라클 튜닝] sql 튜닝
- 설치하기(HP-UX)
- 커널
- 스토리지 클레스
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- pod 상태
- 트리이스
- 튜닝
- 여러서버 컨트롤
- 버쳐박스
- Oracle
- [오라클 튜닝] instance 튜닝2
- K8s
- (InstantClient) 설치하기(HP-UX)
- directory copy 후 startup 에러
- 우분투
- 오라클
- 5.4.0.1072
- CVE 취약점 점검
- 키알리
- 코로나19
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- 쿠버네티스
- 앤시블
- 오라클 홈디렉토리 copy 후 startup 에러
- ubuntu
- MSA
- startup 에러
- 테라폼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |