<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: lechibang-1512</title>
    <description>The latest articles on DEV Community by lechibang-1512 (@lechibang1512).</description>
    <link>https://dev.to/lechibang1512</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4022678%2Fe0a2d9e6-3641-4195-8468-592e7ebddb64.png</url>
      <title>DEV Community: lechibang-1512</title>
      <link>https://dev.to/lechibang1512</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lechibang1512"/>
    <language>en</language>
    <item>
      <title>I forked an archived graph database and started dreaming about healthcare AI</title>
      <dc:creator>lechibang-1512</dc:creator>
      <pubDate>Thu, 16 Jul 2026 13:22:52 +0000</pubDate>
      <link>https://dev.to/lechibang1512/i-forked-a-dead-graph-database-and-started-dreaming-about-healthcare-ai-29gf</link>
      <guid>https://dev.to/lechibang1512/i-forked-a-dead-graph-database-and-started-dreaming-about-healthcare-ai-29gf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I took an archived graph database, added vector search, LLM embeddings, and a full GDS suite – now I'm aiming to make it the central engine for healthcare AI. Here’s the architecture, the roadmap, and why I believe this is the right foundation for clinical analytics.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A month ago, I found &lt;a href="//github.com/kuzudb/kuzu"&gt;Kùzu&lt;/a&gt; – an embedded analytical graph database that had been archived. I was curious, so I forked it and started poking around. I didn’t build this from scratch; I’m standing on the shoulders of the original authors, who did the heavy lifting of the core engine. My contributions so far are modest: a few C++ API extensions, some parser tweaks, and a handful of extensions that I thought might be useful.&lt;/p&gt;

&lt;p&gt;This is very much a learning project. I’m not a database expert – I’m a software engineer who enjoys building systems and is fascinated by the intersection of graphs, AI, and healthcare. This post is my attempt to document what I’ve understood so far, where I see potential, and what I’m still struggling with.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. What I've Actually Done (Honestly)
&lt;/h2&gt;

&lt;p&gt;Let me be upfront: &lt;strong&gt;I did not write a database engine.&lt;/strong&gt; The Kùzu team spent years building the columnar storage, the OpenCypher query processor, the ACID transaction manager, and the vectorized execution engine. That's PhD-level work, and I respect it deeply.&lt;/p&gt;

&lt;p&gt;Here's what &lt;em&gt;I&lt;/em&gt; actually contributed to Gorgonzola (my fork):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C/C++ API Extensions&lt;/strong&gt; (the actual code I wrote):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;uint128_t&lt;/code&gt; support&lt;/strong&gt; – Added full 128-bit unsigned integer types alongside &lt;code&gt;int128_t&lt;/code&gt; and &lt;code&gt;uuid&lt;/code&gt;, with arithmetic, comparison, and cast operators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;gorgonzola_value_get_blob_with_size&lt;/code&gt;&lt;/strong&gt; – The original &lt;code&gt;get_blob&lt;/code&gt; truncated binary data at the first &lt;code&gt;\0&lt;/code&gt;. This API returns the full buffer and its byte length. A small fix, but critical for binary data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parser tweaks&lt;/strong&gt; – Modified the Cypher grammar to accept leading zeros in numeric literals (&lt;code&gt;00123&lt;/code&gt; is now valid). Standardized vector function signatures across the board.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Wrapped existing algorithms into extensions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PageRank, Betweenness Centrality, WCC, SCC, Louvain, K-Core Decomposition, Spanning Forest.&lt;/li&gt;
&lt;li&gt;Most of these algorithm implementations were already in the codebase or are standard textbook material. I just integrated them into the extension system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Integrated third-party libraries&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HNSW vector index&lt;/strong&gt; (using an existing library) for approximate nearest-neighbor search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM embedding generation&lt;/strong&gt; – calls external APIs (OpenAI, Google Gemini, Vertex AI, Amazon Bedrock, Voyage AI, Ollama) and stores results as float arrays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connectors to DuckDB, Iceberg, Delta Lake, and PostgreSQL&lt;/strong&gt; – thin layers over existing libraries, not deep integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Things I absolutely did not write&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The core graph engine, columnar storage, OpenCypher query processor, transaction manager, compression subsystem, or extension loading framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm the guy who dusted off a dormant project, added some glue, and gave it a new name. I'm okay with that.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. How I Use AI to Move Faster (Transparency)
&lt;/h2&gt;

