Nest: Um Vector DB Soberano, Content-Addressable e Offline-First
By Brenner Cruvinel • 5 minutes read
compatilhando aqui o concept de uma aplicação que estou trabalhando, cansado de ter que ficar fazendo gambiarra com vector db sem estabilidade:
nest
nest e um vector db soberano de arquivo unico. content-addressable, offline-first, hash-verified. python constroi o arquivo, rust serve o arquivo. o enderecamento e nest://content_hash/chunk_id: voce cita pelo conteudo, nao pela localizacao. se o conteudo muda o hash muda, e e impossivel receber coisa diferente da que voce pediu.
as notas
- [[hash-content-addressing]], a familia mais proxima do nest. content-addressable storage (IPFS), como o
nest://content_hash/chunk_idfunciona, e Git como o exemplo mais cotidiano de snapshot imutavel e verificavel. inclui como o nest difere de Git e de IPFS. - [[delta-binario-snapshots]], a opcao mais tecnica de distribuir versoes via diff binario (
bsdiff,zstd --patch-from,xdelta). a ideia do patch, e o senao: build deterministico que reordena por dentro pode estourar o diff. mais fragil que o sharding. - [[prova-imutabilidade-timestamp]], a camada criptografica alem do hash pelado. assinatura e certificados (PKI, TLS), timestamping (RFC 3161, OpenTimestamps), e blockchain, que pro caso de papers seria canhao pra matar mosquito.
hash como identidade, content-addressing
a familia mais proxima do nest. a ideia central e uma so: o hash do conteudo vira o endereco do conteudo. voce nao aponta pra um lugar, aponta pra uma coisa. se a coisa muda, o endereco muda. e dai cai tudo o que importa pro nest, imutabilidade, verificacao, citacao por conteudo.
content-addressable storage (IPFS, e o proprio nest)
aqui o endereco do dado e o hash dele. em vez de “me de o arquivo em tal pasta”, que pode ter sido trocado sem voce saber, voce diz “me de o arquivo cujo conteudo tem este hash”. e e impossivel receber coisa diferente: se viesse diferente, teria outro hash. a verificacao nao e um passo extra, ela e a propria forma de pedir.
IPFS e a rede distribuida que faz isso em escala.
como o nest:// funciona
o nest://content_hash/chunk_id do nest e exatamente esse principio. voce cita pelo conteudo, nao pela localizacao.
content_hashidentifica o blob inteiro pelo hash do que ele contemchunk_idaponta o pedaco dentro daquele blob
a consequencia pratica: uma citacao no nest nao quebra quando o arquivo muda de pasta, de disco, de maquina. ela so vale pra aquele conteudo. se o conteudo mudou, o hash mudou, e voce sabe na hora que esta falando de outra coisa.
Git, o exemplo mais cotidiano
voce usa todo dia e talvez nao tenha percebido que e exatamente isso. cada commit e identificado por um hash do conteudo. quando voce da git commit, esta tirando uma foto selada do codigo naquele instante. se alguem alterar a historia, os hashes nao batem e o Git acusa.
e o exemplo mais cotidiano de “snapshot imutavel e verificavel” que existe.
como o nest difere
duas comparacoes que delimitam o nest dentro da familia.
nest x Git
| sela o que | pra que serve | |
|---|---|---|
| Git | codigo | navegar versoes |
| nest | conhecimento vetorizado | busca |
Git sela codigo e e feito pra voce navegar versoes. o nest sela conhecimento vetorizado pra busca. mesmo mecanismo de hash, finalidade diferente.
nest x IPFS
mesmo principio de content-addressing, escala diferente. IPFS e a rede distribuida que faz isso em escala, muitas maquinas. o nest e o caso local de arquivo unico. um arquivo soberano, offline-first, com o mesmo “o endereco e o hash” por dentro.
por que isso e a familia mais proxima
das analogias que coletei, essa e a que descreve o nest sem metafora. Git e timestamping e blockchain todos usam hash de conteudo, mas pra outras finalidades. content-addressable storage usa hash de conteudo pela mesma razao que o nest: para que pedir o dado e verificar o dado sejam a mesma operacao.
delta binario por cima de snapshots
a opcao mais tecnica pra distribuir versoes do nest sem rebaixar o arquivo inteiro toda vez. funciona, mas tem um senao que so se descobre testando. mais fragil que o sharding.
a ferramenta
existem ferramentas de diff binario que calculam a diferenca entre o arquivo de ontem e o de hoje e produzem um “patch” pequeno:
bsdiffzstd --patch-fromxdelta
a ideia do patch
o cliente que ja tem a versao de ontem baixa so o patch e reconstroi a de hoje localmente. e como o teu sistema operacional atualiza sem rebaixar o SO inteiro. so o delta desce pela rede, a maquina monta o resto.
o senao pro nest
aqui esta a parte fragil. se o build deterministico reordena coisas internamente quando voce adiciona conteudo, e formatos comprimidos/indexados costumam reorganizar bastante, o diff pode sair grande mesmo pra pouca mudanca. voce muda um chunk, o formato remexe o indice inteiro, e o patch deixa de ser pequeno.
so vale se o formato for “append-friendly”, quer dizer, se adicionar conteudo no fim nao bagunca o que ja estava la. e isso voce so sabe testando.
seguimos… quem pilhar, deixei aberto no git.