본문 바로가기

전체 글

(1151)
Consistent Hashing (일관된 해싱) 일관된 해싱은 여러 스토리지 서버 간에 데이터를 분할하여 스토리지 시스템의 확장성을 구현하기 위해 수행된다. 많은 서버 (데이터베이스 서버+ 파티션)에 많은 데이터가 분산되어 있고 사용 가능한 서버 수가 지속적으로 변경되는 경우 (서버 추가 또는 서버 제거) 일관된 해싱을 사용한다. 단순 해싱을 쓸 수 없는 이유 간단한 해싱은 데이터와 지정된 키를 모듈러 함수를 통해 지정된 범위의 숫자로 생성한다. 모듈러 함수로 md5 사용한다면 0~2^128−1 범위에서 임의의 값을 얻을 수 있다. 이제 우리의 해시 함수는 server_number = hash(key)%n 로 계산된다. 이것은 [0- (n-1)] 범위로 제공하며 n은 서버의 수가 된다. 이렇게 하면 서버수에 따라 데이터가 완벽하게 나뉜다. value를..
1. TinyURL // bitly (URL shortening service) 1. 기능 요구 사항 사용자가 입력한 url(원본 도메인)을 특정 도메인을 포함한 형태로 단축 URL로 반환한다. 반환된 단축 url 클릭시 원본 URL로 리다이렉트 된다. 단축 URL은 일정시간이 지나면 만료되어 삭제된다. 만료 시간은 지정할 수 있어야 한다. ex) 예시로 tinyurl.com에서 실행한 결과 기존 url https://www.youtube.com/watch?app=desktop&v=xFPJmk5NQao&ab_channel=siterubix 단축 url https://tinyurl.com/4fyzbta6 2. 추정 및 제약 사항 2-1 트래픽 해당 시스템은 read가 압도적으로 많을 것이다. 읽기와 쓰기 사이의 비율이 100:1로 가정한다. 예상 트래픽 매월 5억 개의 새로운 단축 U..
how to system desgin? system desgin 질문에서의 파악해야할 4가지 1. 사용자 : 시스템을 누가 어떻게 사용하는가? 2. 스케일 : 시스템 증가에 따른 데이터 처리 방법 3. 성능 : 시스템이 얼마나 빨라야 하는가? 4. 비용 : 어떤 구조가 더 빠르고 효율적인가? System desgin 시 생각해야할 사항들 요구 사항에 맞는 제약사항 도출 사용자 수 트래픽, 1년, 5년 파일 저장 용량 - 1년 5년 디비 저장 용량 - 1년 5년 웹 서버 메모리 + 캐시 메모리 사용 API 도출 및 설계 API에 따른 디비 설계 서비스에 필요한 기본 알고리즘 도출 수정 및 최적화 DB 최적화 ( 용도, 사이즈에 맞는 DB 선택 및 파티셔닝 여부 ) 데이터의 성향에 맞는 디비 선택 테이블간의 조인이 많이 필요하면 RDB 확장과 테..
parquet 데이터를 쉽게 접근할 수 있도록 csv로 저장해서 사용한다. 하지만 csv는 메타데이터를 저장할 수 없어 칼럼 별로 dtype을 다시 지정해줘야 하는 일이 생기며, 읽고 쓸 때 시간이 많이 걸린다는 단점이 있다. 이를 보완하기 위해 pickel, parquet, hdf5 와 같은 다양한 데이터 포맷을 사용하는데 그중 parquet에 대해서 알아본다 what is parquet? Apache Parquet는 데이터 처리 프레임워크, 데이터 모델 또는 프로그래밍 언어에 관계없이 Hadoop 생태계의 모든 프로젝트에서 사용할 수 있는 칼럼형 스토리지 형식 Columnar parquet의 저장 방식은 컬럼 지향으로 저장한다. 칼럼 단위의 값은 데이터가 유사할 가능성이 높다. 이로 인해 높은 압축률을 얻을 수 있..
이상감지 소스 및 간략 설명 시계열의 일정한 패턴에서 이상치를 감지하는 여러가지 방법중 Isolation forest와 LSTM을 사용한 예제 입니다. 전체 소스 1. Isolation Forest 해당 데이터는 해가 떠있는것을 기준으로 하는 값이다. (정확히는 태양광 발전량이다.) 즉 해가 뜨지 않은 시간(저녁~새벽)에 데이터가 있다면 이상치가 된다. 데이터에 라벨링을 해 놓았다. 1은 정상 -1은 이상치를 나타낸다. 그래프로 표현한 값들 이상치는 저녁에 발생하며, 월에 따라 시간대가 달라진다. 모델 트레인, 해당 값들은 직접 for 문을 돌려서 가장 높은 값이 나올떄까지 연산한 값이다. (사실 너무 오버피팅 되었지만, 오히려 오버피팅된 값이 더 좋은 성능을 보였다. 아마도 새벽에 데이터가 있는 것을 확실하게 잡는것으로 보인다. ..
RDS -> s3 백업 스냅샷 복원이 아닌 dump 파일을 restore 하는 방법입니다. 1. RDS 데이터를 s3로 dump rds -> s3 pg_dump -v -h ${DATABASE_HOST} -U ${DATABASE_USER} -d ${DATABASE_NAME} | aws s3 cp --storage-class STANDARD_IA --sse aws:kms - s3://my-bucket/dump.sql 번외 덤프 파일로 s3 저장만 한다면 압축해서 저장한다. pg_dump -Z 9 -v -h ${DATABASE_HOST} -U ${DATABASE_USER} -d ${DATABASE_NAME} | aws s3 cp --storage-class STANDARD_IA --sse aws:kms - s3://my-bucket..
pickle 1. pickle? 직렬화 : 개체를 메모리, DB, 파일에 저장하기 위해 개체를 바이트 스트림으로 변환하는 프로세스 언어마다 직렬화를 표현하는 단어가 다르다. java : 직렬화 python : 피클링 perl.. etc : 마샬링 사실 마샬링이 가장 큰 개념이다. 직렬화하는 모든 과정을 뜻하는 말이다. 2. 난 json 잘 쓰고 있는데? pickle vs json pickle과 JSON (JavaScript Object Notation) 에는 근본적인 차이가 있다. JSON은 텍스트 직렬화 형식(유니코드 텍스트를 출력하지만, 대개는 utf-8으로 인코딩)인 반면, pickle은 바이너리 직렬화 형식 JSON은 사람이 읽을 수 있지만, pickle은 그렇지 않다 JSON은 상호 운용이 가능하며 파이썬 ..
파티셔닝 실습 - postgresql 1) 선언적 파티션 선언적 파티션 구성 실습은 postgres 10.X 이상에서만 가능하다. 9.* 버전의 경우 테이블 파티션 명령어가 없기 때문에 2) Partitioning Using Inheritance(하단 참조)를 사용해야 한다. select version(); 1. 파티션 테이블 생성 대형 아이스크림 회사를 위한 데이터베이스를 구축한다고 가정합니다. 이 회사는 매일 최고 기온과 각 지역의 아이스크림 판매량을 저장할 테이블을 다음과 같이 예정이다. 1 2 3 4 5 6 CREATE TABLE measurement ( city_id int not null, -- 도시 id logdate date not null, -- 날짜 peaktemp int, -- 최고 온도 unitsales int -- 판..