Vectorize에는 벡터 검색에 필요한 값만 두고, 위치와 운영 메타데이터는 D1/R2로 분리합니다.
R2는 큰 바이너리와 원본에 가까운 산출물을 저장합니다.
models/
dinov2-small-embed-int8.onnx
mobileclip2-s0-vision.onnx
manifests/
dinov2/{version}/gallery-manifest.json
mobileclip2/{version}/gallery-manifest.json
keyframes/
{site}/{floor}/{zone}/{keyframe_id}.jpg
scans/
비공개 Polycam export 또는 후처리 산출물
공개 레포에는 샘플 manifest만 커밋하고, 실제 코엑스 원본 이미지와 스캔 데이터는 R2 또는 비공개 스토리지에 둡니다.
Vectorize는 모델별로 분리합니다.
path-finder-dinov2-small 384D cosine
path-finder-mobileclip2-s0 512D cosine
벡터 metadata에는 화면 표시와 fallback에 필요한 최소 필드만 둡니다.
{
"label": "별마당도서관 북측",
"floor": "B1",
"zone": "STARFIELD",
"imagePath": "/keyframes/...",
"x": 20,
"y": 35
}D1은 keyframe, zone, 모델 버전, 평가 결과를 저장합니다.
현재 Cloudflare D1 데이터베이스:
database_name: path-finder-metadata
database_id: fa1db0d9-34de-4b10-a04b-9461bac3d8c9
binding: DB
초기 schema는 migrations/0001_metadata.sql이며, 원격 D1에 적용했습니다.
CREATE TABLE keyframes (
id TEXT PRIMARY KEY,
site TEXT NOT NULL,
floor TEXT NOT NULL,
zone TEXT NOT NULL,
label TEXT NOT NULL,
image_r2_key TEXT NOT NULL,
scan_id TEXT,
x REAL,
y REAL,
yaw REAL,
captured_at TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE embedding_models (
id TEXT PRIMARY KEY,
dimensions INTEGER NOT NULL,
vectorize_index TEXT NOT NULL,
model_r2_key TEXT,
input_size INTEGER NOT NULL,
created_at TEXT NOT NULL
);
CREATE TABLE keyframe_embeddings (
keyframe_id TEXT NOT NULL,
model_id TEXT NOT NULL,
vector_id TEXT NOT NULL,
created_at TEXT NOT NULL,
PRIMARY KEY (keyframe_id, model_id)
);
CREATE TABLE query_evaluations (
id TEXT PRIMARY KEY,
model_id TEXT NOT NULL,
query_image_r2_key TEXT,
expected_keyframe_id TEXT,
top1_keyframe_id TEXT,
top1_score REAL,
margin REAL,
confidence TEXT,
topk_json TEXT NOT NULL,
created_at TEXT NOT NULL
);Worker는 Vectorize top-K를 받은 뒤 D1 metadata를 붙이는 구조로 확장합니다.
1. query embedding 수신
2. Vectorize top-K 검색
3. D1에서 keyframe metadata 조회
4. confidence 계산
5. 필요하면 정밀 검증 서비스에 top-K 전달
6. 후보, confidence, metadata 반환
DB 바인딩이 없으면 기존처럼 Vectorize metadata만 사용합니다. DB 바인딩이 있으면 keyframes 테이블의 label, floor, zone, image_r2_key, x, y가 Vectorize 결과를 보강합니다.