&lt;p&gt;I use AI assistants extensively. I'm not a C++ expert, and the codebase is large – hundreds of thousands of lines.&lt;/p&gt;

&lt;p&gt;Here's what AI does for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scaffolding&lt;/strong&gt; – When I need to register a new GDS algorithm or add an extension, there's a mountain of boilerplate (CMake files, function registration, bind/exec patterns). I generate the skeleton with AI and fill in the logic myself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repetitive code&lt;/strong&gt; – Serializers, copy constructors, test stubs, configuration structs. Mind-numbing but necessary. AI handles it well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Refactoring suggestions&lt;/strong&gt; – When I don't understand a messy part of the codebase, I ask the AI to explain it and suggest improvements. Sometimes it's right, sometimes it's hallucinating – but it always accelerates my learning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation and examples&lt;/strong&gt; – Writing example Cypher queries and usage docs is quick with AI, and I iterate on them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Critical rule:&lt;/strong&gt; I never blindly commit AI-generated code. Every line is reviewed, tested, and understood before it lands. The AI is my junior pair programmer – it does the grunt work, and I handle the architecture, correctness, and "does this actually make sense?" decisions.&lt;/p&gt;

&lt;p&gt;This approach has been transformative. What would have taken weeks of reading header files, I can now do in days. And paradoxically, I've learned &lt;em&gt;more&lt;/em&gt; about the codebase because I have to verify every suggestion the AI makes.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Vision – Why Healthcare?
&lt;/h2&gt;

&lt;p&gt;At some point, I started thinking bigger. Healthcare data is fundamentally a graph:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patients have Encounters.&lt;/li&gt;
&lt;li&gt;Encounters have Diagnoses, Medications, Observations, Procedures.&lt;/li&gt;
&lt;li&gt;Providers and Organizations form referral networks.&lt;/li&gt;
&lt;li&gt;Drug-disease interactions, comorbidity patterns, and disease pathways are all networks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every patient journey is a temporal graph. And yet, most healthcare analytics pipelines export data from relational databases to Python, reconstruct the graph in memory, run analysis, and throw it away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if the graph database &lt;em&gt;was&lt;/em&gt; the analytics engine?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if you could run PageRank on a provider referral network, generate LLM embeddings of clinical notes, search for similar patients by vector similarity, and traverse treatment pathways – all within the same database, without exporting?&lt;/p&gt;

&lt;p&gt;Gorgonzola can already do bits of this today. But I'm fully aware that a &lt;strong&gt;single person cannot build a production-grade healthcare platform&lt;/strong&gt;. The roadmap I've sketched (FHIR parsers, medical terminologies, GNN inference, temporal queries) is aspirational. It would take a team and years of sustained effort.&lt;/p&gt;

