knowledge(요구804): 영구저장소 꼴 · 속도 조사(실측 + 코드) — _조사_804_저장소속도.md

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-11-12 18:16:48 +09:00
co-authored by Claude
parent 00352b83c9
commit 4ea3acdcc3
@@ -0,0 +1,49 @@
# 조사 804 — 영구저장소 꼴과 속도 (요구 804 · 실측 + 코드 조사 · 결정 전)
## 1. 저장 꼴(실측)
| 자료 | 꼴 | 크기 |
|---|---|---|
| M01 기계 | 파일 하나 | 1.5 MB |
| M01 자재 | 파일 하나(30,711 줄) | 15 MB |
| M01 로직 · 수식 문서 | 품셈 장마다(118 파일) | 11.7 MB |
| M02 단가산출(SK) | 항목마다 파일 | 평균 2.2 MB · 개인 층 47 건 102 MB · 마스터 층 34 건 126 MB |
| M02 일위대가 · 사전조합 | 항목마다 파일 | 1 ~ 3 MB(같은 사본을 품음) |
| DB(MariaDB) | 회사 · 사용자 · 프로젝트 행만 | 목록 · 색인 · 잠금은 전부 파일 |
- SK 한 건 속(SK-000048): 문서 본체 2.5 천 자 · 가져온 정보 3.6 천 자 · M01 값 사본 15 만 자가 `사본` · `수식` 두 자리에 같은 내용으로 두 번 → 파일의 약 99 % 가 사본.
- 같은 지문(단가판)의 값 묶음도 SK 마다 따로 저장(공유 없음) · 사본에는 기계 고르기 후보 줄까지 모두 들어감(177 줄).
## 2. 시간(메인 서버 · 따뜻한 상태 · 읽기만 잼)
| 조작 | 시간 |
|---|---|
| M01 기계 표 한 쪽 | 0.03 초 |
| M01 자재 표 한 쪽 · 찾기 | 0.2 초 |
| M01 단가산출 기초 목록 | 0.1 ~ 0.4 초 |
| M02 SK 한 건 열기 | 0.07 초 |
| M02 개인 층 목록(47 건) | 3.1 ~ 3.5 초 |
- 쓰기 시간은 사용자 자료를 건드리게 되어 재지 않음(코드로만 확인).
## 3. 느린 까닭(코드)
1. 층 목록 — 판을 만들려고 SK 파일을 통째로 읽고(sha256) · 요약 때 다시 파싱 · 기준 금액 셈 때 또 파싱 → SK 한 건에 읽기 세 번 + 셈 · 요청 사이 기억 없음 · 목록용 요약 파일 없음(`M02_Template_Layers.list_templates` · `M02_Labor_Ref.summaries`).
2. M01 저장(별칭 한 칸도) — 15 MB 파일 다시 씀 · 폴더 전체(26 MB) 두 번 읽음 · 전체 검사 두 번(모든 층 일위대가 · 사전조합 파일을 두 번 다 파싱) · 그 뒤 기억 다시 지음(`M01_MasterData_Store.save` · `Store_Cache.check_saved`).
3. SK 저장 — M01 줄 전체 훑기(사본 모으기)를 저장 한 번에 두 번 이상 · SK 파일을 디스크에서 여러 번 다시 읽음 · 셈 반복 · 2 MB 를 들여쓰기 + fsync 로 씀(`clean_doc` → `settle` → `stamp` · `grow` → `prices.collect`).
4. 사본 중복 — 위 1 ~ 3 의 읽기 · 쓰기 비용을 모두 키움.
5. M01 표 읽기(`rows` · `tables` · `groups`) — 기억을 안 쓰고 요청마다 파일 파싱(지금은 0.2 초라 급하지 않음).
## 4. 판단
- 「층마다 한 파일」 이 아님 — M02 는 항목마다 파일이고 · 문제는 그 한 건이 사본으로 부풀어 있는 것 + 목록 · 저장이 큰 파일을 되풀이 읽고 쓰는 것.
- 저장 꼴을 통째로 바꾸기(DB 이전)보다 아래 차례가 효과 대비 위험이 작음.
| 차례 | 안 | 기대 | 위험 |
|---|---|---|---|
| A | 층마다 목록 요약 색인(이름 · 판 · 기준 금액 · 쓰는 곳 수 — 저장 때 갱신 · 어긋나면 다시 지음) | 층 목록 3.3 초 → 0.1 ~ 0.3 초 | 작음 |
| B | 저장 길 줄이기 — M01 저장: 폴더 두 번 읽기 · 전체 검사 두 번을 바뀐 것만 · SK 저장: 모으기 · 다시 읽기 · 셈 한 번씩 | 저장 · 불러오기(항목 수 × 저장) 시간 | 중간 |
| C | 사본 줄이기 — ① `사본` · `수식` 한 번만 ② 실제로 읽은 줄만 ③ 같은 지문 묶음은 한 번만 저장하고 SK 는 지문만 가리킴 | SK 2.2 MB → 수십 KB · 층 100 MB → 수 MB · 열기 · 저장 · 복사 · 시놀로지 동기화 모두 가벼워짐 | 중간(기존 파일 옮기기 · 안 쓰는 묶음 치우기 · 프로젝트 복사본) |
| D | 목록 · 색인 · 잠금을 DB 로 | 여러 서버 · 동시 저장 안전 | 큼 · 지금 속도 문제엔 필요 없음 → 보류 |
- 「만들 때 복사 · 그 뒤 연결 끊김」 원칙은 A ~ C 어느 것에서도 그대로(C ③ 의 묶음은 지문으로 굳은 사본).