Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/knut

.nornir/assets/graphar-chunks.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 860 430" font-family="-apple-system,Segoe UI,Roboto,sans-serif" font-size="15">
  <defs>
    <marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
      <path d="M0,0 L7,3 L0,6 Z" fill="#555"/>
    </marker>
  </defs>
  <text x="40" y="28" font-weight="700" font-size="16">GraphAr gar/v1 — the chunked-file substrate</text>

  <!-- Builders -->
  <rect x="30" y="60" width="180" height="72" rx="8" fill="#fdf2ec" stroke="#c26a2b" stroke-width="1.5"/>
  <text x="120" y="88" text-anchor="middle" font-weight="600">Builders</text>
  <text x="120" y="107" text-anchor="middle" fill="#555" font-size="12">VerticesBuilder · EdgesBuilder</text>
  <text x="120" y="123" text-anchor="middle" fill="#555" font-size="12">add_vertex/edge → dump()</text>

  <!-- Readers -->
  <rect x="30" y="270" width="180" height="72" rx="8" fill="#fdf2ec" stroke="#c26a2b" stroke-width="1.5"/>
  <text x="120" y="298" text-anchor="middle" font-weight="600">Readers</text>
  <text x="120" y="317" text-anchor="middle" fill="#555" font-size="12">VertexReader · EdgeReader</text>
  <text x="120" y="333" text-anchor="middle" fill="#555" font-size="12">read_merged · read_adj_list</text>

  <!-- Arrow batches -->
  <rect x="290" y="165" width="170" height="72" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="375" y="193" text-anchor="middle" font-weight="600">Arrow RecordBatches</text>
  <text x="375" y="212" text-anchor="middle" fill="#555" font-size="12">columnar · _gar_id identity</text>
  <text x="375" y="228" text-anchor="middle" fill="#555" font-size="12">one arrow 58 tree</text>

  <!-- io -->
  <rect x="530" y="165" width="150" height="72" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
  <text x="605" y="190" text-anchor="middle" font-weight="600">io::write_chunk</text>
  <text x="605" y="209" text-anchor="middle" font-weight="600">io::read_chunk</text>
  <text x="605" y="227" text-anchor="middle" fill="#555" font-size="12">codec per FileType</text>

  <!-- chunk files -->
  <rect x="720" y="150" width="120" height="102" rx="8" fill="#f6eefb" stroke="#7a3fb3" stroke-width="1.5"/>
  <text x="780" y="175" text-anchor="middle" font-weight="600" font-size="13">chunk files</text>
  <text x="780" y="196" text-anchor="middle" fill="#555" font-size="12">parquet · csv</text>
  <text x="780" y="213" text-anchor="middle" fill="#555" font-size="12">orc · json</text>
  <text x="780" y="230" text-anchor="middle" fill="#555" font-size="12">arrow-ipc</text>
  <text x="780" y="247" text-anchor="middle" fill="#7a3fb3" font-size="11">chunk0..chunkN</text>

  <!-- metadata -->
  <rect x="500" y="60" width="230" height="60" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="615" y="85" text-anchor="middle" font-weight="600">info-files (metadata/)</text>
  <text x="615" y="104" text-anchor="middle" fill="#555" font-size="12">*.graph/vertex/edge.yml · PropertyGroup</text>

  <!-- ChunkStore -->
  <rect x="290" y="330" width="550" height="66" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
  <text x="565" y="357" text-anchor="middle" font-weight="600">ChunkStore over object_store</text>
  <text x="565" y="378" text-anchor="middle" fill="#555" font-size="12">local · S3 · GCS · Azure · S3-compatible  ·  RetryOptions + MultipartOptions</text>

  <!-- arrows -->
  <path d="M210,96 C250,110 260,150 290,180" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="228" y="140" fill="#c26a2b" font-size="11">emit batches</text>
  <path d="M290,222 C260,255 250,290 210,305" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="222" y="288" fill="#c26a2b" font-size="11">stream chunks</text>

  <path d="M460,201 L530,201" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M680,201 L720,201" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="622" y="145" fill="#2f8f4e" font-size="11">encode/decode</text>

  <path d="M615,120 L610,165" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="622" y="145" fill="#2b5fb3" font-size="11">describes</text>

  <path d="M605,237 C605,275 600,300 590,330" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="612" y="300" fill="#2f8f4e" font-size="11">bytes ↔ backend</text>
</svg>