프로그래밍/DBMS
-
[Redis] Redis Cluster Tutorial프로그래밍/DBMS 2018. 11. 2. 14:03
Redis Cluster Tutorial본 문서에서는 레디스 클러스터에 대해 가볍게 다룬다. 분산시스템에 대한 복잡한 내용은 다루지 않는다. 레디스 클러스터를 셋업하고 테스트하고 동작하는 방법을 다루며, 유저 입장에서 전체 시스템이 어떻게 연계되어있는지에 대해 간략히 설명한다. 클러스터 시스템의 자세한 내용은 Redis Cluster Specification에서 알아보도록 하자. 레디스 클러스터의 가용성 (availability)과 일관성 (consistency) 특징에 대해서는 최종 유저 입장에서 간단한 방식을 통해 기술한다.단, 본 문서에서 다루는 내용은 레디스 3.0 이상의 버전을 대상으로 함을 명심해야 한다.실제 프로덕트에 레디스 클러스터를 사용하고자 할 경우에는, Redis Cluster Spe..
-
[Redis] 레디스 데이터 파티셔닝하기프로그래밍/DBMS 2018. 10. 2. 07:00
Partitioning: how to split data among multiple Redis instances원본, 번역저장소파티셔닝은 다수의 레디스 인스턴스가 존재할 때 데이터를 여러곳으로 분산 시키는 기술로, 각 레디스 인스턴스는 전체 키 중 일부인 자신에게 할당된 파티션의 키들만 관리하게 된다. 본 문서에서는 파티셔닝의 기본적인 컨셉 소개부터 레디스에서 파티셔닝을 하는 방법까지 다룬다. 파티셔닝이 유용한 이유레디스에서 파티셔닝을 사용하는 데에는 두가지 이유가 있다. 초 대용량의 데이터베이스를 다수의 컴퓨터 메모리 상에서 관리 할 수 있다. 파티셔닝을 사용하지 않을 경우 단일 서버 노드 한대의 메모리와 저장공간 용량 만큼만 데이터베이스를 관리할 수 있다. 파티셔닝을 통해 다수의 컴퓨터 파워, CPU..
-
[SPDK] SPDK를 통해 최적화된 RocksDB 설치 및 테스트프로그래밍/DBMS 2018. 10. 1. 14:49
SPDK 설치 및 테스트SPDK 홈페이지SPDK 문서SPDK 빌드하기git clone https://github.com/spdk/spdk.gitcd spdkgit checkout v18.07.xgit submodule update --initsudo scripts/pkgdep.shunset PYTHONPATH # if it doesn't work, execute `pip uninstall enum34`make./test/unit/unittest.sh # unit test to verify modules SPDK 공식 깃허브 저장소에서 직접 클로닝 하여 빌드를 하는 과정이다. 이후 진행하는 blobfs 및 rocksdb 테스트를 위하여 v18.07.x 브랜치를 사용하도록 한다. 시간의 경과에 따라 spdk..
-
[Redis] Redis를 LRU 캐시로 사용하기프로그래밍/DBMS 2018. 10. 1. 14:46
Redis를 LRU 캐시로 사용하기Redis를 캐시로 사용할 경우 새로운 데이터를 입력할 때 오래된 데이터를 자동적으로 후위 저장장치로 전송하는데 용이하다. 이러한 동작은 memcached 시스템과 동일하다. LRU는 Redis에서 지원하는 캐시 리플레이스먼트 알고리즘 중 하나이다. 본 문서에서는 Redis에서 고정된 양의 메모리만 사용하도록 하는 maxmemory 명령에 대해서 알아보고, 유사 LRU인 Redis의 LRU 알고리즘에 대해서 알아본다. Redis 4.0부터 LFU (Least Frequently Used) 알고리즘이 등장하였고, 본 문서의 마지막에 다룬다. Maxmemory 설정 명령maxmemory 는 Redis가 사용하는 메모리 중 데이터 셋을 위한 메모리의 양을 특정 크기로 지정하는..
-
[RocksDB] Write Stall프로그래밍/DBMS 2018. 5. 3. 15:21
RocksDB Write StallsRocksDB는 온라인 요청으로 들어오는 write 비율을 flush나 compaction이 따라갈 수 없을 때, 쓰기 요청을 지연시키기 위한 시스템을 가지고 있다. 이러한 지연 시스템이 없을 경우, 하드웨어가 지원 가능한 대역폭 이상의 쓰기 요청을 수행할 시 데이터베이스는 아래와 같은 문제점을 겪을 수 있다.Space amplification이 증가하여, 디스크 용량 부족이 발생할 수 있다.Read amplification이 증가하여, 읽기 성능을 저하시킬 수 있다.이를 방지하기 위한 기본 아이디어는 쓰기 요청 속도를 강제로 낮추어 데이터베이스가 충분히 처리할 수 있도록 만드는 것이다. 그러나 이 방식을 적용하여 자동적으로 쓰기 속도를 낮추도록 할 경우, 데이터베이스..
-
[RocksDB] IO프로그래밍/DBMS 2018. 4. 3. 17:19
홈페이지 원문RocksDB IORocksDB는 앞으로 발생할 I/O에 대해서 유저가 원하는 방식으로 동작하도록 할 수 있는 몇 가지 옵션들을 지원한다.Control Write I/ORange SyncRocksDB에 저장되는 데이터들은 데이터 파일에 붙여쓰여지는 형태 (appending way)로 생성된다. 이 상황에서 파일 시스템은 메모리상에 dirty 페이지가 충분히 많아지고 threshold를 넘어갈 때까지 버퍼링한 뒤, 한번에 모든 dirty 페이지를 저장장치에 기록하게 된다. 이런 방식은 순간적으로 너무 많은 write I/O를 발생시키고, 실제 실시간 데이터 처리에 필요한 온라인 I/O 들이 앞선 write를 오랫동안 기다리게 하여 유저 쿼리에 대한 latency가 길어지는 문제가 있다. 이 문..
-
[MySQL / InnoDB] InnoDB스토리지 엔진 분석 - information schema프로그래밍/DBMS 2016. 4. 8. 02:28
MySQL/InnoDB 엔진 monitoring을 통한 I/O 분석내가 연구하는 분야인 데이터베이스 그 중 스토리지 엔진 최적화 분야에서는 I/O 최적화를 위한 많은 노력들이 이루어지고 있다. 자체 데이터베이스를 가지고 있거나 상용 데이터베이스를 판매하는 산업체가 아닌 이상은, 아이디어를 검증하기 위해 직접 시뮬레이터를 제작하거나 오픈소스 데이터베이스를 가져다 쓰는 수 밖에 없다. 당연히 직접 만든 시뮬레이터 보다는 널리 사용되는 오픈소스 데이터베이스를 사용하는 것이 훨씬 믿을만한 정보이다. 보통 I/O 상태 정보 및 그와 관련된 시스템 콜들에 대한 연구를 진행할 때, 데이터베이스의 종류에 상관없이 sysstat, blktrace 등의 패키지에 내장된 툴을 사용하거나 ftrace, perf와 같이 리눅스..