<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Brenner Cruvinel - arquitetura</title>
    <subtitle>AI researcher and product designer building at the edge of computer science and mental health.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://brennercruvinel.blog/tags/arquitetura/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://brennercruvinel.blog"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-01-15T00:00:00+00:00</updated>
    <id>https://brennercruvinel.blog/tags/arquitetura/atom.xml</id>
    <entry xml:lang="en">
        <title>Nest: Um Vector DB Soberano, Content-Addressable e Offline-First</title>
        <published>2026-01-15T00:00:00+00:00</published>
        <updated>2026-01-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/blog/nest-vector-db-soberano/"/>
        <id>https://brennercruvinel.blog/blog/nest-vector-db-soberano/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/blog/nest-vector-db-soberano/">&lt;p&gt;compatilhando aqui o concept de uma aplicação que estou trabalhando, cansado de ter que ficar fazendo gambiarra com vector db sem estabilidade:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nest&quot;&gt;nest&lt;&#x2F;h2&gt;
&lt;p&gt;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 &lt;code&gt;nest:&#x2F;&#x2F;content_hash&#x2F;chunk_id&lt;&#x2F;code&gt;: voce cita pelo conteudo, nao pela localizacao. se o conteudo muda o hash muda, e e impossivel receber coisa diferente da que voce pediu.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;as-notas&quot;&gt;as notas&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;[[hash-content-addressing]], a familia mais proxima do nest. content-addressable storage (IPFS), como o &lt;code&gt;nest:&#x2F;&#x2F;content_hash&#x2F;chunk_id&lt;&#x2F;code&gt; funciona, e Git como o exemplo mais cotidiano de snapshot imutavel e verificavel. inclui como o nest difere de Git e de IPFS.&lt;&#x2F;li&gt;
&lt;li&gt;[[delta-binario-snapshots]], a opcao mais tecnica de distribuir versoes via diff binario (&lt;code&gt;bsdiff&lt;&#x2F;code&gt;, &lt;code&gt;zstd --patch-from&lt;&#x2F;code&gt;, &lt;code&gt;xdelta&lt;&#x2F;code&gt;). a ideia do patch, e o senao: build deterministico que reordena por dentro pode estourar o diff. mais fragil que o sharding.&lt;&#x2F;li&gt;
&lt;li&gt;[[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.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;hash-como-identidade-content-addressing&quot;&gt;hash como identidade, content-addressing&lt;&#x2F;h2&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;content-addressable-storage-ipfs-e-o-proprio-nest&quot;&gt;content-addressable storage (IPFS, e o proprio nest)&lt;&#x2F;h3&gt;
&lt;p&gt;aqui o endereco do dado &lt;strong&gt;e&lt;&#x2F;strong&gt; 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.&lt;&#x2F;p&gt;
&lt;p&gt;IPFS e a rede distribuida que faz isso em escala.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;como-o-nest-funciona&quot;&gt;como o nest:&#x2F;&#x2F; funciona&lt;&#x2F;h4&gt;
&lt;p&gt;o &lt;code&gt;nest:&#x2F;&#x2F;content_hash&#x2F;chunk_id&lt;&#x2F;code&gt; do nest e exatamente esse principio. voce cita pelo conteudo, nao pela localizacao.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content_hash&lt;&#x2F;code&gt; identifica o blob inteiro pelo hash do que ele contem&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;chunk_id&lt;&#x2F;code&gt; aponta o pedaco dentro daquele blob&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;git-o-exemplo-mais-cotidiano&quot;&gt;Git, o exemplo mais cotidiano&lt;&#x2F;h3&gt;
&lt;p&gt;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 &lt;code&gt;git commit&lt;&#x2F;code&gt;, esta tirando uma foto selada do codigo naquele instante. se alguem alterar a historia, os hashes nao batem e o Git acusa.&lt;&#x2F;p&gt;
&lt;p&gt;e o exemplo mais cotidiano de “snapshot imutavel e verificavel” que existe.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;como-o-nest-difere&quot;&gt;como o nest difere&lt;&#x2F;h3&gt;
&lt;p&gt;duas comparacoes que delimitam o nest dentro da familia.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;nest-x-git&quot;&gt;nest x Git&lt;&#x2F;h5&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;sela o que&lt;&#x2F;th&gt;&lt;th&gt;pra que serve&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Git&lt;&#x2F;td&gt;&lt;td&gt;codigo&lt;&#x2F;td&gt;&lt;td&gt;navegar versoes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;nest&lt;&#x2F;td&gt;&lt;td&gt;conhecimento vetorizado&lt;&#x2F;td&gt;&lt;td&gt;busca&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Git sela codigo e e feito pra voce navegar versoes. o nest sela conhecimento vetorizado pra busca. mesmo mecanismo de hash, finalidade diferente.&lt;&#x2F;p&gt;
&lt;h5 id=&quot;nest-x-ipfs&quot;&gt;nest x IPFS&lt;&#x2F;h5&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;por-que-isso-e-a-familia-mais-proxima&quot;&gt;por que isso e a familia mais proxima&lt;&#x2F;h3&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;delta-binario-por-cima-de-snapshots&quot;&gt;delta binario por cima de snapshots&lt;&#x2F;h2&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;a-ferramenta&quot;&gt;a ferramenta&lt;&#x2F;h3&gt;
&lt;p&gt;existem ferramentas de diff binario que calculam a &lt;em&gt;diferenca&lt;&#x2F;em&gt; entre o arquivo de ontem e o de hoje e produzem um “patch” pequeno:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bsdiff&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;zstd --patch-from&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;xdelta&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;a-ideia-do-patch&quot;&gt;a ideia do patch&lt;&#x2F;h3&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;o-senao-pro-nest&quot;&gt;o senao pro nest&lt;&#x2F;h3&gt;
&lt;p&gt;aqui esta a parte fragil. se o build deterministico reordena coisas internamente quando voce adiciona conteudo, e formatos comprimidos&#x2F;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.&lt;&#x2F;p&gt;
&lt;p&gt;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.&lt;&#x2F;p&gt;
&lt;p&gt;seguimos… quem pilhar, deixei aberto no git.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
