채팅 데이터를 저장할 안드로이드 로컬 스토리지 db 고민
realm
SQLite
WatermelonDB
현재 우리가 저장할 데이터는 채팅 데이터로, 모든 채팅 데이터를 fcm으로 수신하면 바로 저장하고, 소켓 연결 시 안 읽음 / 읽음 처리를 위해 로컬 스토리지에서 조회하는 빠른 읽기 쓰기 성능이 필요합니다.
읽기 기능에서 Realm은 메모리 매핑을 통해 데이터에 직접 접근하기 때문에 SQLite보다 읽기 성능이 뛰어납니다. 채팅방에 들어갔을 때 사용자에게 데이터를 조회해서 주는 기능, 소켓에 연결되었을 때 서버에서 읽음 처리를 위해 데이터 조회에 유리합니다.
Realm의 내부 데이터 구조는 전통적인 B-트리와 같은 데이터베이스 구조와 다릅니다. 대신, Realm은 "Zero-copy" 설계와 메모리 매핑 방식을 사용하여 성능을 최적화합니다. 이를 통해 데이터 접근 속도를 크게 향상시키고, 데이터 수정이 빈번할 때도 높은 성능을 유지합니다. 다음은 Realm의 내부 구조와 메모리 관리 기법에 대한 설명입니다.
Column-oriented Storage (컬럼 지향 저장 방식):
Zero-copy Design (제로-카피 설계):
MVCC (Multiversion Concurrency Control):
Dynamic Queries and Lazy Loading:
Efficient Indexing:
Realm의 성능이 뛰어난 이유는 그 내부 데이터 구조와 메모리 관리 기법에 있습니다. 컬럼 지향 저장 방식, 제로-카피 설계, MVCC, 동적 쿼리 및 지연 로딩, 효율적인 인덱싱 등이 결합되어, 높은 읽기/쓰기 성능과 동시성 관리를 제공합니다. 이러한 설계는 특히 모바일 환경에서의 데이터베이스 성능을 극대화하는 데 기여합니다.