728x90

전체 글 507

3) COUNT(*) & COUNT(DISTINCT) 튜닝 4) 페이징 쿼리 작성

대부분은 Count(*) 쿼리가 select * 보다 빠를것으로 예상하지만 실제로는 동일한 경우가 더 많다. limit조건 때문에 차이가 나게 된다. count의 경우 limit조건이 무의미하기 때문이다.orm에서 자동 생성된 쿼리 실행때문에도 문제가 생긴다.select count(distinct(id)) as counter from tab where fd1 = ?;단순히 count *으로 fd1에 해당되는 row의 숫자만 세려고 했는데 훨씬 부하가 더 많은 count(distinct(id)) 로 처리하는 경우도 있다. 2개의 쿼리 둘다  index가 걸린 column을 기준으로 record를 다 찾은다음에 index가 걸리지않은 column에서 B값과 일치하는것을 하나하나 확인하는 방식으로 동작한다. ..

1) CHAR vs VARCHAR 2) VARCHAR vs TEXT

Char vs VarChar모델링논리 모델링 (업무 전문가)업무 분석엔티티 , 속성, 관계 도출정규화물리 모델링 (dbms 전문가)dbms 벤더별 최적 컬럼 타입 선정접근 패턴 분석반 정규화인덱스 전략 수립 Char vs VarChar공통점문자열 저장용 컬럼최대 저장 가능 문자 길이 명시 (바이트 수를 의미하는 것이 아님) , CHAR(10), VARCHAR(10)둘다 10글자까지 만 저장가능하다는 의미이다.차이점값의 실제 크기에 관계 없이 고정된 공간 할당 여부최대 저장 길이 = CHAR(255) vs VARCHAR(16383) == 65535 바이트저장된 값의 길이 관리 여부 (VARCHAR 와 , 가변길이 문자셋 사용하는 CHAR는 저장된 값 길이 관리)0~255bytes  => length-byt..

바벨(Babel) , 린트(Lint)

크로스 브라우징브라우져 마다 사용하는 언어가 달라서 프론트엔드 코드는 일관적이지 못할 때가 많다.바벨은 ECMAScript2015+ 로 작성한 코드를 모든 브라우져에서 동작하도록 호환성을 지켜준다. 바벨은 3단계로 빌드를 진행한다. 파싱 -> 변환 -> 출력module.exports = function myBabelPlugin() { return { visitor: { Identifier(path) { const name = path.node.name; // 바벨이 만든 AST 노드를 출력한다 console.log("Identifier() name:", name) // 변환작업: 코드 문자열을 역순으로 변환한다. path.no..

NPM , Webpack

NPM install을 통해서 CDN, 직접 source download대신에 외부 패키지 의존성을 관리할 수 있다. Webpack function mySum(a,b) { return a + b;}이 상태에서 index.html이 브라우저에 렌더리되면 전역 scope가 오염이된다. 어디에서든 mySum을 접근을 할 수 있게된다.var math = math || {};(function() { function mySum(a,b) { return a + b } math.sum = mySum})()math를 전역scope로 두고 다른 곳에서는 math.sum으로 접근하도록 변경한다. AMD(Asynchronous Module Definition) 브라우저 같이 javascript 를 로딩해서 ..

Debezium PostgreSQL CDC Source Connector

PostgreSQL Replication  postgres는 WAL(write ahead log) 파일 자체를 넘기는다.publication에 등록된 테이블은 복제대상 테이블로 선정된 테이블이다.WAL 을 SQL로 변경하기쉬운 형태로 decoder가 전송한다. Subscribe db 는 변경된 사항을 DML로 table에 적용한다. Dbezium PostgreSQL Source Connector여러 plugin을 지원하는데 알아야할것은 pgoutput 뿐이다.publication.name = Replication 적용할 Publication 이름이다.기본명은 dbz_publication이며 지정된 명칭의 publication이 db에 없으면 publication.autocrate.mode에 따라 새롭게 ..

Cloud/kafka-connect 2024.08.05

Debezium Source MySQL에서 JDBC Sink PostgreSQL 연동

MySQL 과 PostgreSQL 간 Date와 Time 관련 데이터 타입 변환할때 주의할점들Mysql = datetime (timezone 정보가 없다.) timestamp (timezone 정보가 있다.)postgreSQL = Timestamp (timezone 정보가 없다. ) Timestamptz(timezone 정보가 있다.) datetime이 없다. MySQL의 date/time/datetime 변환을 위해서는 Debezium Mysql Source connector에서 time.precision.mode=connect로 반드시 설정해야한다.Debezium Mysql은 date, time ,datetime의 경우 int형으로 변환하지만 timestamp의 경우 문자열로 변환한다.Debezium..

Cloud/kafka-connect 2024.08.03

Schema Registry

Schema RegistryConfluent Kafka는 Schema Registry를 통해 Schema 정보를 별도로 관리하는 기능을 제공한다.토픽으로 전송되는 Data의 Schema는 Schema Registry에서 ID + Version 별로 중앙 관리되므로 레코드 별로 Schema를 중복해서 전송할 필요가 없다. Converter 지원 포맷Json/Avro 포맷의 경우 Schema와 payload로 구성된다.Schema는 해당 레코드의 schema구성을, payload는 해당 레코드의 값을 가진다.Connector 별로 Json 포맷은 조금씩 다를 수 있지만 전반적으로 대부분 비슷하다Json Schema 의 경우 레코드 별로 Schema를 가지고 있으므로 메시지 용량이 커진다. 이의 개선을 위해 ..

Cloud/kafka-connect 2024.08.01

Debezium MySQL CDC Source Connector - 2

Debezium SnapshotDebezium MySQL Connector가 최초 생성시 DB 스키마와 읽어들어야 할 테이블 데이터에 대한 초기 스냅샷을 수행한다.스냅샷은 Connector 생성 시점의 Binlog와 Binlog Position, DB와 읽어들일 테이블의 Schema(DDL) , 대상 테이블의 초기 레코드를 읽어서 카프카에 저장등의 작업을 수행하며 connect-offsets에 해당 connector명과 서버명으로 offset 저보가 없을 때 수행한다.inital = Binlog Position, Schema, 테이블의 초기 레코드를 카프카로 저장하는 작업을 수행한다.schema_only = 테이블의 초기 레코드를 카프카로 저장하지 않고 스키마 변경 정보만 기록한다. Connector 최..

Cloud/kafka-connect 2024.07.25
728x90