perf(826-2): 자재 한 줄 저장 15 초 → 1 초 · 기계 읽기 한 번에 풂

- Store_Make.save 새 키 찾기 = 3만 키 목록 훑기(제곱) → 묶음
- 기계 상세 = 판만 읽음(표 두 번 풀기 걷음) · 기계 폴더 새 사본 = 줄 글을 이어 한 번에 풂(표 열기 옛 한 파일과 비슷)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 20:18:00 +09:00
co-authored by Claude Opus 5.5
parent a67e15fc4e
commit 7881ed9343
3 changed files with 7 additions and 5 deletions
@@ -60,15 +60,17 @@ def _read(entry: os.DirEntry) -> tuple[bytes, object]:
def _parts(folder: Path, shared: bool, parse=_parse) -> tuple[list[bytes], dict, list]:
raws, head, rows = [], {}, []
raws, head, rows, fresh = [], {}, [], []
for entry in _entries(folder):
raw, data = _read(entry)
data = data if shared else parse(raw)
raws.append(entry.name.encode() + b"\0" + raw)
if entry.name == HEAD:
head = data
head = data if shared else parse(raw)
elif not entry.name.startswith("_"):
rows.append(data)
fresh.append(raw)
if not shared: # 새 사본 — 한 번에 풂(줄마다 풀기보다 빠름)
rows = parse(b"[" + b",".join(fresh) + b"]")
return raws, head, rows