분류 전체보기

    Cassandra Secondary Index

    Cassandra Secondary IndexCassandra의 테이블 모델링 방식은 Query-Driven Modeling을 기반으로 하여 데이터 액세스 패턴에 맞춰 설계됩니다. 그러나 이러한 방식은 유연성이 부족하다는 단점이 있습니다.대안으로 원본 테이블과 별도로 자체 인덱스의 역할을 하는 테이블을 생성해서 배치로 저장하는 형태로 관리 중입니다.테이블을 N벌로 관리해야하고 특히나 운영 과정 중 인덱스 테이블을 추가하려면 전체 데이터 마이그레이션이 필요한 문제점이 존재한 상황.1. 앞서서...공식문서에서는 세컨더리 인덱스 사용의 경고를 확인할 수 있고, 이외의.. 구글링시 세컨더리 인덱스를 사용하지 말라는 등등의 블로그 자료들이 많이 확인되었습니다.2. 세컨더리 인덱스를 정말로 사용하면 안 될까요?문제..

    Spring Data Cassandra save vs insert 동작 차이

    Spring Data Cassandra의 save vs insert 동작 차이에 대해서, 간단히 정리해 본 내용입니다. 1. save vs insert 실행 결과 비교테이블 및 코드 설정테스트 할 sample 테이블과 코드는 다음과 같습니다create table sample( id text primary key , value1 text, value2 text);@Table(value = "sample")data class Sample( @PrimaryKey val id: String, var value1: String?, var value2: String?,)interface SampleRepository : CassandraRepository 1-1. Save 테스..

    Cassandra DB Collection Type 사용시 주의 사항 (v4.0 미만 한정)

    테이블 구조create table `test`( partition_key text, target text, subscriber text, extra map, primary key (partition_key, target, subscriber)); 쿼리select partition_key, target, subscriber, extra from test where partition_key = '1158' and target = '1' and subscriber in ('1', '2');Collection Type이 있는 경우 IN QUERY 시 위와 같은 에러가 발생함.Cassandra DB 4.0 부터 ..

    Cassandra DB LWT 동작 방식 (+동시성 이슈 해결기)

    푸시 쪽 개선을 위해서, 푸시 플랫폼에서 푸시 발송 시 특정 데이터 정보가 필요했습니다.그 특정 데이터는 다른 플랫폼에 있는 데이터로 데이터 특성상 푸시 발송시 해당 플랫폼으로부터 실시간으로 데이터를 조회하는 경우, 너무 많은 요청이 해당 플랫폼으로 가게 되었습니다.이러한 이유로 해당 데이터를 푸시 플랫폼으로 이벤트 파이프라인을 구성해서 사본 데이터를 저장하는 식으로 방향을 정했고, Cassandra DB의 특정 테이블에 저장해 두는 식으로 정하였습니다.별도의 저장소에 사본 데이터를 저장하는 경우, 추가적인 저장소가 필요 & 푸시 발송시 추가적인 랜덤 액세스 형태의 읽기 비용이 필요해서, 발송 속도에 영향을 줄 수 있음 상황 설명 (각색)실제 상황으로 상황을 설명하기 문제가 있을 수 있어, 전혀 다른 내..

    Cassandra DB 성능 개선기 (1) - Read ahead와 Disk I/O

    회사에서 플랫폼을 운영하면서 겪은 장애와 개선한 점들을 공유해보려고 합니다.Cassandra DB를 운영하면서 발생한 이슈이지만, 내용이 Cassandra DB에만 국한되지 않는 내용인 점 먼저 말씀드립니다.장애 발생플랫폼을 운영하던 중, 급격하게 증가하는 데이터로 인해 요청이 밀리는 장애가 발생하였습니다.평소 한자리 ms의 Latency로 API를 제공하던 중, 갑자기 요청을 처리하기 위한 Latency가 100ms 이상으로 밀려버리는 장애가 발생하였습니다.빠르게 데이터를 서빙해야하는 데이터 플랫폼 특성상, 낮은 Latency로 데이터를 제공해야 합니다.장애 원인장애 원인은 Disk I/O 사용량 (Disk Usages이 아닌, Disk I/O Usages입니다) 급증으로 인해서 Disk IO이 병목이..