Data Store/etc
카프카 컨슈머
카프카 컨슈머
2021.07.23컨슈머? 파티션 리더에게 메시지 가져오기 (Consume) 다른 메시지큐 처럼 소비하면 없어지나? ⇒ X 기본값 7일 동안 저장했다가 삭제 ⇒ 필요하다면 이미 가져온 데이터도 다시 가져올 수 있음 ⇒ 여러 컨슈머 그룹에서 메시지 수신 가능 컨슈머 중요 옵션 group.id 컨슈머 그룹 식별자 fetch 관련 fetch.min.bytes 한 번에 가져오는 데이터의 최소 사이즈. 지정한 사이즈 보다 작은 경우 요청에 응답하지 않고 데이터가 누적될 때 까지 기다림. (default 1byte) fetch.max.wait.ms 사이즈가 작아서 기다린다면 최대 몇 초 동안 기다릴건지? (default 500ms) max-wait 시간 지나면 쌓인 데이터가 min-bytes 보다 작아도 그냥 컨슈머로 보내기 때문에..
docker 안의 DB를 사용할 때 timezone 문제
docker 안의 DB를 사용할 때 timezone 문제
2021.05.19Oracle로 설명했지만 대부분의 DB in docker image에서 통하는 내용이다. 문제 상황 Oracle docker image를 사용해서 DB 올리고 작업하고 있는데, insert된 row들 날짜 필드 시간이 안맞는다. (UTC -> Asia/Seoul)로 timezone 설정이 필요한 상황이다. ```sql SELECT SYSDATE, CURRENT_DATE, DBTIMEZONE, SESSIONTIMEZONE FROM DUAL; -- 현재 시각은 한국 기준 05-19 00:38:51 +-------------------+--------------------------+----------+---------------+ |SYSDATE |CURRENT_DATE |DBTIMEZONE|SESSIONT..
Flyway
Flyway
2021.05.13flyway는 DB에 schema_version 테이블을 유지하면서, DB 상태를 버전으로 관리할 수 있게끔 도와준다. (나중에 DB를 실행해도 버전에 맞게 데이터를 밀어넣어준다.) DB에 데이터가 존재하는 상태에서 flyway를 적용할 때 발생하는 문제 ``` Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema "SYSTEM" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table. ``` DB가 비어있지 않아(상태를 가지고 있어) flyway를 적용할 수 없다는 것. flyway를 사용하려면 ..
PostgreSQL 설치
PostgreSQL 설치
2020.12.04설치 ```bash sudo yum update -y yum list | grep postgre sudo yum install -y postgresql postgresql-server cat /etc/passwd -- postgres 계정 있는지 확인 ``` init ```bash sudo find / -name initdb 2>/dev/null sudo su - postgres initdb --encoding='utf8' sudo systemctl start postgresql sudo systemctl enable postgresql -- systemd가 알아서 실행 ``` 접근 ```bash sudo su - postgres psql -- postgres 계정으로 postgres DB에 로그인 됨...
DB 이중화 / 클러스터링
DB 이중화 / 클러스터링
2020.09.23DB 클러스터링 DB 장애 시 가용성을 유지하기 위한 클러스터링 방안 Oracle 기준이긴 하지만, 다른 DB에서도 비슷한 옵션이 있는 경우 있음. HA ( High Availability ) 같은 장비를 Active 1대 , Standby 1대로 구성해서 Active에 문제 생기면 Standby로 서비스 하는 방식. Active, Standby 각자가 별도 storage를 가지고 있음. => Active와 Standby의 데이터 동기화 문제 및 성능 저하 => Active 가 죽고 Standby로 전환되기 전 그 사이에 발생하는 트랜잭션은 유실됨 - 데이터 불일치. 정합성 bad *** 오라클에서는 데이터 가드 라는 이름으로 제공하고 있다. *** 위와 같은 문제점 때문에 OPS 방식이 8i 버전까지 ..
[DB] 분산 DB, 파티셔닝 (partitioning ), 샤딩 (sharding)
[DB] 분산 DB, 파티셔닝 (partitioning ), 샤딩 (sharding)
2019.08.25파티셔닝(단편화) 란? 저장해야 하는 정보가 많은 대규모 시스템의 경우 하나의 DB에 모든 정보를 저장해서는 제대로 된 응답성을 기대할 수 없다. read가 많이 발생하든, write가 많이 발생하든 DB 저장하는 정보가 많을 수록 스캔 속도도 느려지고, 요청이 많은 경우 큐에 작업이 쌓이면서 응답도 느려진다. 그래서 DB를 여러대 운용해서 응답을 좀 분산해보자, 라는 생각을 하게 되는데, 가장 쉽게 생각해 볼만한건 Master DB의 데이터를 복제한 Slave DB를 두고, read를 분산하는 것이다. 스캔 속도는 그대로겠지만 요청을 분산할 수 있다. 그러나 이 방법은 write는 분산되지 않는다. Master에 write가 발생하면 이를 Slave에 복제 해줘야 하므로, 복제하면서 같은 내용의 wri..
[Oracle] 오라클 개요 및 정리
[Oracle] 오라클 개요 및 정리
2019.05.31DBGuide.net 오라클 오라클 장점? 왜 기업에서 오라클을 선호하는가? 성능이 좋고 다양한 옵션이나 기능을 제공한다는 장점도 있긴 하지만, 가장 큰 이유 중 하나는 안정성. 어떤 관점에서 안정성이 좋은가? RAC를 통한 고가용성 => DB 이중화 / 클러스터링 간단히 정리하면, 스토리지와 오라클 인스턴스를 분리해서 인스턴스에 장애가 나더라도 유실 없이 다른 인스턴스에서 곧바로 Active로 서비스 할 수 있다는 것. 타입 관련 팁 숫자 타입은 `` NUMBER``를 쓰는 것이 좋다. `` NUMBER(, )``로, 가변길이 타입이다 문자열은 `` CHAR || VARCHAR2``로 쓰는 것이 좋다. 그냥 VARCHAR는 추후 다른 용도로 쓰일 수 있다고 Oracle에서 사용하지 않기를 권고함. 날짜..
DB 접근 툴 : Universal Database Tool
DB 접근 툴 : Universal Database Tool
2019.05.27https://www.eversql.com/top-7-mysql-gui-tools-for-windows/ DBeaver 다양한 DB들을 지원하고, Enterprise 버전이면 NoSQL들도 지원함. SQL developer Oracle을 쓸거라면 무난하고 괜찮음. Sequel Pro 괜찮은 듯? JetBrain DataGrip JetBrain에서 나온거라 친숙하고 여러모로 괜찮을 듯 유료라는 것만 빼면 ㅎ IntelliJ 내장 DB Tool 뭐 대단한 작업 할게 아니면 그냥 IntelliJ에 내장되어 있는 DB Tool 기능을 활용한다. 스마트 서치에서 Database 입력하면 있음. 단점은 intelliJ 프로젝트 마다 각각 DB연결 설정을 따로 해줘야 한다는 점. 뭔가 좀 더 복잡한 작업을 해야 하거..
확장성 해싱 VS 선형 해싱 : Shard key
확장성 해싱 VS 선형 해싱 : Shard key
2019.01.18선형 해싱 (Linear hashing) 선형 해싱은 next에 대한 정보가 필요 (next 이전이면 3bit 접근, 이후이면 2bit 접근) 별도로 유지하거나, 유지 안해도 bucket 개수로 evaluation 가능할 듯 확장성 해싱 (Extendiable hashing) 확장성 해싱은 global 디렉터리 구조(bucket address table)를 유지해야 한다 선형 해싱 vs 확장성 해싱 선형 해싱과 확장성 해싱을 사용해도 데이터의 이동을 완전히 피할 수는 없지만 modular 보다는 낫다. (overflow가 발생하는 버킷만 split) 확장성 해싱은 global 디렉터리 구조(bucket address table)를 유지해야 한다는 단점이 있지만, 무조건 한 번의 쿼리로 데이터를 읽어올 수..
[mysql] 일반적인 SQL
[mysql] 일반적인 SQL
2017.06.11쿼리 테스트 (MySQL을 쓰는건지 모르겠지만 간단한 쿼리는 어차피 공통 문법이라) https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all MySQL String Functions https://dev.mysql.com/doc/refman/5.7/en/string-functions.html CREATE TABLE | VIEW | DOMAIN CREATE TABLE Syntax & Options 자주 사용하는 옵션만 포함하면 이렇다. ```sql CREATE TABLE tbl_name( col_name1 data_type [NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY], user_id BIGINT UNSIGNED ..
[mysql] 초기 설정 및 계정, DB
[mysql] 초기 설정 및 계정, DB
2017.06.11```bashsudo service mysql startsudo mysql 또는 mysql -u root [-p] [db_name]```ERROR 1045 (28000): Access denied for user 뜨면서 안될 때는 패스워드를 설정해준다.```bashmysqladmin -u root -p password``` SHOW자주 쓰는 ``sql SHOW`` 명령어```sqlhelp show; SHOW DATABASES;SHOW TABLES;SHOW FIELDS FROM tbl_name; -- Type | Null | Key | Default | Extra``` SET PASSWORD```sqlSET PASSWORD FOR user@host = PASSWORD('pw');````` root@loca..