일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- OS
- Data Structure
- c언어
- IT
- Heap
- redis
- 디자인 패턴
- JPA
- 파이썬
- 자바
- 네트워크
- spring webflux
- mongoDB
- react
- Java
- 백준
- C
- MSA
- Kafka
- 컴퓨터구조
- 운영체제
- Proxy
- 자료구조
- Galera Cluster
- MySQL
- Algorithm
- Spring
- design pattern
- 알고리즘
- JavaScript
- Today
- Total
목록데이터베이스 (15)
시냅스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZEXwq/btsI4NKd6Hs/TrCtXOWXWLOSTSkkcjjJVK/img.jpg)
이 프로젝트는 Sharded Mongo Cluster 를 Docker 로 올려보며 간단하게 알아봅니다.production level에서는 전혀 권장되지 않는 설정입니다.MongoDB Sharded Cluster Sharding은 데이터베이스의 수평 확장을 의미합니다. MongoDB에서는 Collection을 Shard Key를 기준으로 나누어 여러 Shard에 분산 저장합니다. 이를 통해 데이터의 관리와 접근성을 향상시킬 수 있습니다. 각 Shard는 독립적으로 Read와 Write 작업을 수행하며 이로 인한 성능 향상을 기대할 수 있습니다. 전통적인 RDB MariaDB, MySQL 에서도 Sharding Cluster 를 구성할 수 있습니다. (Galera Cluster, MySQL Cluster)특..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d4mDCC/btsI4r8fCMa/Xf9tqmXbncTCTQAiYzl2E1/img.png)
MongoDB문서(Document) 데이터베이스로 Key:Value 쌍으로 이뤄져있고 이는 JSON 객체와 유사.필드에는 다른 문서, 배열, 문서 배열 등이 포함될 수 있음문서 사용에 대한 장점Document 는 다양한 프로그래밍 언어의 기본 데이터 유형에 해당포함된 문서와 배열은 비용이 많이 드는 조인의 필요성을 줄여 줌 (비정형)동적 스키마는 유창한 다양성을 지원 (유연성)주요 기능고성능Embedded Data Model 지원으로 Disk IO 를 줄여 줌 (비정형 데이터 모델, 참조)IndexingQueryCRUDAggregationGeoFullText SearchHAReplica SetScale-OutShardingACIDTransactionJournalingStorage EngineWiredTi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t43Si/btsGVaUoGnk/TCW75Hhp4eMk0VfQnJKbdk/img.png)
개인적 차원에서 MySQL 과 MongoDB 의 Select 성능 비교를 수행한 글 입니다.따라서 전혀 신뢰할 수 없으며, 참고용으로만 봐주시길 바랍니다. https://github.com/taesukang-dev/rdb-and-nosql GitHub - taesukang-dev/rdb-and-nosqlContribute to taesukang-dev/rdb-and-nosql development by creating an account on GitHub.github.com 최근 대용량의 로그를 처리할 Database 가 필요하게 되었습니다.한달에 약 1억건 정도를 핸들링해야하고 일정기간이 지나면 데이터를 만료시키거나 (TTL)로그 데이터이므로 대체로 CR 만 수행하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/s77SS/btsDDZ2yXFM/3OD1xeyLsHQ8cqpUGiDxVK/img.png)
이 글에서는 Cent OS 를 기준으로 Redis 설치부터 Redis Cluster 구성까지 살펴봅니다. 실제로 운영하며 겪었던 TroubleShooting 및 중요사항에 대해 설명합니다. Redis 설치 공식 release 링크 위 링크를 통해 원하는 버전의 redis 를 download 받습니다. wget http://download.redis.io/releases/redis-{version}.tar.gz 다운로드 받은 tar 를 해제한 후 해당 폴더 내부에서 make 를 실행합니다. 이때 필요한 package 는 make, pkg-config, gcc 입니다. 우선 같은 폴더의 deps 로 들어간 뒤 make hdr_histogram hiredis jemalloc linenoise lua 를 실행하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GteeN/btsDA4DObUl/qI6VaKpGpukwtNvN2FBL91/img.png)
이 글에서는 Cent OS 를 기준으로 MariaDB 설치부터 Galera Cluster 구성까지 살펴봅니다. 실제로 운영하며 겪었던 TroubleShooting 및 중요사항에 대해 설명합니다. MariaDB 설치 /etc/yum.repos.d/MariaDB.repo 를 등록합니다. MariaDB 공식 repo 링크 위 링크에서 현재 환경에 맞는 OS, MariaDB Version 을 선택합니다. yum install MariaDB 명령어로 MariaDB 를 설치합니다. mariadb --version 명령어로 설치를 확인합니다. systemctl start mariadb 로 실행 후 mysql -uroot -p 로 접속합니다. 이 때 root 는 아직 password 가 설정되지 않은 상태이므로 pas..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yriFP/btsDh8fzlK3/RKrYvR7WwYZ10jpltqKEI1/img.jpg)
이 글에서는 MySQL 의 Galera cluster 의 상태 전송에 대한 이해와 그 방법에 대해서 알아봅니다. https://liltdevs.tistory.com/201 GTID 와 Galera Cluster GTID 글로벌 트랜잭션 식별자, Global Transaction ID 는 서버에서 커밋된 각 트랜잭션에 대한 식별을 가능하게 합니다. 서버 내에서만 유일한 것이 아니라 모든 복제 서버에서도 식별을 가능하게 합니 liltdevs.tistory.com Galera Cluster 는 Multi Master 의 운영을 쉽게 도와주는 도구입니다. 각각의 노드에서 Read-Write 가 가능하고, 논리적인 동기 방식을 지원하므로 선형성을 갖출 수 있습니다. 다만 운영하며 상태 이전에 대한 이해는 필요할 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bS3nYY/btsy34ugcRL/km8QbKM5DgUZhB8gI5ab51/img.jpg)
Galera Cluster https://liltdevs.tistory.com/201 GTID 와 Galera Cluster GTID 글로벌 트랜잭션 식별자, Global Transaction ID 는 서버에서 커밋된 각 트랜잭션에 대한 식별을 가능하게 합니다. 서버 내에서만 유일한 것이 아니라 모든 복제 서버에서도 식별을 가능하게 합니 liltdevs.tistory.com 현재 회사에서는 고가용성을 목적으로 Galera Cluster 를 사용하고 있습니다. Galera Cluster 는 bootstrap(galera_new_cluster 로 실행시킨 node) 이 galera cluster 형성에 중요한 역할을 합니다. 아래에서는 그 설명과 관련 파일에 대해 알아보겠습니다. Boostrap Bootst..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dc3s6S/btsxqyRTXa5/b6kXKSGe4fi1fkAkpSaZFK/img.jpg)
GTID 글로벌 트랜잭션 식별자, Global Transaction ID 는 서버에서 커밋된 각 트랜잭션에 대한 식별을 가능하게 합니다. 서버 내에서만 유일한 것이 아니라 모든 복제 서버에서도 식별을 가능하게 합니다. 따라서, 복제 토폴로지 내에서 모든 트랜잭션을 고유하게 식별할 수 있게 합니다. GTID 를 통해 slave 는 master 에 연결된 후 데이터를 어디에서부터 동기시켜야 하는지 판별하고, MySQL 서버가 죽었다가 다시 올라와 데이터가 중단된 시점을 판단하여 데이터 불일치를 해결할 때에도 사용됩니다. Galera Cluter Galera Cluster 는 Sync / Multi Master 를 지원합니다. 단, 실제로는 네트워크 문제(복제 시 네트워크 지연으로 인한 장시간 blocking..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sV18S/btspTLwNYWU/fWir6F1phH7XFF9D7n28MK/img.png)
이 글에서는 Full-Text Index + Search 에 대한 설명과 프로젝트에서 사용하게된 이유, Full-Text Search 를 JPA 에서 사용하는 방법을 설명합니다. 현재 진행하고 있는 프로젝트는 공연에 대한 예매시스템을 구축하고 있습니다. 사용자들은 공연에 대한 정보를 확인하거나 예매할 때 검색을 사용하기에 기능을 구현할 필요가 있었습니다. 여기에 고민한 것은 Elasticsearch 와 MySQL 의 Full-Text Search 였습니다. Elasticsearch 는 검색에 대한 분명한 장점이 있습니다. 자체적으로 분산 아키텍처를 구축하고 데이터를 샤딩하여 저장하고 역 인덱스를 통한 빠른 데이터 참조를 가능하게 합니다. 다만 구축하려는 검색기능은 높은 가용성이나 정확성을 요구하지 않고 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cAvD4x/btsjsgigKjL/Q3lksWPh1fMryYHkFZZfmK/img.png)
이 글에서는 No Offset 방식이 왜 빠른지 이해하기 위한 개념과 예시를 상술합니다. LIMIT MySQL 에서 LIMIT 은 범위를 제한할 때 사용합니다. 쿼리 결과에서 지정된 순서에 위치한 레코드만 가져오고 싶을 때에 유용하게 사용됩니다. SELECT * FROM test_tb LIMIT 0, 10; 위와 같은 쿼리에서 만약 LIMIT 이 없었다면 테이블 풀 스캔을 실행하여 결과값을 반환했을 것입니다. 하지만 이 때 LIMIT 을 사용하면서 MySQL 엔진은 레코드를 10건만 읽은 직후 반환하게 됩니다. 따라서 모든 레코드를 읽어야하는 것 보다 훨씬 부하가 줄게 됩니다. -- 1 SELECT * FROM test_tb GROUP BY first_name LIMIT 0, 10; -- 2 SELECT..