Sangwon
08/04/2026, 12:09 AMRocky
08/04/2026, 12:09 AMBEGIN, COMMIT, ROLLBACK 구문을 사용하는 SQL Transaction 기능이 도입되었습니다(Beta).
* 이를 통해 여러 개의 INSERT, UPDATE, DELETE 작업을 하나의 원자적 단위로 처리할 수 있습니다.
* 단, *v4.0 미만*이나 Shared-nothing(기본) 환경에서는 동일 테이블에 대한 다중 INSERT나 UPDATE/DELETE 혼용 등에 일부 제약이 있을 수 있으니 버전에 따른 문서를 확인해야 합니다.
3. 실시간 업데이트 (Primary Key 테이블)
실시간으로 데이터를 업데이트하거나 `col = col + 1`과 같은 연산이 필요한 경우, StarRocks의 *Primary Key 테이블 모델*을 사용하면 원자적인 Upsert 및 Delete가 가능합니다.
4. Stream Load 트랜잭션 인터페이스
API를 통해 데이터를 적재할 때도 트랜잭션 인터페이스(/api/transaction/begin 등)를 사용하면, 여러 번의 데이터 전송을 하나의 트랜잭션으로 묶어 원자성을 보장하며 커밋할 수 있습니다.
요약하자면:
StarRocks는 *단일 적재 작업의 원자성은 항상 지원*하며, *v3.5 이상부터는 일반적인 SQL 트랜잭션(BEGIN/COMMIT)*을 통해 여러 문장의 원자성도 지원하기 시작했습니다. 사용 중인 StarRocks 버전을 확인해 보시는 것을 권장합니다.
References
• loading/SQL_transaction.md
• loading/loading_introduction/loading_concepts.md
• loading/Stream_Load_transaction_interface.mdSangwon
08/04/2026, 12:10 AMSangwon
08/04/2026, 12:10 AMRocky
08/04/2026, 12:11 AMLOCK TABLE)은 지원하지 않습니다.
StarRocks는 대규모 분석(OLAP)에 최적화된 엔진이기 때문에, 행 단위의 비관적 락(Pessimistic Lock) 대신 다음과 같은 방식으로 동시성 이슈를 해결합니다.
1. 왜 PostgreSQL 같은 락이 없나요?
* 분산 아키텍처: 수많은 노드에 데이터가 분산되어 있어, 특정 행에 글로벌하게 락을 거는 비용이 매우 큽니다.
* OLAP 최적화: StarRocks는 대량의 읽기/쓰기에 최적화되어 있어, 락을 대기하는 방식보다는 MVCC(Multi-Version Concurrency Control)와 낙관적 방식을 선호합니다.
* 트랜잭션 격리: v3.5부터 지원하는 SQL 트랜잭션도 READ COMMITTED 수준이며, 쓰기 충돌 체크(Write conflict check)를 수행하지 않습니다. 두 트랜잭션이 동시에 같은 테이블을 수정하면 먼저 커밋된 것이 반영되거나 나중에 커밋된 것이 덮어쓰는 구조입니다.
2. 동시성 이슈를 해결하는 StarRocks의 방식
PostgreSQL의 락 대신 StarRocks에서는 다음 기능을 사용하여 데이터 정합성을 유지합니다.
① Primary Key 테이블의 '조건부 업데이트 (Conditional Update)'
동시 업데이트 이슈를 해결하는 가장 핵심적인 기능입니다. *낙관적 락(Optimistic Lock)*과 유사하게 동작합니다.
* merge_condition 설정을 통해 특정 컬럼(예: version 또는 updated_at)의 값이 기존 값보다 크거나 같을 때만 업데이트가 성공하도록 강제할 수 있습니다.
* 이를 통해 동시성 상황에서 "과거 데이터가 최신 데이터를 덮어쓰는 문제"를 원자적으로 방지합니다.
② Primary Key 테이블의 'Partial Update'
특정 컬럼만 업데이트할 때, 전체 행을 읽어와서 수정 후 다시 쓰는(Read-Modify-Write) 과정 없이 엔진 레벨에서 특정 컬럼만 원자적으로 교체합니다.
③ INSERT OVERWRITE (파티션 단위 원자성)
데이터 전체를 교체해야 할 때, 락을 거는 대신 새로운 임시 파티션에 데이터를 다 적재한 뒤 Atomic Swap 방식으로 한 번에 교체합니다. 읽기 작업은 중단되지 않으며 정합성이 보장됩니다.
요약
기능 | PostgreSQL | StarRocks
명시적 락 | SELECT FOR UPDATE, LOCK TABLE 지원 | 지원 안 함
격리 수준 | SERIALIZABLE 등 높음 | READ COMMITTED (제한적)
충돌 제어 | 락 대기 및 Deadlock 감지 | Conditional Update (버전 비교) 사용
권장 모델 | OLTP (트랜잭션 위주) | Primary Key 테이블 모델 권장
따라서 PostgreSQL처럼 `FOR UPDATE`로 행을 잠그고 로직을 수행하는 방식이 필요하다면, StarRocks에서는 Primary Key 테이블과 버전 컬럼(Sequence column)을 조합한 조건부 업데이트 방식을 설계해야 합니다.
References
• loading/Load_to_Primary_Key_tables.md
• loading/SQL_transaction.md
• sql-reference/sql-statements/table_bucket_part_index/auto_increment.md
References
• loading/Load_to_Primary_Key_tables.md
• sql-reference/sql-statements/table_bucket_part_index/auto_increment.md
• loading/SQL_transaction.md