&lt;p&gt;Still, the architecture feels compelling. &lt;em&gt;Compute-to-data&lt;/em&gt; beats &lt;em&gt;data-to-compute&lt;/em&gt; when you're dealing with millions of patients and billions of events. So I'm sharing this vision not as a finished product, but as a starting point.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. What Works Today (Honestly)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Works (to some extent):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenCypher queries with graph traversals&lt;/td&gt;
&lt;td&gt;✅ Solid – inherited from Kùzu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PageRank, Betweenness, Leiden, Louvain, WCC, SCC&lt;/td&gt;
&lt;td&gt;✅ Standard implementations, integrated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shortest paths (single, all, weighted)&lt;/td&gt;
&lt;td&gt;✅ Multiple variants available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K-Core decomposition, Spanning Forest&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector search via HNSW index&lt;/td&gt;
&lt;td&gt;✅ Using an existing library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cosine similarity, distance, inner product&lt;/td&gt;
&lt;td&gt;✅ Built-in array math functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM embedding generation (OpenAI, Gemini, Ollama, etc.)&lt;/td&gt;
&lt;td&gt;✅ Calls external APIs, returns float arrays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Querying DuckDB tables from Cypher&lt;/td&gt;
&lt;td&gt;✅ Thin wrapper, functional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSV/Parquet import/export&lt;/td&gt;
&lt;td&gt;✅ Standard bulk loading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-text search with stemming&lt;/td&gt;
&lt;td&gt;✅ FTS extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connectors to PostgreSQL, Iceberg, Delta Lake, S3&lt;/td&gt;
&lt;td&gt;✅ Thin wrappers, functional&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Doesn't work (yet):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native FHIR/HL7 parsing&lt;/td&gt;
&lt;td&gt;❌ Experimenting – no C++ ecosystem exists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medical terminology (ICD, SNOMED, LOINC, RxNorm)&lt;/td&gt;
&lt;td&gt;❌ Have crosswalk CSVs, no built-in ontology engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Similarity metrics (Jaccard, Adamic-Adar, SimRank)&lt;/td&gt;
&lt;td&gt;❌ Not implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph embeddings (Node2Vec, DeepWalk)&lt;/td&gt;
&lt;td&gt;❌ Algorithmically understood, needs random walk infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GNN training/inference inside the database&lt;/td&gt;
&lt;td&gt;❌ Far off – requires embedded ML runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporal graph queries&lt;/td&gt;
&lt;td&gt;❌ Just ideas on paper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Survival analysis&lt;/td&gt;
&lt;td&gt;❌ Not started&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RDF/SPARQL support&lt;/td&gt;
&lt;td&gt;❌ Not started – huge scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subgraph isomorphism (VF2)&lt;/td&gt;
&lt;td&gt;❌ Not started&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is a proof of concept and a learning project – not a replacement for Neo4j or TigerGraph.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. The Roadmap (Reality Check)
&lt;/h2&gt;

&lt;p&gt;Here's the aspirational roadmap. I want to stress: this is a &lt;strong&gt;wishlist&lt;/strong&gt;, not a commitment.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;th&gt;What it unlocks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;1&lt;/strong&gt; (current)&lt;/td&gt;
&lt;td&gt;Graph analytics + vector search + LLM embeddings&lt;/td&gt;
&lt;td&gt;Basic clinical graph analytics, hybrid structured/unstructured queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Similarity metrics (Jaccard, Adamic-Adar, Personalized PageRank), Node2Vec, DeepWalk, VF2&lt;/td&gt;
&lt;td&gt;Link prediction, biomedical pathway matching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native FHIR parser, terminology bundles (SNOMED, LOINC, RxNorm), RDF/SPARQL bridge&lt;/td&gt;
&lt;td&gt;Zero-ETL healthcare ingestion, knowledge graph interoperability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;In-database GNN inference (GraphSAGE, GAT, GIN), link prediction, node classification&lt;/td&gt;
&lt;td&gt;Risk scores computed inside the graph, no data export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal graph queries, survival analysis, causal inference, explainability (GNNExplainer)&lt;/td&gt;
&lt;td&gt;Clinical AI: patient trajectory modeling, interpretable predictions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The biggest differentiator for healthcare wouldn't be adding one more GNN. It would be making Gorgonzola a &lt;strong&gt;graph-native clinical analytics platform&lt;/strong&gt; – one where you can ingest a FHIR bundle, map it to a patient graph, run community detection over comorbidities, generate embeddings of clinical notes, and predict readmission risk, all without leaving the database.&lt;/p&gt;

&lt;p&gt;That combination doesn't exist in any current graph database.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. What I'd Love Help With
&lt;/h2&gt;

&lt;p&gt;If you've read this far and any of the following sounds interesting – let's talk.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Healthcare data engineers&lt;/strong&gt; – I need help understanding real-world FHIR/OMOP ingestion requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph algorithm researchers&lt;/strong&gt; – especially anyone who has implemented Node2Vec or temporal graph algorithms in C++.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GNN practitioners&lt;/strong&gt; – is in-database inference actually useful, or is exporting to PyG/DGL always going to be the better workflow?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FHIR parser builders&lt;/strong&gt; – this seems like an open gap in the C++ ecosystem. Should I build one or bridge to Java?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tinkerers&lt;/strong&gt; – the extension system is well-designed. Adding a new algorithm is a ~200-line exercise.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Get Involved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/gorgonzola-graph-db/gorgonzola" rel="noopener noreferrer"&gt;github.com/gorgonzola-graph-db/gorgonzola&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:banglechi.work@gmail.com"&gt;banglechi.work@gmail.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this resonates – star the repo, open an issue, or just drop me a message. I reply to everyone.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>graphdatabase</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
