組み込みDB比較:SQLite vs DuckDB vs LibSQL でエッジ・組み込みDBを選ぶ
オープンソースラボ編集部 ・ 2026年6月14日
組み込みDB比較:SQLite vs DuckDB vs LibSQL でエッジ・組み込みDBを選ぶ
🦆 アプリケーションに埋め込んで使う軽量DBは、エッジコンピューティングやサーバーレスの時代に再注目されています。SQLite・DuckDB・LibSQLを徹底比較します。
組み込みDBとは
サーバーを別途立てずにアプリケーションプロセス内で動作するデータベース。ファイル1つで完結するシンプルさと、デプロイの容易さが特徴です。
主要ツール比較表
| 項目 | SQLite | DuckDB | LibSQL |
|---|---|---|---|
| ライセンス | Public Domain | MIT | MIT |
| 主なユースケース | OLTP・汎用 | 分析(OLAP) | SQLite互換・分散 |
| ファイル形式 | .db | .duckdb | .db(SQLite互換) |
| 同時書き込み | 非対応 | 非対応 | 対応(レプリカ) |
| インメモリモード | ○ | ◎ | ○ |
| カラムナストレージ | × | ◎ | × |
| ベクトル検索 | × | △ | ○(拡張) |
| サーバーモード | × | ○ | ◎ |
各ツールの特徴
SQLite
世界で最も広く使われているデータベース。スマートフォンのほぼ全てで使われており、実績と安定性は抜群です。
主な特徴:
- ファイル1つで完結、インストール不要
- C言語ライブラリとして埋め込み可能
- ACIDトランザクション完全対応
- WALモードで読み込み並列処理が可能
import sqlite3
conn = sqlite3.connect('app.db')
conn.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, name TEXT, email TEXT)''')
conn.execute("INSERT INTO users (name, email) VALUES (?, ?)",
("Alice", "alice@example.com"))
conn.commit()
conn.close()
向いているケース: 汎用アプリ・モバイル・設定ファイル代替
DuckDB
分析クエリに特化した組み込みDB。PandasやParquetとのシームレスな統合が魅力で、データエンジニアに急速に普及しています。
主な特徴:
- カラムナストレージによる高速集計
- ParquetファイルをSQLで直接クエリ
- PythonのPandas DataFrameとのネイティブ連携
- Arrow形式のゼロコピー転送
import duckdb
# Parquetファイルを直接SQLで集計
result = duckdb.sql('''
SELECT category, SUM(amount) as total
FROM 'sales.parquet'
WHERE year = 2024
GROUP BY category
ORDER BY total DESC
''').fetchdf()
print(result)
向いているケース: データ分析・BI・ETL処理
LibSQL
Turso社がSQLiteをフォークして開発。SQLite互換を保ちながら、マルチリージョンレプリケーションとHTTPS APIを追加しています。
主な特徴:
- SQLite完全互換(既存コードそのまま動作)
- エッジへのレプリケーション(Turso managed)
- HTTP/HTTPSでのリモートアクセス
- ベクトル拡張(vector similarity search)
# Turso CLIでDB作成
turso db create myapp
turso db show myapp
# → libsql://myapp-youta.turso.io
# セルフホストも可能
sqld --db-path /data/myapp.db --http-listen-addr 0.0.0.0:8080
向いているケース: エッジ・サーバーレス・グローバル分散アプリ
ユースケース別比較
| ユースケース | 推奨 |
|---|---|
| モバイルアプリのローカルDB | SQLite |
| Webアプリのセッション・設定 | SQLite |
| 分析クエリ・集計処理 | DuckDB |
| CSVやParquetの探索 | DuckDB |
| エッジ/サーバーレス | LibSQL |
| グローバル分散アプリ | LibSQL |
パフォーマンス比較(目安)
単純なINSERT/SELECT(OLTP)はSQLite・LibSQLが優位。GROUP BYやJOINを含む集計(OLAP)はDuckDBが圧倒的に高速です。
内部リンク
外部リソース
FAQ
Q. SQLiteとDuckDBはどう使い分ければいいですか?
書き込みが多いOLTPワークロードはSQLite、集計・分析が多いOLAPワークロードはDuckDBという使い分けが基本です。
Q. LibSQLはSQLiteと完全互換ですか?
ほぼ完全互換です。既存のSQLiteドライバの多くをそのまま使えます。ただし、一部の拡張機能や新機能は差異があります。
Q. DuckDBをAPIサーバーとして使えますか?
DuckDB自身はサーバーモードを持ちますが、本番用途はまだ限定的です。APIサーバーとしての利用は現時点では慎重に評価してください。
Q. これらのDBをVercelやCloudflare Workersで使えますか?
LibSQL(Turso)はエッジ環境向けに設計されており最も相性が良いです。SQLiteもNode.js環境なら使えますが、Workerのような制約環境では難しい場合があります。