문제 요약
syncMeta()가 src/dst 태그를 _ID로 매칭하고 있어, 실제 환경에서 메타 동기화가 올바르게 동작하지 않는다.
문제 상세
1. _ID 매칭은 src/dst 간 일치를 보장할 수 없음
_ID는 TAG 테이블에 태그가 삽입될 때 DB가 자동 부여하는 내부 식별자다. Worker는 데이터 복제 시 태그 이름 문자열로 append하고 dst가 독립적으로 _ID를 부여하므로, src _ID와 dst _ID가 일치한다는 보장이 없다. 특히 autoCreate로 생성된 dst 테이블이나 태그가 다른 순서로 추가된 경우 완전히 어긋난다.
src: _ID=1 name=sensor-A, _ID=2 name=sensor-B
dst: _ID=1 name=sensor-B, _ID=2 name=sensor-A ← 순서가 다른 경우
→ _ID=1끼리 매칭하면 서로 다른 태그를 같은 태그로 인식해 잘못된 rename이 발생한다.
2. src에만 존재하는 태그(신규 추가)를 dst에 반영하지 않음
const dstRow = dstById.get(BigInt(srcRow._ID));
if (!dstRow) continue; // dst에 없으면 그냥 건너뜀
src에 새로 추가된 태그는 dst에 INSERT되지 않는다. 이 태그의 데이터가 파티션에 복제되더라도 _TAG_META에 없으면 Worker에서 drop_not_found로 버려진다.
3. 태그당 DB 연결을 매번 새로 열고 닫음
for (const srcRow of srcMeta) {
const updateClient = new MachbaseClient(this.target);
updateClient.connect();
updateClient.updateTagMeta(...);
updateClient.close();
}
태그 수만큼 connect/close 오버헤드가 발생한다.
근본 원인
태그 rename 감지를 위해 _ID를 안정적인 식별자로 사용하고 있으나, 복제 구조상 src와 dst의 _ID가 일치한다는 전제가 성립하지 않는다.
해결 방향 (논의 필요)
Option A — rename 감지 포기, NAME 기반 매칭으로 전환
src/dst 태그를 NAME으로 매칭
dst에 없는 태그는 INSERT
메타 컬럼 값이 다른 태그는 UPDATE
rename 감지 불가 (src에서 이름이 바뀐 경우 별개의 신규 태그로 처리됨)
Option B — _ID 동기화 구조 도입
데이터 복제 시 dst에 src와 동일한 _ID로 insert
_ID를 안정적인 키로 사용 가능 → rename 감지 가능
Worker 및 append 구조 변경 필요
영향 범위
metaSync: true로 설정된 모든 TAG 복제 설정
src/dst _ID가 우연히 일치하는 경우 정상 동작처럼 보이나 신뢰할 수 없음
문제 요약
syncMeta()가 src/dst 태그를_ID로 매칭하고 있어, 실제 환경에서 메타 동기화가 올바르게 동작하지 않는다.문제 상세
1.
_ID매칭은 src/dst 간 일치를 보장할 수 없음_ID는 TAG 테이블에 태그가 삽입될 때 DB가 자동 부여하는 내부 식별자다. Worker는 데이터 복제 시 태그 이름 문자열로 append하고 dst가 독립적으로_ID를 부여하므로, src_ID와 dst_ID가 일치한다는 보장이 없다. 특히autoCreate로 생성된 dst 테이블이나 태그가 다른 순서로 추가된 경우 완전히 어긋난다.src: _ID=1 name=sensor-A, _ID=2 name=sensor-B
dst: _ID=1 name=sensor-B, _ID=2 name=sensor-A ← 순서가 다른 경우
→
_ID=1끼리 매칭하면 서로 다른 태그를 같은 태그로 인식해 잘못된 rename이 발생한다.2. src에만 존재하는 태그(신규 추가)를 dst에 반영하지 않음
src에 새로 추가된 태그는 dst에 INSERT되지 않는다. 이 태그의 데이터가 파티션에 복제되더라도 _TAG_META에 없으면 Worker에서 drop_not_found로 버려진다.
3. 태그당 DB 연결을 매번 새로 열고 닫음
태그 수만큼 connect/close 오버헤드가 발생한다.
근본 원인
태그 rename 감지를 위해 _ID를 안정적인 식별자로 사용하고 있으나, 복제 구조상 src와 dst의 _ID가 일치한다는 전제가 성립하지 않는다.
해결 방향 (논의 필요)
Option A — rename 감지 포기, NAME 기반 매칭으로 전환
src/dst 태그를 NAME으로 매칭
dst에 없는 태그는 INSERT
메타 컬럼 값이 다른 태그는 UPDATE
rename 감지 불가 (src에서 이름이 바뀐 경우 별개의 신규 태그로 처리됨)
Option B — _ID 동기화 구조 도입
데이터 복제 시 dst에 src와 동일한 _ID로 insert
_ID를 안정적인 키로 사용 가능 → rename 감지 가능
Worker 및 append 구조 변경 필요
영향 범위
metaSync: true로 설정된 모든 TAG 복제 설정
src/dst _ID가 우연히 일치하는 경우 정상 동작처럼 보이나 신뢰할 수 없음