feat: geny-memory-adaptor 1.8.0~1.11.0 이식 - #1
Merged
Conversation
XGEN 은 Geny 에서 갈라져 독자적으로 가는 프로젝트이지만, **같은 뿌리에서 온 결함은 여기에도 그대로 있다.** 갈라진 이후의 차이를 전수 대조한 결과 로직 분기는 하나도 없었고 전부 포매팅이었다 — 그래서 로직을 통째로 맞추고 이 저장소의 포매터를 다시 돌렸다. 검증 방법(테스트 6종)도 함께 가져왔다. **1.8.0 — 읽기/쓰기 락 + 검색 타임아웃 (가용성)** 뮤텍스 하나가 전부를 지켜 모든 검색이 모든 색인 뒤에 줄을 섰다(유휴 15.9ms vs 색인 중 63.6ms). 읽기는 함께, 쓰기만 배타로. FAIR 여야 한다 — 쓰기 우선으로 만들면 연속 색인 부하에서 검색이 영영 차례를 못 받는다. 그리고 `search(timeout=20s)` + `MemoryBusy`: **웨지된 쓰기를 실제로 푸는 것은 락 분리가 아니라 이 타임아웃이다.** 돌아오지 않는 배타 쓰기 앞에서는 기다림을 멈추는 것 말고 방법이 없다. 락이 재진입 불가로 바뀌면서 자기 교착에 빠지던 두 경로(feedback/learn → trust_feedback, contradictions → get_text)도 함께 분리돼 들어온다. **1.9.0~1.9.3 — 영어 형태소, 색인 −64% (넷이 한 세트)** 라틴 쪽에는 형태소 처리가 없어 문자 3-gram 이 그 자리를 메웠고, 실측 볼트에서 전체 포스팅의 72.8% 를 차지하면서 그 59.6% 가 IDF ~0 인 보일러플레이트였다. Porter 어간기 + 3-gram 을 임베딩 스트림으로: 포스팅 −64%, 영어 재굴절 MRR +24%, 한국어 불변. 1.9.1~1.9.3 을 빼면 **재색인이 한 건도 일어나지 않는다.** Geny 가 그렇게 했다가 "모든 신호는 정상, 실제로는 반쪽 변환" 상태에 갇혔다. 기하를 params 에 기록하고 (1.9.1), 기록 없는 것도 낡은 것으로 치고(1.9.2), 지문에 _GEOMETRY_VERSION 을 넣어야(1.9.3) 비로소 동작한다. **1.10.0 — 카탈로그** 브라우저의 "얼마나 · 어떤 날 · 그 날 무엇" 세 질문에 볼트 전체를 실체화해 답했다(개수 하나에 3.2s, 본문 4.8MB). catalog_counts/catalog_page/neighbourhood. **1.11.0 — 임베더 테이블 프로세스 공유** 빈 볼트에 엔진 하나를 열어도 RSS 68MB. 테이블이 vocab×dim×4B = 64MB 인데 세션마다 복사본을 들었다(살아 있는 볼트 6개가 서로 다른 테이블은 2개뿐). 내용 키 공유 + setflags(write=False). 실측 330.4MB → 137.2MB. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
왜
XGEN 은 Geny 에서 갈라져 독자적으로 가는 프로젝트이지만, 같은 뿌리에서 온 결함은 여기에도 그대로 있다. 이 저장소는 1.7.0 에 멈춰 있었고 그 사이 Geny 가 네 번 고쳤다.
갈라진 이후의 차이를 파일 단위로 전수 대조했다 — 로직 분기는 하나도 없었고 전부 포매팅이었다. 그래서 로직을 통째로 맞추고 이 저장소의 포매터를 다시 돌렸다. 검증 방법(테스트 6종)도 함께 가져왔다.
무엇
search(timeout=20s)특히 봐야 할 것
1.8.0 은 성능이 아니라 가용성이다.
search(timeout=)이 없으면 돌아오지 않는 배타 쓰기 앞에서 읽기가 영원히 막힌다 — 이 저장소를 쓰는 호스트가 이미 겪은 웨지와 같은 형태다.1.9.x 는 넷이 한 세트다. 1.9.0 만 넣으면 재색인이 한 건도 일어나지 않고 "모든 신호는 정상, 실제로는 반쪽 변환" 상태에 갇힌다. Geny 가 그렇게 사흘을 보냈다.
배포 시 주의
배포 직후 전 볼트 1회 재색인이 돈다 (
_GEOMETRY_VERSION이 2 로 오른다). 호스트 쪽에서 배경 재색인에 호흡을 주는 것을 함께 검토해야 한다.검증
pytest200 passed (신규 6 파일 포함)ruff check+ruff format --check클린🤖 Generated with Claude Code