본문 바로가기

DB10

[Redis] 많은 키를 삭제할 때는 UNLINK Redis의 key를 삭제할 때는 주로 DEL 커맨드를 사용한다. DEL key [key ...] Redis 1.0.0 부터 사용되던 커맨드이고 SET과 더불어 Redis 예제에서 자주 사용되는 예제이기 때문에 Redis를 사용한 서버 애플리케이션 개발 시 DEL 커맨드가 자주 사용된다. DEL 커맨드 외에도 Redis는 4.0.0 버전부터 UNLINK 라는 커맨드가 있는데 DEL과 동일하게 특정 key를 삭제하는 기능을 수행한다. UNLINK 커맨드의 차이점은 여러 key를 삭제할 때 DEL 커맨드의 경우 O(N) (n은 삭제할 key의 수) 의 시간 복잡도를 갖는데에 반해, UNLINK 커맨드는 삭제할 key의 수에 상관없이 O(1)의 시간 복잡도를 갖는다. UNLINK 라는 이름처럼 실제로 key를.. 2023. 2. 12.
Redis를 활용한 다양한 시스템 설계 Redis는 in-memory key-value storage로 주로 DB 레이어의 부하 분산과 빠른 응답을 위한 캐싱 레이어로 쓰인다. 하지만 Redis는 value로 다양한 데이터 타입을 지원하고 있으며, 다양한 모듈과 이 모듈들을 포함한 Redis Stack 또한 제공하고있다. Redis에서 제공하는 데이터 타입들과 모듈을 활용하면 큰 노력 없이 다양한 종류의 시스템을 설계할 수 있다. 이번 포스팅에서는 Redis를 활용하여 다양한 시스템을 설계하는 방법에 대해 알아보도록 하겠다. Rate Limit API 사용이나 특정 기능에 있어서 Rate Limit를 해야하는 경우가 종종 있다. - 하루에 한 번만 참여 가능한 이벤트 - 인증 문자를 받고나서 다음 인증 문자를 받으려면 1분의 대기시간을 주.. 2022. 10. 2.
엔티티의 id를 AUTO_INCREMENT가 아닌 UUID를 사용하고자 할 때는 왜 사용해야하나 첫째로는 보안적인 이유이다. AUTO_INCREMENT를 엔티티의 id로 쓰는 경우 id가 단순 숫자값이기 때문에 외부에서 데이터를 긁어가기가 좋다. 예를 들어 커머스 서비스인 경우 상품 데이터에 AUTO_INCREMENT id를 사용한다면 조회 API를 사용하여(단순 상품 조회 public API일 것이기 때문에) 모든 상품 데이터를 긁어갈 수 있을 것이다. (https://some-commerce/products/1, https://some-commerce/products/2, ..., https://some-commerce/products/102341, ...) 더 크리티컬한 경우는 API를 통해 유저의 개인정보를 조회할 때, 만약 보안 기능이 제대로 작동하지 않는 경우라면 타인의.. 2022. 7. 26.
Sorted Set vs Top-K for Real-time Ranking System 실시간 랭킹 시스템을 구축할 때 Redis의 Sorted Set(ZSET)을 활용하는 방식은 많이 알려진 방식이다. Redis: Real-Time Leaderboard & Ranking Solutions AWS: Build a real-time gaming leaderboard with Amazon ElastiCache for Redis Sorted Set은 자료 구조 자체가 단순하고 지원되는 기능이 많으며 무엇보다 사용이 어렵지 않기 때문에 쉽게 랭킹 시스템을 구축할 수 있다. 또한 Redis는 시간이 지나면서 여러 기능과 모듈들이 생겼고 그러한 모듈 중 하나인 RedisBloom 모듈을 통해 몇 가지 확률적 자료구조를 지원하는데, RedisBloom 모듈은 Sorted Set과 마찬가지로 실시간 랭킹.. 2022. 5. 23.
DocumentDB는 MongoDB가 아니다 DocumentDB는 MongoDB와 호환은 되지만 MongoDB는 아니다. 관련 내용은 아래 MongoDB의 포스팅을 확인하면 좋다. https://www.mongodb.com/atlas-vs-amazon-documentdb Comparing Amazon DocumentDB and MongoDB Amazon DocumentDB is a NoSQL JSON document database service with a limited degree of compatibility with MongoDB. www.mongodb.com 호환이 된다고는 하지만 MongoDB의 모든 API가 호환되는 것은 아니다. 그렇기 때문에 로컬에서 MongoDB를 사용할 때는 문제가 없던 것이 다른 환경에서 DocumentDB를 .. 2021. 11. 25.
Local Client에서 접속가능한 Replica Set 구성하기 (with Docker) MongoDB에서 Transaction을 사용하기 위해서는 Replica Set이나 Sharded Cluster를 사용해야한다. https://dba.stackexchange.com/questions/265236/how-can-we-use-transaction-in-mongodb-standalone-connection https://docs.mongodb.com/manual/core/retryable-writes/ 그래서 MongoDB를 사용하는 application에서 Transaction을 사용하고자한다면 여러대의 MongoDB를 띄워 설정을 해줘야하는데 이번 포스팅에서는 Local 개발을 위해 Docker를 사용하여 MongoDB Replica Set을 구축할 수 있는 방법에 대해 알아보도록 하겠다.. 2021. 8. 9.