콘텐츠로 이동

뮤테이션

뮤테이션은 엣지의 삽입, 업데이트, 삭제를 수행합니다. 이 과정은 일관성, 내구성, 쓰기 시점 최적화를 보장합니다.

배경 설명은 핵심 개념을 참조하세요.

flowchart TD
    Request([Mutation Request
with Event, Operation]) --> WAL[Write WAL] WAL --> Lock[Acquire Lock] Lock --> Read[Read State
from storage] Read --> Modify{State exists?} Modify -->|Yes| ApplyEvent[Apply Event] Modify -->|No| InitialState[Initial State] InitialState --> ApplyEvent ApplyEvent --> ComputeAdditionalInfo[Compute Index, Count
based on changed States] ComputeAdditionalInfo --> Write[Write State with AdditionalInfo
to storage] Write --> Release[Release Lock] Release --> CDC[Write CDC] CDC --> Response([Response])

뮤테이션 요청에는 다음이 포함됩니다:

  • 이벤트: 데이터 변경 사항(예: 새로운 프로퍼티 값, 엣지 생성)
  • 작업: 삽입, 업데이트, 삭제

변경 사항이 적용되기 전에 뮤테이션이 WAL에 기록됩니다. 복구 및 재생을 가능하게 합니다.

프로덕션 환경에서는 WAL 백엔드로 Kafka가 사용됩니다.

동시 수정을 방지합니다:

  • 고유 엣지: (소스, 타겟)에 대한 락
  • 다중 엣지: 엣지 ID에 대한 락

스토리지에서 현재 상태(프로퍼티, 타임스탬프, 메타데이터)를 읽습니다.

작업 및 클라이언트 타임스탬프에 기반한 전환 상태. 자세한 내용은 상태 전환을 참조하세요.

변경된 상태를 기반으로:

  • 인덱스: 기존 인덱스 삭제, 새 인덱스 생성
  • 카운터: 증가 또는 감소

상태, 인덱스 및 카운터가 원자적으로 기록됩니다.

쓰기 후 락이 해제됩니다.

뮤테이션이 CDC(프로덕션 환경에서는 Kafka)에 기록됩니다. 결과 상태가 다운스트림 시스템에서 사용할 수 있게 됩니다.

엣지는 작업(INSERT, DELETE)에 따라 상태가 전환됩니다. 각 이벤트는 클라이언트 타임스탬프를 포함하며, Actionbase는 이 타임스탬프를 사용하여 올바른 최종 상태를 계산합니다. 이는 순서가 뒤바뀐 도착 및 중복 요청(멱등성)에도 적용됩니다.

구현은 State.transit을 참조하세요.

flowchart LR
    INITIAL[["INITIAL: No Edge"]]
    ACTIVE(["ACTIVE: Edge Exists"])
    INACTIVE["INACTIVE: Edge Deleted"]

    INITIAL -->|"INSERT / +1"| ACTIVE
    INACTIVE -->|"INSERT / +1"| ACTIVE
    ACTIVE -->|"DELETE / -1"| INACTIVE
전체 상태 전환 다이어그램

전체 상태 전환 다이어그램

PlantUML에서 편집

앨리스의 작업: like(t=100) → unlike(t=200) → like(t=300)

이벤트는 순서가 뒤섞여 도착할 수 있습니다: like(t=100) → like(t=300) → unlike(t=200)

#이벤트 도착 시점상태카운트 변화합계
1like (t=100)INITIAL → ACTIVE+11
2like (t=300)ACTIVE → ACTIVE01
3unlike (t=200)ACTIVE → ACTIVE01

최종 상태: ACTIVE, 카운트: 1 — 도착 순서와 상관없이 동일한 결과입니다.

뮤테이션 동안 Actionbase는 미리 계산합니다:

구조목적쿼리 유형
EdgeState현재 엣지 상태GET
EdgeIndex정렬된 항목SCAN
EdgeCounter집계된 카운트COUNT

읽기는 쿼리 시점의 계산 없이 간단한 GET, COUNT, SCAN을 사용합니다.

메커니즘보장 내용
락킹동시 수정 방지
원자적 쓰기상태와 인덱스가 함께 기록됨
WAL내구성 및 복구
Read-Modify-Write최신 상태를 기반으로 한 뮤테이션
State Transitions이벤트 도착에도 불구하고 올바른 최종 상태 유지
Idempotency재실행해도 동일한 결과 생성

(이 문서는 Kanana-2로 번역되었습니다. 번역 기여를 환영합니다!)