공부 이야기
-
[Redis] 데이터 타입 - Stream공부 이야기/REDIS 2024. 6. 6. 15:00
1. Periodical Data를 취급할 때 효과적인 데이터 타입- Periodical Data는 연속적인 주기를 갖는 데이터를 맨 마지막에 추가하는 특징이 있다.- Redis Stream 은 Append-Only 방식이다. Redis 5.0 버전에서 List를 사용해 Periodical Data를 처리했다고 한다.2. Redis는 각 스트림 항목에 대해 고유 ID를 생성한다.3. XADD 명령어로 스트림 데이터를 생성할 수 있다.XADD race:france * rider Castilla speed 30.2 position 1 location_id 1"1692632086370-0" # 생성된 ID로 시간+일련번호로 구성res1 = r.xadd( "race:france", {"rider": ..
-
[Redis] Keys * vs Scan공부 이야기/REDIS 2024. 6. 5. 12:52
1. Single Thread Event Loop 기반인 Redis는 한 번에 하나의 명령어만 처리할 수 있다.2. KEYS * 명령어가 실행되는 동안, Redis는 다른 클라이언트 요청을 처리할 수 없으며, 이는 서버 전체의 응답성을 저하시킬 수 있다.3. 한편, Scan은 cursor 기반으로 iterating을 수행하는데 한 번에 전체 키 공간을 스캔하지 않고, 작은 부분씩 순차적으로 스캔한다.4. 각 호출에서 SCAN은 현재 커서를 반환하며, 다음 호출에서 이 커서를 사용하여 스캔을 이어간다. 5. Scan은 명령어가 실행되는 중간에 다른 클라이언트 요청을 처리할 수 있기 때문에 Non-Blocking Operation이다.6. 따라서 Key에 대해 전체 조회 혹은 대량 조회를 할 경우엔 key..
-
[redis] redis는 데이터 타입을 어떻게 처리하나 (redisObject, SDS)공부 이야기/REDIS 2024. 6. 4. 18:21
Redis에 저장된 모든 데이터는 redisObject로 통일된 관리redisObject는 Redis가 데이터의 타입, 인코딩 방식, 참조 카운트 및 기타 메타데이터를 관리하기 위해 사용하는 내부 구조체이를 통해 Redis는 다양한 데이터 타입을 효율적으로 다루고, 메모리 관리를 최적화 1) redisObject의 구성 요소`redisObject`는 다음과 같은 주요 필드로 구성typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * LFU data ..
-
[redis] 데이터 타입 - HLL공부 이야기/REDIS 2024. 6. 4. 17:18
HyperLogLog(HLL)- 큰 데이터 집합의 항목 개수를 매우 효율적으로 추정할 수 있는 확률적 데이터 구조(PF : Probalistic Fuction)- Bloom Filter, Cuckoo Filter 등을 사용하는데 False Positive 발생을 허용하는 데이터 타입이다.- 데이터가 존재하는지 확인하기 위해 사용되는 자료구조로 고정된 소량의 크기(12KB)를 갖음 1. 내부 동작 방식1) 해싱: 입력된 요소는 해시 함수에 의해 해싱. 해시 함수는 요소를 균등하게 분포된 비트 스트링으로 변환- "foo" -> 11010010101101000101010100111001...2) 최대 앞자리 0의 개수 계산: 해시된 결과에서 최대 앞자리 0의 개수를 계산. 이를 통해 해당 해시 값이 얼마나 희..
-
[redis] 데이터 타입 - Strings공부 이야기/REDIS 2024. 6. 4. 12:22
1) Strings SET key value [EX seconds] [PX milliseconds] [NX|XX]: 주어진 키에 값을 설정합니다.EX seconds: 만료 시간을 초 단위로 설정합니다.PX milliseconds: 만료 시간을 밀리초 단위로 설정합니다.NX: 키가 존재하지 않을 때만 설정합니다.XX: 키가 존재할 때만 설정합니다.GET key: 주어진 키에 저장된 값을 반환합니다.DEL key: 주어진 키를 삭제합니다.APPEND key value: 주어진 키에 저장된 문자열 값의 끝에 값을 추가합니다.INCR key: 주어진 키의 값을 정수로 간주하고 1 증가시킵니다.INCRBY key offset: 주어진 키의 값을 정수로 간주하고 지정(offset)한 만큼 증가시킵니다.DECR ke..
-
[Oracle] 예약 풀과 대형 풀의 기능공부 이야기/ORACLE 2024. 5. 25. 14:27
1. SGA 영역에서 Redo Buffer, Data Buffer Cache나 Shared Pool 라이브러리 캐시, 데이터 딕셔너리, 세션 캐시를 위주로 확인하다보니 저 두 영역이 무엇을 하는지가 궁금해졌다. 분명히 SGA 영역 안에 있는데 말이지 2. 먼저 SQL문이 수행될 때 라이브러리 캐시에 있는지 확인하는 소프트 파싱 작업을 수행할 때를 고려해보자- 실제 운영환경에서는 여러 개의 세션에서 여러 개의 SQL문을 동시다발적으로 수행된다.- 제한적인 메모리 자원을 여기저기서 사용할 것인데 만약 큰 용량의 SQL문이 수행된다면?- 그만큼 메모리 할당량도 커질 것이다. 다른 세션에 영향을 줄 수 있다는 뜻이다.- 이를 방지하기 위해 예약 풀과 대형 풀에서 해당 작업을 대신 수행하는 것이다.- 라이브러리 ..
-
[Oracle] BUFFER_POOL 기능에 대해서공부 이야기/ORACLE 2024. 5. 24. 20:40
1. SGA 영역에 테이블 혹은 세그먼트 등을 명시적으로 상주시킴으로써 데이터 엑세스 기능을 최적화할 수 있다.ALTER TABLE table_name STORAGE (BUFFER_POOL KEEP);ALTER INDEX index_name STORAGE (BUFFER_POOL RECYCLE); 2. KEEP, RECYCLE, DEFAULT 세 가지 옵션으로 나뉜다.DEFAULT Pool:데이터베이스에서 일반적으로 사용되는 데이터 블록이 저장모든 세그먼트에 대해 기본적으로 할당KEEP Pool:자주 참조되는 데이터 블록을 캐시에 오래 유지하기 위해 사용중요하거나 자주 액세스되는 데이터 세그먼트를 KEEP 풀에 할당하여, 해당 블록이 캐시에서 제거되지 않도록 함예시: 자주 조회되는 테이블이나 인덱스RECY..
-
[Oracle] FLASH_CACHE 기능에 대해서공부 이야기/ORACLE 2024. 5. 24. 20:36
1. SSD 영역에 직접 접근해서 그나마 빠르게 Disk I/O를 이용하고 싶을 때, 테이블/인덱스/세그먼트를 플래쉬 메모리 영역(SSD)에 배치시킬 수 있다.ALTER TABLE table_name STORAGE (FLASH_CACHE KEEP);ALTER INDEX index_name STORAGE (FLASH_CACHE NONE);ALTER INDEX index_name STORAGE (FLASH_CACHE DEFAULT); 2. 옵션은 KEEP, NONE, DEFAULT로 나뉜다.DEFAULT:기본 캐시 모드로, 데이터베이스의 기본 설정에 따라 플래시 캐시를 사용KEEP:중요하거나 자주 액세스되는 데이터를 플래시 캐시에 오래 유지KEEP 모드는 데이터 블록이 캐시에서 제거되지 않도록 하여, 중요한..