DB
-
elasticsearch disk 이슈DB 2023. 3. 7. 13:45
엘라스틱서치 인덱스는 샤드별로 노드에 저장된다. 인덱스 하나를 3개의 샤드로 저장할 경우 노드들에 분산되어 배치된다. 분산 알고리즘은 따로 찾아보자. 보통 엘라스틱서치 노드를 여러개 클러스터링해서 사용하므로 인덱스의 샤드 하나가 한 곳에만 몰려 저장된다던지 하면 비효율적이다. 따라서 샤드를 나누던지 인덱스 rollover 를 통해 일자별로 저장하던지 하는 식으로 분산하자. _cat/allocation?v 명령을 통해 디스크 사용량을 볼 수 있고, 여유공간이 없으면 인덱스가 readonly 로 바뀐다. 따라서 lifecycle policy 를 통해 삭제하거나 디스크 사용량을 모니터링 해서 삭제해야 한다.
-
Real Mysql 내용 정리DB 2022. 12. 18. 23:41
서비스 개발 시 어떤 DBMS 를 선택해야 하는 지? -> 범용 DBMS (mysql) 를 선택하고, 사용량이나 데이터의 크기가 커지면 일부 도메인 또는 테이블의 데이터만 전용 DBMS 로 이전해서 확장하는 형태 ORM vs 직접 쿼리 개발 -> 개발 생산성 vs 성능과 안정성, 서버 비용 AWS 같은 DBMS 서버는 자원을 무제한 사용해도록 해주고 그에 대한 비용을 가져간다. (아...) 아키텍처 Mysql 서버는 mysql 엔진, 스토리지 엔진 (innodb 등) 로 구성된다. Mysql 엔진의 앞에는 커넥션 핸들러 (TCP 서버), 뒤에는 OS 와 파일로 상호작용한다. (쿼리 한번 마다 OS 파일 시스템콜을 치면 얼마나 느렸을까? 최적화의 끝판왕...)
-
Redis 에 대해DB 2022. 5. 27. 07:11
https://www.youtube.com/watch?v=mPB2CZiAkKM ( 나중에 다시 보자 .. redis 를 조금 더 써보고 보면 더 이해될 거 같다. ) Redis 는 open source in-memory data store (https://redis.io/) Collections 를 제공해 주는데, strings, list, set, sorted set, hash 용도에 맞게 잘 써야 함. ( API 가 편하게 제공되는 장점이 있음. -> 스프링 코드 보면 진짜 짧고 간결함. ) Persistence 기능을 제공하고 이는 백업과 같음. DB 처럼 바로 조회하는게 아님. In-memory 여서 access / insert / delete 등이 빠르지만 메모리 관리를 조심해서 해야 함. Ph..
-
Replicas vs ShardsDB 2022. 5. 16. 12:55
먼저 둘 다 분산 DB에서 트래픽을 분산시키기 위해 사용하는 기법이다. Replicas 는 같은 데이터베이스를 여러 노드로 복제하여 저장하는 방식이다. 예를 들어 하나의 노드(master)에만 WRITE operation을 즉각적으로 하고, 나머지 노드에는 느리게 한다. 실시간성 데이터가 필요하지 않을 경우 master 노드가 아닌 나머지 노드에서 read작업을 분산할 수 있다. Shards 는 하나의 데이터베이스를 나누어(partitioning) 여러 노드에 분산하는 방식이다. 이렇게 했을 경우 여러 노드의 자원을 이용해 scale-out이 가능하다. 단점으로는 consistency를 보장하기 어렵다는 점이고, 예를 들어 하나의 transaction 을 실행시킬 때 여러 노드에 쿼리를 보내는 경우를 들..
-
RDBMS 트랜잭션과 락에 대해 (내부 구현)DB 2022. 4. 26. 08:50
트랜잭션을 시작하고, tuple 을 읽는 과정에 대해 RDBMS 에서 어떻게 작동하는지 알아보자. 먼저 lock 을 관리하는 객체를 lock manager 라고 하자. lock manager 는 transaction manager 처럼 추상화된 클래스다. 락을 주세요, 락을 반납할게요 등의 API 를 가지고 있다. RDBMS vendors 에 따라 구현하는 방식이 다르고, 구현 방식에 대한 interface 로 isolation level 이라고 추상화하여 제공한다. 즉, isolation level 은 lock manager 의 구현체가 지켜야 할 룰이라고 볼 수 있다. 예를 들어 이걸 보자. lock manager = lock service, 락을 주세요 = acquire lock, 락을 반납할게요 ..
-
RDB Join 에 대해DB 2022. 4. 10. 16:57
최근에 학교 수업에서 parallel join 에 대해 배웠다. 시험 공부도 할 겸 join 에 대해 전체적으로 정리해 보자. # 왜 join 이 필요한지? Relational database 에서는 data repetition 을 줄이기 위해 normalization 을 수행한다. 이는 하나의 큰 테이블을 작은 테이블로 split 해서 저장하는 것을 뜻한다. 이들간의 관계는 foreign key 로 저장하고, 원래의 큰 데이터를 reconstruct 하는 데에 join 을 이용한다. # join 의 비용? = # I.O Disk IO (read / write in-out) 하는 cost 를 join 의 cost 로 잡는다. 메모리 계층에서 disk 에 저장된 tuple 을 cpu 가 access 해야 ..