"모으기는 폴더가 아냐. 목록이야 — 그리고 그 목록이 트릭 전부야."
manifest 가 지도야
흩어진 네 글이 전부 찾아지는 '한 곳' 은 디렉토리가 아냐 — 작고, git 으로 추적되는 manifest 야. 각 항목이 코퍼스를 선언해: id, 파일이 이미 사는 root, 어느 파일이 카운트되는지 정하는 glob, 쓸 chunking profile. 그게 다야. manifest 는 주소를 쥐지 내용을 쥐지 않아. 10년 치 '모인' 코퍼스 전체를 한 페이지에 인쇄될 파일 하나로 읽을 수 있어.
순회
등록은 가리키고, 수집은 순회해. 코퍼스의 선언된 root 와 glob 이 주어지면, 엔진은 매칭되는 모든 파일을 발견하고, 읽고, 바이트를 doc_sha256 으로 해시하고, 텍스트를 chunk 하고, 그 chunk 를 인덱스에 써. 문서 자체의 id 는 코퍼스와 경로에서 content-addressed 라, 같은 파일은 항상 같은 슬롯에 내려앉아. 아무것도 제자리 밖으로 복사 안 돼. 순회는 mover 가 아니라 reader 야.
Idempotent 재수집 — 이걸 살 만하게 만드는 저렴함
재수집은 계속 돌려도 안전해, idempotent 하니까. 엔진은 각 파일을 해시해서 지난번 색인한 것과 비교해. 안 바뀐 해시? 건너뛰어 — 문자 그대로 할 게 없어. 바뀐 해시? 그 문서의 전체 chunk 세트를 하나의 원자적 트랜잭션으로 교체해: 옛 chunk 전부 삭제, 새 chunk 전부 삽입, 반쯤-패치된 중간 상태는 절대 없이. 이래서 '코퍼스를 신선하게 유지' 가 거의 공짜야: 실제로 바뀐 것만 일을 해.
가용성은 그냥 필드야
기계마다 다른 파일을 쥐어 — 랩탑은 일부만, 어떤 워크스테이션은 전부. 그 현실엔 특별한 배관이 필요 없어. manifest 항목의 필드야. 등록기는 선언된 root 가 현재 기계에 없는 코퍼스를 그냥 건너뛰고 있는 걸 색인해. 전부 가진 기계가 canonical 인덱스가 되고, 나머지는 할 수 있는 걸 색인해. 지도는 네가 선 곳에서 영토가 어떻게 보이는지 알아.