참조 : www.cockroachlabs.com/docs/v20.2/architecture/sql-layer.html#interactions-with-other-layers
Overview
각 노드가 대칭적으로 동작하므로 어느 노드로 접속을 해도 상관없음
접속한 노드 = Gateway Node
유저에게서 받은 요청을 SQL Statement 형태로 주어지므로 이를 KV operation을 위한 Plan으로 변경을 하여 transaction layer로 전송
Components
Component | Desc |
Relational structure |
rows & columns -> Table 구성 -> Database 구성 전통적인 관계형 특징의 구조를 제공 - Constraints 등 -> Consistency 유지 위해 Application 단의 추가 로직 불필요 |
SQL API | ANSI SQL Standard 의 많은 부분을 구현하여 Relational structure 를 나타냄 www.cockroachlabs.com/docs/v20.2/sql-feature-support 참조 ACID-semantic transaction 사용 가능 |
PostgreSQL write protocol |
대부분의 PostgreSQL호환 드라이브를 지원 - GORM (Go), Hibernate (Java)와 같은 많은 PostgreSQL ORM 등 |
SQL parser, planner, executor |
Parsing 주어진 쿼리는 구문 분석 되고 문자열 버전을 AST(abstract syntax tree)로 변환 Logical Planning AST는 다음 3단계를 거쳐서 query paln으로 변경됨 1. High-level logical query plan으로 변경 -> Semantic analysis 수행 (쿼리의 valid여부, resolving name, 불필요한 중간 계산 제거 등 수행) 2. Logical plan은 항상 유효한 변환 최적화를 통해 단순화됨 3. Logical plan은 실행가능한 다양한 방법을 평가하고 최소 비용으로 실행계획을 선택하는 검색엔진을 사용하여 최적화 이 단계들의 결과로 최적화된 Logical Plan이 생성됨 -> EXPLAIN으로 조회 가능 Physical Planning 해당 쿼리를 어느 Node에서 처리해야 하는지를 결정 (/w Range locality information) 이 단계의 결과로 Physical Plan이 생성 -> EXPLAIN(DISTSQL) 로 조회 가능 Query Execution Physical Plan은 수행을 위해서 Node(or Nodes)에게 전달됨 -> 각 노드에선 처리를 위해서 "logical process"가 spawn됨 (Logical flow에 의해 Node내 혹은 Noder간 통신을 수행) -> 각 결과를 합쳐서 Gateway Node로 보내서 Client에게 전달함 * Logical process들은 쿼리에 의해 조작된 Scalar 값을 encoding하여 사용(Binary 형태로) 하므로 디스크에서 읽은 데이터는 다시 decoding을 해서 Client에 전달해야 함 Vectorized query execution vectorized query가 enable되면 Physical Plan은 vectorized execution engine에 전달 됨 Engine은 row 단위데이터를 columar format으로 변환되어 메모리에 저장됨 -> 엔진에서 신속하게 처리 Engine에서 처리를 다 하고나면 다시 row단위로 변환 후 SQL interface로 반환 |
Encoding | SQL Layer를 제외한 하위 Layer에서는 bytes단위로 처리됨 -> 이에 대한 Encoding 필요 indexed column의 경우 byte encoding이 나타내는 데이터와 동일한 order를 유지하는 것이 중요하며 이를 위해서 sorted key-value map을 이용함 단, Primary key가 아닌 경우는 공간은 덜 사용하지만 ordering을 유지하지 않는 value encoding을 사용 |
Dist SQL | Cockroach DB 는 분산DB이므로 일부 쿼리에 대해 분산SQL 최적화 도구를 활용해서 여러 Range를 포함하는 쿼리 속도를 크게 높일 수있음 Non-distributed query에서는 coordinate node에서 쿼리에 match되는모든 데이터를 일단 받은 후에 Data set에 대한 계산을 수행함 하지만 Distributed query는 각 Node에서 필요한 계산을 수행한 후에 그 결과를 coordinate node로 보내고 그 결과를 취합하여 result를 생성함 -> coordinate node로 전송되는 데이터양을 크게 줄임 각 Node에서 나뉘어서 처리가 되므로 개별 Node의 storage보다 큰 row dataset을 처리할 수 있음 분산된 방식으로 처리하기 위해서 몇가지 개념을 소개함 - Logical Plan : 위에서 설명한 AST/Plan nod tree와 유사하게 추상(non-distributed) data flow를 나타냄 - Physical Plan : 개념적으로 Logical Plan을 physical node에 Mapping하는 것을 말함 -> Cluster topology에 따라서 replicate되고 specialized 됨 Cluster에서 schedule되고 수행 됨 |
'Database' 카테고리의 다른 글
[HANA] Test data generator (0) | 2022.01.07 |
---|---|
[Cockroach] Architecture - Transaction Layer (0) | 2020.12.13 |
[Cockroach] 노드 추가/삭제 (0) | 2020.12.12 |
[Cockroach] Architecture - Read/Write (0) | 2020.12.12 |
[Cockroach] 여러 노드에 Secure 모드로 구성하기 (0) | 2020.12.12 |