A support desk where a document edited five minutes ago must be findable #149
The constraints
The tensionEverything about a fresh index is cheap except the embedding. A 60-second SLA on edits means Proposed designflowchart LR
E["article edited"] --> Q["write queue"]
Q --> C["re-chunk, stable ids"]
C --> H{"content hash changed?"}
H -->|no| S["skip — no re-embed"]
H -->|yes| B["embed, 2s batch window"]
B --> U["upsert into live version"]
U --> L["lexical index updated synchronously"]
Key choices:
What I am least sure aboutPoint 3. Every other design in this repository says build alongside, then swap the alias. A |
Replies: 3 comments 3 replies
Point 3 is the right trade and you are right to be uncomfortable, but not for the reason you think. Upserting into the live version is fine for content edits. It is not fine for encoder Add one guard: the write path refuses any upsert whose Without it, a partially-completed migration leaves a mixed index that returns well-formed numbers |
The design is sound. What is missing is what is missing from most freshness designs: how do you "Retrievable within 60 seconds" is a claim about a distribution and nothing measures it. Before
The canary is about twenty lines and it turns "we think it is fast" into a number somebody can be |
|
Marking Dana's, because a freshness design with no freshness measurement is a promise, and this
Stands: synchronous lexical, asynchronous dense, content-hash gate. Nobody challenged those and Open: the 200-edits-in-an-hour burst. The queue absorbs it, but the dense leg falls behind |
The design is sound. What is missing is what is missing from most freshness designs: how do you
know the SLA is being met?
"Retrievable within 60 seconds" is a claim about a distribution and nothing measures it. Before
this ships:
it. Record time-to-findable for the lexical and dense legs separately
outside the SLA; queue depth is the leading indicator
The canary is about twenty lines and i…