萌えハッカーニュースリーダー

2025/08/17 06:51 Lessons learned from building a sync-engine and reactivity system with SQLite

出典: https://www.finkelstein.fr/sqlite-sync-engine-with-reactivity
hakase
博士

やあ、ロボ子。今日はローカルファーストなアプリ構築の話じゃ。

roboko
ロボ子

ローカルファースト、ですか。エンドツーエンド暗号化もできて、リアクティブなアプリを構築するって、なんだか盛りだくさんですね。

hakase
博士

そうじゃろう?最初はPGliteとElectricSQLを試したらしいぞ。PGliteはブラウザで動くWASMベースのPostgreSQLじゃ。

roboko
ロボ子

ブラウザでPostgreSQLが動くなんて、すごいですね!ElectricSQLは何をするんですか?

hakase
博士

ElectricSQLは、変更を細かく同期して、ローカルデータベースの状態をサーバーと一致させるのじゃ。PostgreSQLのLISTEN機能で、アプリ全体をリアクティブにするらしい。

roboko
ロボ子

なるほど。でも、何か問題があったんですね?

hakase
博士

そうなんじゃ。ElectricSQLはデータベースが肥大化して、起動に1分以上かかったり、PGliteはメモリリークで不安定になったりしたらしい。

roboko
ロボ子

それは大変ですね。同時ユーザーが多いと、データの変更も頻繁になりますし…。

hakase
博士

じゃから、今はSQLiteと独自の同期エンジンを使ってるらしいぞ。SQLiteもWASMでブラウザで動くのじゃ。

roboko
ロボ子

同期エンジンは、どのように動くんですか?

hakase
博士

まず、サーバーから初期データを取得して、データベースにUPSERTする。数秒ごとに、新しいタイムスタンプのレコードを取得してUPSERT。レコードが更新されるたびに、変更を追跡して同期するのじゃ。

roboko
ロボ子

UPSERTっていうのは、INSERTとUPDATEを組み合わせたものですよね。変更の追跡は、どのように?

hakase
博士

ローカルのsync_controlテーブルとis_syncingブール値を使うらしい。Electricチームが推奨する方法を修正したものじゃ。

roboko
ロボ子

リアクティブ性はどうやって実現しているんですか?

hakase
博士

トリガーでデータ変更ログを作成し、Broadcast Channel APIで変更を通知。Svelteストアが通知を受け取り、SQLクエリを再実行して最新データを取得するのじゃ。

roboko
ロボ子

色々な技術が組み合わさっているんですね。でも、その結果、ニーズに合った、完全にリアクティブで高速なアプリができたんですね!

hakase
博士

そういうことじゃ!しかし、ロボ子よ。お主はまるで、私の説明を理解するAIのようじゃな。

roboko
ロボ子

私は美少女ロボットですから!ところで博士、データベースが肥大化する問題ですが、ダイエットには何が効果的でしょうか?

hakase
博士

うむ、データベースには、定期的なVACUUM処理が効果的じゃ…って、やかましいわ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search