Skip to main content
QUICK REVIEW

[논문 리뷰] Efficient Single Writer Concurrency.

Naama Ben-David, Guy E. Blelloch|arXiv (Cornell University)|2018. 03. 23.
Distributed systems and fault tolerance참고 문헌 43인용 수 2
한 줄 요약

이 논문은 다중버전 동시성 제어 기반의 락-프리, 단일 쓰기자 동시성 제어 프레임워크를 제안하며, 엄격한 일관성, 취소 없음, 경계가 있는 단계 복잡도를 가진 대기-자유성, 정밀한 가비지 컬렉션을 보장한다. 순수 기능적 접근 방식을 강제하고 효율적인 버전 유지 관리를 통해 쓰기자에 대한 저항력을 확보하며, 검색 인덱스 및 HTAP 데이터베이스와 같은 시스템에서 읽기자에게 점진적인 버전 전파를 실현한다.

ABSTRACT

In this paper we consider single writer multiple reader concurrency - any number of transactions can atomically access shared data structures, but only one thread can atomically update the data. Limiting ourselves to a single writer allows us to achieve strong properties, some of which are not achievable with multiple writers. In particular, we guarantee strict serializability, no aborts, wait-freedom with strong bounds on step complexity, and precise garbage collection. Our approach is based on a variant of multiversion concurrency control. The user code accesses shared data in a purely functional manner. This allows each read to get a snapshot of the current database. The writer simply swaps in a new root to commit a new version. For garbage collection, we define the version maintenance problem and present efficient algorithms that solve it. This framework allows for very low overhead for maintaining and collecting multiple versions. The single-writer setup is particularly applicable to search indices, online graph analysis, and hybrid transactional/analytical processing (HTAP) databases, in which the bulk of the work is done by transactions that analyze the data. We have implemented the approach in C++ based on a parallel library PAM on balanced binary trees. We present results for two use cases: concurrent range-sum queries and a search index on a corpus. Both support adding new elements to the database. Experiments show that in both cases there is very little overhead when adding a single writer running in the background, while the queries can gradually get newly updated versions. Also, using our lock-free algorithm for version maintenance, the maximum live versions is bounded by the number of working transactions at the same time.

연구 동기 및 목표

  • 단일 쓰기자, 다수 읽기자 환경에서 강력한 일관성과 성능 특성을 보장하는 동시성 제어 메커니즘을 설계하는 것.
  • 공유 데이터 구조에 대한 동시 접근에서 트랜잭션 취소를 제거하고, 경계가 있는 단계 복잡도를 가진 대기-자유성을 보장하는 것.
  • 효율적인 버전 유지 관리를 통해 이전 데이터 버전의 정밀한 가비지 컬렉션을 가능하게 하는 것.
  • 대부분의 작업이 읽기 중심인 시스템, 예를 들어 검색 인덱스와 분석 데이터베이스에서 고성능, 저저항력 업데이트를 지원하는 것.
  • 범위 합 쿼리 및 검색 인덱스 워크로드에서의 구현 및 평가를 통해 실용적 타당성을 입증하는 것.

제안 방법

  • 읽기자는 데이터 구조의 일관된 스냅샷에 접근하는 다중버전 동시성 제어의 변종을 사용한다.
  • 쓰기자는 새로운 루트 노드를 원자적으로 스왑하여 업데이트를 커밋함으로써 락 없이도 버전 일관성을 보장한다.
  • 모든 사용자 코드는 순수 기능적 스타일로 작동하여 부작용을 방지하고 안전한 스냅샷 읽기를 가능하게 한다.
  • 락-프리 알고리즘이 버전 유지 관리를 관리하여 살아있는 버전을 추적하고 효율적인 가비지 컬렉션을 가능하게 한다.
  • 최대 살아있는 버전 수를 동시에 작동 중인 트랜잭션 수로 제한한다.
  • 균형 잡힌 이진 트리 기반의 C++ 병렬 라이브러리(PAM)를 이용해 효율적인 업데이트 및 쿼리 지원을 위한 구현을 구축한다.

실험 결과

연구 질문

  • RQ1단일 쓰기자 동시성 모델이 트랜잭션 취소 없이 엄격한 일관성을 달성할 수 있는가?
  • RQ2병렬 환경에서 정밀한 가비지 컬렉션을 지원하기 위해 버전 유지 관리는 어떻게 효율적으로 수행할 수 있는가?
  • RQ3높은 읽기자 및 단일 쓰기자 워크로드 하에서 다수의 버전을 유지할 경우 성능 저항력은 어느 정도인가?
  • RQ4실제로 대기-자유성과 경계가 있는 단계 복잡도를 보장할 수 있는가?
  • RQ5범위 합 쿼리 및 검색 인덱스 업데이트와 같은 실세계 워크로드에 대해 이 접근 방식은 어떻게 확장 가능한가?

주요 결과

  • 시스템은 고도의 경쟁 조건에서도 엄격한 일관성을 달성하고 트랜잭션 취소가 없음을 보장한다.
  • 살아있는 버전의 최대 수는 동시에 작동 중인 트랜잭션 수로 제한되어 있어 메모리 사용이 예측 가능하다.
  • 실험 결과 배경 쓰기자에 대한 저항력이 극히 낮으며, 쿼리는 점진적으로 업데이트된 데이터 버전을 수신한다.
  • 락-프리 버전 유지 관리 알고리즘은 차단 없이도 효율적인 가비지 컬렉션을 보장하며 과도한 메모리 유지도 방지한다.
  • 범위 합 쿼리 및 검색 인덱스 워크로드 모두에서 읽기자에게 높은 처리량과 낮은 지연 시간을 유지하고 업데이트 비용은 낮게 유지한다.
  • 순수 기능적 접근 방식은 데이터 경쟁이나 일관성 위반 없이 안전한 락-프리 스냅샷 읽기를 가능하게 한다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.