<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sqlite on Digital Archive Systems Tech Blog</title><link>https://tech.ldas.jp/en/tags/sqlite/</link><description>Recent content in Sqlite on Digital Archive Systems Tech Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 06 Apr 2026 22:00:00 +0900</lastBuildDate><atom:link href="https://tech.ldas.jp/en/tags/sqlite/index.xml" rel="self" type="application/rss+xml"/><item><title>Elasticsearch → Static JSON / D1 Migration — You Don't Need a Search Engine for Small Datasets</title><link>https://tech.ldas.jp/en/posts/elasticsearch-to-static-json-and-d1/</link><pubDate>Mon, 06 Apr 2026 22:00:00 +0900</pubDate><guid>https://tech.ldas.jp/en/posts/elasticsearch-to-static-json-and-d1/</guid><description>&lt;p>I implemented three search backends — Elasticsearch, Cloudflare D1 (SQLite), and Static JSON (in-memory) — for a Japanese text search API running on Cloudflare Pages, and compared their performance.&lt;/p>
&lt;h2 id="background">Background&lt;/h2>
&lt;p>I&amp;rsquo;ve been running a full-text search API for classical Japanese texts. The existing setup used an external Elasticsearch cluster, but I wanted to explore alternatives for several reasons:&lt;/p>
&lt;ul>
&lt;li>Reduce external service dependencies&lt;/li>
&lt;li>Keep everything within Cloudflare Pages&lt;/li>
&lt;li>The dataset is small (~1,800 records) — a full-text search engine might be overkill&lt;/li>
&lt;/ul>
&lt;h2 id="dataset">Dataset&lt;/h2>
&lt;div class="table-wrapper">
 &lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Value&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Records&lt;/td>
 &lt;td>1,812&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Total text (UTF-8)&lt;/td>
 &lt;td>~2.5 MB&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Average per record&lt;/td>
 &lt;td>~1.4 KB&lt;/td>
 &lt;/tr>
 &lt;/tbody>
 &lt;/table>
&lt;/div>
&lt;p>Each record contains classical Japanese text (a few to ~15 lines), a page number, volume name, and IIIF canvas URL.&lt;/p></description></item></channel></rss>