データベースはキャッシュを完全に置き換えられるか?

2025-08-31

この記事では、データベースがキャッシュを完全に置き換える可能性を探っています。データベースは、バッファプールやリードレプリカなどのキャッシュ機能の一部を提供していますが、キャッシュは、特に特定のデータサブセットや事前に計算されたデータに関して、低遅延データアクセスにおいて優れています。キャッシュを置き換えるには、データベースは、多数のリードレプリカの効率的な処理、部分的なリードレプリカの有効化、特定データの優先順位付け、効率的な増分ビューメンテナンス(IVM)メカニズムの実装という、いくつかの課題に対処する必要があります。著者は、IVMと部分的なリードレプリカを組み合わせることで、最終的にはデータベースがキャッシュを部分的に置き換える可能性があると考えていますが、まだギャップが残っています。

続きを読む
(avi.im)

SQLiteのWALモード:耐久性とパフォーマンスのトレードオフ

2025-08-24

SQLiteのWAL(Write-Ahead Log)モードは、より高い書き込みスループットのために頻繁に使用されますが、デフォルトのジャーナルモードと比較してデータの耐久性が低下します。`synchronous`プラグマはfsyncが呼び出される頻度を制御し、デフォルトはNORMALです。NORMALモードでは、WALファイルは各チェックポイントの前に同期され、データベースファイルは各チェックポイントの後に同期されますが、ほとんどのトランザクションでは同期操作が行われません。耐久性が重要ではないアプリケーションでは、NORMALで十分です。停電時にも耐久性を保証するには、`synchronous=FULL`を使用すると、各トランザクションコミット後にWALファイルの同期が追加され、耐久性が向上しますが、書き込み速度が低下します。SurrealDBがベンチマークのパフォーマンスのために耐久性を犠牲にしているという懸念を受けて、この説明はSQLiteのアプローチを明確にします。

続きを読む
(avi.im)

SQLiteのWALモードにおけるチェックサム問題:サイレントデータロス

2025-07-25

この記事では、SQLiteのライトアヘッドロギング(WAL)モードにおけるチェックサムメカニズムの欠陥について考察しています。WALフレームでチェックサムの不一致が発生した場合、SQLiteはエラーフレームとその後のフレームをすべて黙って破棄します。これらのフレームが破損していない場合でも同様です。この設計は意図的なものですが、潜在的なデータ損失につながります。著者はその根本原因を分析し、SQLiteはデータ損失を防ぐため、破損を検出した際にエラーをスローすべきだと提案しています。また、組み込みシステムやモバイルデバイスにおけるSQLiteの使用状況についても議論しています。

続きを読む
(avi.im)
開発

SQLite:驚くべきデータベースの伝説

2024-12-30

世界で最も広く展開されているデータベースであるSQLiteは、3人体制のチームによって保守されており、外部からの貢献を拒否しながらも、その比類のない性能と安定性で世界を征服しています。サーバーのダウンタイム問題を解決するためにアメリカの軍艦で誕生したSQLiteは、今では数兆ものデータベースの基盤となっています。SQLiteはオープンソースではなく、オープンソースライセンスよりも制限の少ないパブリックドメインソフトウェアです。極端な状況、例えばオペレーティングシステムのクラッシュなどをシミュレートする厳格なテストプロセスにより、非常に高い信頼性が確保されています。しかし、有料サポートや会員制度を通じて収益を上げるという独自のビジネスモデルも注目に値します。SQLiteの伝説は、その技術力だけでなく、その裏にある粘り強さと革新性にもあります。

続きを読む
(avi.im)
開発 伝説

ブルームフィルター:SQLiteを10倍高速化した秘密

2024-12-22

研究者たちは、ブルームフィルターを巧みに使用することで、SQLiteの分析クエリを10倍高速化しました。SQLiteのネストされたループ結合が非効率で、Bツリープローブに多くの時間が費やされていることを発見しました。結合操作の前にブルームフィルターを使用して、一致しない可能性のある行をすばやくフィルタリングし、潜在的な一致についてのみBツリープローブを実行することで、プローブ回数を大幅に削減しました。ブルームフィルターはメモリオーバーヘッドが最小限で、SQLiteの既存のクエリエンジンへの統合も容易であり、パフォーマンスの大幅な向上をもたらしました。この改善は、SQLite v3.38.0に統合されています。

続きを読む
(avi.im)

RustによるSQLite書き換え:Limboプロジェクトが待ち時間100倍削減を実現

2024-12-16

ヘルシンキ大学とケンブリッジ大学の研究者らが、SQLiteをRustで書き換え、非同期I/Oとio_uringを活用したLimboプロジェクトを開発しました。このプロジェクトは、特にマルチテナントサーバーレス環境において、テールレイテンシを最大100倍削減することに成功しました。同期バイトコード命令を非同期命令に置き換えることで、ブロックを回避し、並行処理を向上させています。Limboの改善は、特に高パーセンタイルのレイテンシに顕著に見られ、高い信頼性が求められるアプリケーションに最適です。

続きを読む
(avi.im)
開発 非同期I/O