DictSQLite v2.0.0
リリース日: 2025年10月9日
タイプ: メジャーリリース
コードネーム: v4.2(内部バージョン)
🎉 メジャーリリースの概要
DictSQLite v2.0.0は、Rust実装による完全な書き直しにより、v1.8.8から5~300倍のパフォーマンス向上を実現したメジャーアップデートです。
主要な改善
| 改善項目 | 効果 |
|---|
| 非同期書き込み | 最大300倍の高速化 |
| 同期WriteThrough書き込み | 最大43倍の高速化 |
| バッチ読み込み | 5-10倍の高速化 |
| メモリ管理 | LRUキャッシュによる効率的なメモリ使用 |
| 暗号化 | AES-256-GCM による強力なネイティブ暗号化 |
| 非同期処理 | True Python asyncio サポート |
🚀 新機能
1. Rust実装による高速化
完全なRust書き直し(PyO3バインディング)
-
非同期書き込み: 1000件の書き込み 30秒 → 0.1秒(300倍高速化)
- Mutexロック回数: 1000回 → 10回(100倍削減)
- SQLトランザクション数: 1000回 → 10回(100倍削減)
-
同期WriteThrough書き込み: 29.79K ops/sec → 1.30M ops/sec(43倍高速化)
- バッチ書き込みバッファの実装
- 個別SQL INSERT → バッチINSERT
-
バッチ読み込み: キャッシュミス時に5-10倍高速化
- SQLクエリ数: N回 → 1回
- 並列キャッシュアクセス
from dictsqlite import DictSQLite
# buffer_sizeで書き込みバッファを調整可能
db = DictSQLite('fast.db', buffer_size=200) # デフォルト: 100
# 大量書き込みが劇的に高速化
for i in range(10000):
db[f'key_{i}'] = f'value_{i}'
# v1.8.8: ~30秒 → v2.0.0: ~0.1秒
2. True Python Asyncio サポート
完全な async/await サポート
v1.8.8では非対応だった非同期処理が、v2.0.0で完全にサポートされました。
v1.8.8 (非対応):
# 同期処理のみ
db = DictSQLite('db.db')
db['key'] = 'value'
v2.0.0 (完全async対応):
import asyncio
from dictsqlite import AsyncDictSQLite
async def main():
async with AsyncDictSQLite("mydb.db") as db:
# 真の awaitable メソッド
await db.aset("key", "value")
value = await db.aget("key")
# 並列処理が可能
tasks = [db.aset(f"key_{i}", f"value_{i}") for i in range(100)]
await asyncio.gather(*tasks)
asyncio.run(main())
新しい awaitable メソッド:
async aget(key) - 非同期で値を取得
async aset(key, value) - 非同期で値を設定
async abatch_get(keys) - 非同期で複数値を取得
async abatch_set(items) - 非同期で複数値を設定
3. AES-256-GCM暗号化
v1.8.8のAES-CBCから大幅に強化
# パスワードベースの簡単な暗号化
db = DictSQLite('secure.db', encryption_password='my_password')
db['secret'] = 'sensitive data'
v2.0.0の暗号化機能:
- AES-256-GCM(認証付き暗号化)
- PBKDF2-HMAC-SHA256による鍵導出(100,000回反復)
- Rust実装による高速な暗号化/復号化
- 完全性検証の自動実行
4. Safe Pickle検証
セキュリティ強化
db = DictSQLite('data.db', enable_safe_pickle=True)
- ホワイトリストベースの検証
- 危険な関数・モジュールの明示的拒否
- Rustレベルでの事前検証
5. 複数の永続化モード
用途に応じた最適なモードを選択
# Memory: 最高速、永続化なし
db = DictSQLite('data.db', persist_mode='memory')
# Lazy: 高速、手動フラッシュで永続化
db = DictSQLite('data.db', persist_mode='lazy')
db['key'] = 'value'
db.flush() # 明示的に永続化
# WriteThrough: 即座に永続化(デフォルト)
db = DictSQLite('data.db', persist_mode='writethrough')
📊 パフォーマンス比較
v1.8.8 vs v2.0.0
| 操作 | v1.8.8 | v2.0.0 | 改善率 |
|---|
| 非同期書き込み 1000件 | 30秒 | 0.1秒 | 300倍 |
| 同期書き込み | 29.79K ops/s | 1.30M ops/s | 43倍 |
| バッチ読み込み | - | - | 5-10倍 |
| メモリ効率 | 標準 | LRU最適化 | 大幅改善 |
モード別性能
| モード | 書き込み | 読み込み | 用途 |
|---|
| Memory | 最速 | 最速 | キャッシュ、セッション |
| Lazy | 高速 | 高速 | 一般的な用途 |
| WriteThrough | 標準 | 高速 | 重要データ |
🔒 セキュリティ機能
v2.0.0で提供されるセキュリティ機能:
- ✅ AES-256-GCM暗号化(v1.8.8のAES-CBCから強化)
- ✅ PBKDF2鍵導出(100,000回反復)
- ✅ Safe Pickle検証
- ✅ SQLインジェクション対策(パラメータ化クエリ)
- ✅ 認証付き暗号化による完全性検証
🔧 破壊的変更
Python APIは完全互換
基本的なAPIは変更なし:
# v1.8.8
db = DictSQLite('data.db')
db['key'] = 'value'
print(db['key'])
# v2.0.0(同じコードで動作)
db = DictSQLite('data.db')
db['key'] = 'value'
print(db['key'])
新しいパラメータ
DictSQLite(
db_path,
persist_mode='writethrough', # 新規: memory/lazy/writethrough
buffer_size=100, # 新規: 書き込みバッファサイズ
encryption_password=None, # 強化: AES-256-GCM使用
enable_safe_pickle=False, # 新規: Safe Pickle検証
hot_tier_capacity=10000, # 新規: キャッシュ容量
)
🚀 使用方法
基本的な使用
from dictsqlite import DictSQLite
# 通常の使用
db = DictSQLite('data.db')
db['key'] = 'value'
print(db['key']) # 'value'
高速な非同期処理
import asyncio
from dictsqlite import AsyncDictSQLite
async def main():
async with AsyncDictSQLite('data.db') as db:
# 並列書き込み
tasks = [db.aset(f'key_{i}', f'value_{i}') for i in range(1000)]
await asyncio.gather(*tasks) # 超高速
# 並列読み込み
tasks = [db.aget(f'key_{i}') for i in range(1000)]
values = await asyncio.gather(*tasks)
asyncio.run(main())
暗号化の使用
# パスワードで暗号化
db = DictSQLite(
'secure.db',
encryption_password='my_secure_password'
)
db['secret'] = 'sensitive data'
# データは自動的に暗号化されて保存される
Lazyモードで最高性能
# 大量データの高速処理
db = DictSQLite('data.db', persist_mode='lazy')
# 高速書き込み
for i in range(100000):
db[f'key_{i}'] = f'value_{i}'
# 明示的に永続化
db.flush()
📖 移行ガイド
v1.8.8からの移行
ステップ1: インストール
pip install --upgrade dictsqlite
ステップ2: コードは基本的に変更不要
# v1.8.8のコードがそのまま動作
from dictsqlite import DictSQLite
db = DictSQLite('data.db')
db['key'] = 'value'
ステップ3: 新機能を活用(オプション)
# より高速なLazyモードを試す
db = DictSQLite('data.db', persist_mode='lazy')
# 非同期処理を活用
from dictsqlite import AsyncDictSQLite
# async/awaitで使用
データベースの互換性
v1.8.8で作成したデータベースファイルは、v2.0.0でそのまま読み込み可能です。
# v1.8.8で作成したデータベース
# v2.0.0で問題なく読み込める
db = DictSQLite('old_v1_database.db')
print(db['existing_key']) # 正常に動作
📝 システム要件
- Python 3.9以上
- Windows / Linux / macOS
🔮 今後の展望
v2.0.0は新しいアーキテクチャの基盤となるリリースです。今後のバージョンで以下を予定:
- さらなるパフォーマンス最適化
- より多くの永続化オプション
- 追加のセキュリティ機能
- Python 3.13完全対応
📚 関連リソース
🎯 推奨事項
v1.8.8をお使いの場合は、大幅なパフォーマンス向上のため v2.0.0 へのアップグレードを強く推奨します。
pip install --upgrade dictsqlite
🎉 DictSQLite v2.0.0は、パフォーマンスとセキュリティを大幅に向上させた次世代のキーバリューストアです。