<?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: Gerardo Recinto</title>
    <description>The latest articles on DEV Community by Gerardo Recinto (@grecinto).</description>
    <link>https://dev.to/grecinto</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F174619%2Fb4dca195-ade0-41db-869e-ec4793ea42fd.jpeg</url>
      <title>DEV Community: Gerardo Recinto</title>
      <link>https://dev.to/grecinto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grecinto"/>
    <language>en</language>
    <item>
      <title>I built a Transactional NoSQL Database in Go (and now it has AI Agents!)</title>
      <dc:creator>Gerardo Recinto</dc:creator>
      <pubDate>Fri, 05 Dec 2025 19:14:06 +0000</pubDate>
      <link>https://dev.to/grecinto/i-built-a-transactional-nosql-database-in-go-and-now-it-has-ai-agents-870</link>
      <guid>https://dev.to/grecinto/i-built-a-transactional-nosql-database-in-go-and-now-it-has-ai-agents-870</guid>
      <description>&lt;p&gt;I am thrilled to announce the General Public Availability (GPA) of &lt;strong&gt;Scalable Objects Persistence (SOP) V2&lt;/strong&gt;, a native Golang code library that embeds a high-performance, ACID-compliant storage engine directly into your application.&lt;/p&gt;

&lt;p&gt;SOP is not just another wrapper around an existing database. It is a &lt;strong&gt;raw storage engine&lt;/strong&gt; built from the ground up, bringing the power of B-Tree indexing, transaction management, and distributed coordination directly to your fingertips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built SOP: The "Database-as-a-Library" Paradigm
&lt;/h2&gt;

&lt;p&gt;In traditional architectures, the database is a monolithic external service. Your application talks to it over the wire, dealing with latency, serialization overhead, and "impedance mismatch."&lt;/p&gt;

&lt;p&gt;SOP changes the game by turning your application cluster &lt;em&gt;into&lt;/em&gt; the database cluster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;No External Dependencies (Standalone Mode)&lt;/strong&gt;: Build powerful desktop apps, CLI tools, or local AI models that store data in robust B-Trees on the local filesystem. No Docker containers or DB processes required.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cluster Native&lt;/strong&gt;: In distributed mode, SOP uses Redis for lightweight coordination (locking) and the filesystem for storage. This turns your microservices into a masterless, horizontally scalable storage cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Raw Performance &amp;amp; Control
&lt;/h3&gt;

&lt;p&gt;SOP gives you direct access to the storage muscle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;B-Tree Indexing&lt;/strong&gt;: A custom, modernized B-Tree implementation optimized for high node utilization (62%-75%+).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Direct I/O&lt;/strong&gt;: Bypasses layers of abstraction to talk directly to the disk.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;"NoCheck" Mode&lt;/strong&gt;: For build-once-read-many scenarios, skip conflict checks entirely for raw, unbridled read speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Full ACID Transactions
&lt;/h3&gt;

&lt;p&gt;Don't compromise on data integrity. SOP provides full &lt;strong&gt;ACID&lt;/strong&gt; (Atomicity, Consistency, Isolation, Durability) support with &lt;strong&gt;Two-Phase Commit (2PC)&lt;/strong&gt;. You can seamlessly integrate SOP transactions with other data sources in your ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. AI &amp;amp; Vector Search Ready 🤖
&lt;/h3&gt;

&lt;p&gt;SOP V2 is uniquely positioned for the AI era.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Partitioned Vector Search&lt;/strong&gt;: Store high-dimensional vectors directly in B-Trees. By partitioning data (e.g., by UserID or DocumentID), SOP outperforms specialized vector stores for hybrid search workloads.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Streaming Data&lt;/strong&gt;: Handle multi-gigabyte objects (video, large models) with the &lt;code&gt;StreamingDataStore&lt;/code&gt;, supporting chunked uploads, downloads, and partial updates within ACID transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Show Me The Code!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Go Example: Storing Users
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"github.com/sharedcode/sop/database"&lt;/span&gt;

&lt;span class="c"&gt;// 1. Initialize (Standalone or Clustered)&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Standalone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/var/lib/sop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;// 2. Start a Transaction&lt;/span&gt;
&lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BeginTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ForWriting&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;// 3. Open a Store&lt;/span&gt;
&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewBtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;// 4. Add Data&lt;/span&gt;
&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"user1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"John Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"john@example.com"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c"&gt;// 5. Commit&lt;/span&gt;
&lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Commit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Python Example: AI Vector Search
&lt;/h3&gt;

&lt;p&gt;We recently released &lt;strong&gt;sop4py&lt;/strong&gt;, allowing you to use SOP's power in Python for AI workflows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sop.ai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DBType&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Initialize
&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;storage_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data/my_db&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;db_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DBType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Standalone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;begin_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 2. Open Vector Store
&lt;/span&gt;    &lt;span class="n"&gt;vs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open_vector_store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;products&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Search for similar items
&lt;/span&gt;    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query_vector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Found: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (Score: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The "Moat": Swarm Computing &amp;amp; Auto-Merge
&lt;/h2&gt;

&lt;p&gt;SOP introduces a capability unmatched by traditional RDBMS: &lt;strong&gt;Automatic Transaction Commit Merging&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a distributed cluster, multiple machines can commit transactions concurrently. SOP automatically detects non-conflicting changes and merges them into a single cohesive state. This makes parallel programming trivial—transactions are natively thread-safe and machine-safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved!
&lt;/h2&gt;

&lt;p&gt;SOP is open source and we are just getting started.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;GitHub Repo&lt;/strong&gt;: &lt;a href="https://github.com/SharedCode/sop" rel="noopener noreferrer"&gt;github.com/SharedCode/sop&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Python Package&lt;/strong&gt;: &lt;code&gt;pip install sop4py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Discussions&lt;/strong&gt;: Join us on GitHub Discussions!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear your thoughts on this architecture. Does "Database-as-a-Library" fit your use case? Let me know in the comments! 👇&lt;/p&gt;

</description>
      <category>go</category>
      <category>database</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>parallels</title>
      <dc:creator>Gerardo Recinto</dc:creator>
      <pubDate>Sun, 02 Jun 2019 01:32:31 +0000</pubDate>
      <link>https://dev.to/grecinto/parallels-27k6</link>
      <guid>https://dev.to/grecinto/parallels-27k6</guid>
      <description>&lt;p&gt;Help wanted!&lt;br&gt;
I'm developing a library for abstraction of software system's interactions &amp;amp; task distribution, coordination for parallel execution.&lt;/p&gt;

&lt;p&gt;Tech stack: golang, cassandra, redis to begin with&lt;/p&gt;

&lt;p&gt;Learn more here: &lt;a href="https://github.com/SharedCode/parallels"&gt;https://github.com/SharedCode/parallels&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this interests you, please feel free to provide feedback and perhaps, join! the project. :)&lt;/p&gt;

&lt;p&gt;It is in the first few days of incubation, thus, there is not head way that had been done yet. So, it is a good time to join and collaborate.&lt;/p&gt;

&lt;p&gt;Thank you, sincerely,&lt;br&gt;
-Gerard&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
