빠른 참조

Erlang ETS (Erlang Term Storage) 치트시트

Elixir 및 Erlang용 고성능 인메모리 스토리지 ETS 빠른 가이드: 테이블 초기화, 접근 권한 제어, 테이블 유형(set/ordered_set/bag) 및 검색.

· 게시일

ETS(Erlang Term Storage)는 Erlang/OTP(BEAM) 런타임에 직접 내장된 강력한 인메모리 키-값 데이터베이스로, Elixir에서도 네이티브로 직접 제어할 수 있습니다.

🔗 관련 문서: Elixir 프로그래밍 언어 치트시트

테이블 생성 및 기본 조작

# 새로운 이름 기반 테이블 생성
table = :ets.new(:user_cache, [:set, :public, :named_table])

# 튜플 데이터 삽입
:ets.insert(:user_cache, {:user_1, "Alice", 30})
:ets.insert(:user_cache, {:user_2, "Bob", 25})

# 키를 통한 레코드 조회
result = :ets.lookup(:user_cache, {:user_1})
# => [{:user_1, "Alice", 30}]

# 특정 레코드 삭제 또는 전체 데이터 삭제
:ets.delete(:user_cache, :user_1)
:ets.delete_all_objects(:user_cache)

# 메모리에서 테이블 완전 제거
:ets.delete(:user_cache)

테이블 유형 (Table Types)

생성 옵션을 통한 테이블 동작 방식 설정:

Type Duplicate Keys Ordering Notes
:set No Unordered 기본 테이블 유형; 첫 번째 요소가 키; 순서 없음
:ordered_set No Ordered Erlang 항 순서로 키 정렬; O(log N) 검색 속도
:bag Yes Unordered 동일 키 중복 허용, 완전 동일 튜플은 불허
:duplicate_bag Yes Unordered 완전 동일 튜플 중복 삽입 허용

접근 권한 제어 (Access Controls)

  • :protected: 모든 프로세스가 읽기 가능, 소유자 프로세스만 쓰기 가능 (기본값).
  • :public: 모든 프로세스가 동시 읽기 및 쓰기 가능.
  • :private: 소유자 프로세스만 읽기 및 쓰기 가능.

:ordered_set 키 순회 (Traversal)

# 키 탐색 함수
first_key = :ets.first(:user_cache)
next_key  = :ets.next(:user_cache, first_key)
prev_key  = :ets.prev(:user_cache, next_key)
last_key  = :ets.last(:user_cache)

관련 주제