DictSQLite v2.0.4
リリース日: 2025年10月9日
タイプ: ベータ版(Beta)
コードネーム: v4.2(内部バージョン)
🎉 メジャーリリースの概要
DictSQLite v2.0.4は、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.4 (完全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. 🎨 複数のストレージモード
用途に応じて最適なストレージ形式を選択可能
Pickleモード(デフォルト、v1.8.8互換)
db = DictSQLite("data.db") # storage_mode="pickle"がデフォルト
# v1.8.8と同じように任意のPythonオブジェクトを自動保存
db["user"] = {"name": "Alice", "age": 30}
db["scores"] = [95, 87, 92]
user = db["user"] # => dict型で取得(自動デシリアライズ)
JSONBモード(推奨★、10-20%高速)
db = DictSQLite("data.db", storage_mode="jsonb")
db["config"] = {
"theme": "dark",
"language": "ja",
"features": ["feature1", "feature2"]
}
# MessagePackによる高速バイナリJSON
# JSON互換の型をサポート(dict, list, str, int, float, bool, None)
JSONモード(人間が読める形式)
db = DictSQLite("data.db", storage_mode="json")
db["settings"] = {"theme": "dark"}
# SQLiteブラウザで直接確認可能なテキストJSON
Bytesモード(生バイト列)
db = DictSQLite("data.db", storage_mode="bytes")
db["binary_data"] = b"\x00\x01\x02\x03"
# 生のバイト列を直接保存
4. 🗂️ テーブルサポート(新機能)
1つのデータベースファイルで複数のテーブルを管理
db = DictSQLite("app.db", table_name="users")
# テーブルプロキシによる直感的なアクセス
users_table = db.table("users")
sessions_table = db.table("sessions")
users_table["alice"] = {"name": "Alice", "role": "admin"}
sessions_table["session_123"] = {"user": "alice", "expires": "2025-10-10"}
# デフォルトテーブルの指定も可能
db = DictSQLite("app.db", default_table="users")
特徴:
- 1つのデータベースで複数のテーブルを管理
- 非同期版でもサポート
- パフォーマンス影響: わずか1-2%
5. 🔒 強化されたセキュリティ機能
AES-256-GCM暗号化(ネイティブ実装)
db = DictSQLite(
'secure.db',
encryption_password='your_secure_password_123'
)
db["api_key"] = "sk-1234567890" # 自動暗号化
api_key = db["api_key"] # 自動復号化
Safe Pickle(安全なデシリアライゼーション)
db = DictSQLite(
'safe.db',
enable_safe_pickle=True,
safe_pickle_allowed_modules=['myapp', 'mylib']
)
# 信頼できるモジュールのみデシリアライズ可能
# 悪意のあるpickleデータから保護
暗号化 + Safe Pickle(最高セキュリティ)
db = DictSQLite(
'ultra_secure.db',
encryption_password='password',
enable_safe_pickle=True,
safe_pickle_allowed_modules=['myapp']
)
# ディスク上の暗号化とメモリ上の安全なデシリアライゼーション
6. ⚙️ LRUホットティアキャッシュ
頻繁にアクセスするデータのメモリキャッシュ
db = DictSQLite(
'app.db',
hot_capacity=1_000_000 # キャッシュサイズ(デフォルト: 100万エントリ)
)
# ホットデータは高速メモリアクセス
# コールドデータはSQLiteから自動読み込み
7. 🔧 柔軟な永続化モード
# メモリのみ(最速、永続化なし)
db_memory = DictSQLite(':memory:', persist_mode='memory')
# 遅延書き込み(高速、手動flush時に永続化)
db_lazy = DictSQLite('app.db', persist_mode='lazy')
db_lazy['key'] = 'value'
db_lazy.flush() # 手動フラッシュ
# WriteThrough(安全、バッファリング付き即座永続化)
db_wt = DictSQLite('app.db', persist_mode='writethrough')
# データ保証が必要な本番環境に推奨
🔄 v1.8.8からの変更点
アーキテクチャの刷新
v1.8.8 (Python実装)
Python (sqlite3) → SQLiteファイル
- ピュアPython実装
- 辞書ライクAPI
- 自動型変換(pickle/JSON)
- シングルスレッド最適化
v2.0.4 (Rust実装)
Python → Rust (PyO3) → SQLiteファイル
↓
LRUキャッシュ
バッファリング
暗号化層
- Rust実装による高速化
- 辞書ライクAPI維持
- 複数のストレージモード
- 非同期処理サポート
- ホットデータキャッシュ
API互換性
✅ 高いAPI互換性を維持:
# v1.8.8のコードがそのまま動作(基本機能)
from dictsqlite import DictSQLite as DictSQLite
db = DictSQLite('app.db')
db['key'] = 'value'
value = db['key']
⚠️ 主な変更点:
-
インポート先の変更:
# v1.8.8 from dictsqlite import DictSQLite # v2.0.4 from dictsqlite import DictSQLite
-
データ型の自動変換:
- 文字列 → 自動UTF-8エンコード(手動
.encode()
不要) - オブジェクト → 自動pickle化(手動
pickle.dumps()
不要) - 読み込み時も自動変換(Pickleモード時)
- 文字列 → 自動UTF-8エンコード(手動
-
暗号化パラメータ名の変更:
# v1.8.8 db = DictSQLite('db.db', password='pass') # v2.0.4 db = DictSQLite('db.db', encryption_password='pass')
-
テーブルアクセス方法の変更:
# v1.8.8 (version=2の場合) users = db['users'] # TableProxyを取得 # v2.0.4 users = db.table('users') # table()メソッドを使用 # 注: table_nameパラメータは引き続き利用可能で、デフォルトテーブルを指定 db = DictSQLite('db.db', table_name='users')
-
非推奨の機能:
json_mode
パラメータ →storage_mode='json'
または'jsonb'
新しいパラメータ
db = DictSQLite(
db_path='app.db',
hot_capacity=1_000_000, # 新: LRUキャッシュサイズ
enable_async=True, # 新: 非同期処理有効化
persist_mode='writethrough', # 新: 永続化モード
storage_mode='pickle', # 新: ストレージ形式
table_name='main', # 変更: デフォルトテーブル名(v1.8.8から用途変更)
encryption_password=None, # 変更: passwordから改名
enable_safe_pickle=False, # 新: Safe Pickle有効化
safe_pickle_allowed_modules=None, # 新: 許可モジュール
buffer_size=100, # 新: 書き込みバッファサイズ
encoding='utf-8' # 新: 文字列エンコーディング
)
📈 パフォーマンスベンチマーク
書き込み性能
操作 | v1.8.8 | v2.0.4 | 改善率 |
---|---|---|---|
非同期書き込み(1000件) | 30秒 | 0.1秒 | 300倍 |
同期WriteThrough(ops/sec) | 29.79K | 1.30M | 43倍 |
bulk_insert(10000件) | 15秒 | 0.5秒 | 30倍 |
読み込み性能
操作 | v1.8.8 | v2.0.4 | 改善率 |
---|---|---|---|
キャッシュヒット時 | 100μs | 1μs | 100倍 |
キャッシュミス時 | 500μs | 100μs | 5倍 |
バッチ読み込み | N×500μs | 500μs | N倍 |
メモリ使用量
- LRUキャッシュ: 効率的なメモリ管理
- ホットデータのみメモリ保持: コールドデータは自動解放
- 調整可能:
hot_capacity
パラメータで制御
🚀 移行ガイド
ステップ1: 環境準備
Rustツールチェーンのインストール
# Rustのインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Maturinのインストール
pip install maturin
DictSQLite v2.0.4のビルド
# v4.2ディレクトリに移動
cd /path/to/others/beta-versions/dictsqlite_v4.2
# リリースモードでビルド
maturin develop --release
# または、wheelをビルドしてインストール
maturin build --release
pip install target/wheels/dictsqlite_v4-*.whl
ステップ2: データ移行
非暗号化データの移行
# v1.8.8でデータをエクスポート
from dictsqlite import DictSQLite
import pickle
old_db = DictSQLite('old_database.db')
export_data = {key: old_db[key] for key in old_db.keys()}
with open('export_data.pkl', 'wb') as f:
pickle.dump(export_data, f)
old_db.close()
# v2.0.4でデータをインポート
from dictsqlite import DictSQLite
with open('export_data.pkl', 'rb') as f:
import_data = pickle.load(f)
new_db = DictSQLite('new_database.db')
for key, value in import_data.items():
new_db[key] = value # 自動型変換
new_db.close()
暗号化データの移行
# v1.8.8で復号化してエクスポート
old_db = DictSQLite('old_encrypted.db', password='old_password')
export_data = {key: old_db[key] for key in old_db.keys()}
with open('decrypted_export.pkl', 'wb') as f:
pickle.dump(export_data, f)
old_db.close()
# v2.0.4で暗号化してインポート
from dictsqlite import DictSQLite
with open('decrypted_export.pkl', 'rb') as f:
import_data = pickle.load(f)
new_db = DictSQLite(
'new_encrypted.db',
encryption_password='new_password'
)
for key, value in import_data.items():
new_db[key] = value
new_db.close()
ステップ3: コード更新
基本的な移行
# v1.8.8
from dictsqlite import DictSQLite
db = DictSQLite('app.db')
db['key'] = 'value'
value = db['key']
# v2.0.4(互換性維持)
from dictsqlite import DictSQLite
db = DictSQLite('app.db')
db['key'] = 'value'
value = db['key'] # 自動デシリアライズ
暗号化の移行
# v1.8.8
db = DictSQLite('secure.db', password='mypass')
# v2.0.4
db = DictSQLite('secure.db', encryption_password='mypass')
非同期処理への移行
# v1.8.8(非対応)
db = DictSQLite('app.db')
db['key'] = 'value'
# v2.0.4(async対応)
import asyncio
from dictsqlite_v4 import AsyncDictSQLite
async def main():
async with AsyncDictSQLite('app.db') as db:
await db.aset('key', 'value')
value = await db.aget('key')
asyncio.run(main())
📦 インストール
PyPIからのインストール(予定)
# 正式リリース後
pip install dictsqlite==2.0.0
ソースからのビルド
# リポジトリをクローン
git clone https://github.com/disnana/DictSQLite.git
cd DictSQLite/others/beta-versions/dictsqlite_v4.2
# ビルドしてインストール
maturin develop --release
🎯 ユースケース別推奨設定
Webアプリのセッションストア
db = DictSQLite(
'sessions.db',
hot_capacity=20_000, # アクティブセッション数の2倍
buffer_size=200, # バランス重視
persist_mode='writethrough', # データ保証
encryption_password='...' # セキュリティ
)
高速キャッシュストア
db = DictSQLite(
'cache.db',
hot_capacity=1_000_000, # 大きなキャッシュ
buffer_size=500, # 高スループット
persist_mode='lazy' # 遅延書き込み
)
ログ記録システム
db = DictSQLite(
'logs.db',
buffer_size=1000, # 大きなバッファ
persist_mode='writethrough', # データ損失防止
storage_mode='jsonb' # 構造化ログ
)
非同期Webフレームワーク(FastAPI等)
from dictsqlite_v4 import AsyncDictSQLite
# FastAPIの例
async_db = AsyncDictSQLite(
'api.db',
hot_capacity=50_000,
buffer_size=300,
persist_mode='writethrough'
)
@app.get("/data/{key}")
async def get_data(key: str):
value = await async_db.aget(key)
return {"value": value}
📚 ドキュメント
完全なドキュメントセット
v2.0.4には包括的なドキュメントが用意されています:
メインドキュメント
- DOCUMENTATION_INDEX_JP.md - ドキュメント全体のガイド
- README_V4.2_JP.md - v2.0.4の完全ガイド
- MIGRATION_GUIDE_V4.2_JP.md - v1.8.8からの移行ガイド
技術ガイド
- PERFORMANCE_OPTIMIZATION_GUIDE_JP.md - パフォーマンス最適化
- DEVELOPER_GUIDE_JP.md - 開発者向けガイド
- ASYNC_SUPPORT_README.md - 非同期処理の詳細
サンプルコード
- examples/v4.2_basic_usage.py - 基本的な使い方
- examples/v4.2_migration_example.py - 移行例
- examples/v4.2_performance_examples.py - パフォーマンス最適化
- examples/v4.2_advanced_examples.py - 高度な機能
- examples/async_await_example.py - 非同期処理
- examples/jsonb_table_usage_example.py - JSONBモード
⚠️ 破壊的変更
必須の変更
-
インポートパスの変更
# 旧 from dictsqlite import DictSQLite # 新 from dictsqlite import DictSQLite
-
Rustビルド環境が必要
- Rustツールチェーンのインストールが必須
- ビルド時間が初回のみ必要
非推奨・変更された機能
以下の機能は削除または変更されました:
- ⚠️ テーブルアクセス方法の変更:
db['table_name']
(v1.8.8のversion=2)→db.table('table_name')
を使用- 注:
table_name
パラメータ自体は残っており、デフォルトテーブルを指定する用途に変更
- 注:
- ❌
json_mode
パラメータ →storage_mode='json'
または'jsonb'
使用 - ❌
password
パラメータ →encryption_password
に改名
🐛 既知の問題
プラットフォーム固有の問題
- Windows: 初回ビルド時にVisual Studio Build Toolsが必要
- macOS: Xcode Command Line Toolsが必要
- Linux: 標準的なビルドツール(gcc, make)が必要
回避策
詳細は MIGRATION_GUIDE_V4.2_JP.md の「よくある移行問題と解決策」セクションを参照してください。
🔜 今後の予定
v2.1(予定)
- ストリーミングサポート(大きな値の処理)
- 非同期イテレータ
- コネクションプーリング
- クエリビルダー
長期的な目標
- PyPIへの正式リリース
- さらなるパフォーマンス最適化
- 追加のストレージバックエンド
🙏 謝辞
コントリビューター
- 開発チーム: Rust実装とPython統合
- テスター: ベンチマークとフィードバック
- コミュニティ: 継続的なサポート
使用技術
- Rust: 高性能コア実装
- PyO3: PythonとRustの統合
- Maturin: Pythonパッケージビルド
- SQLite: 信頼性の高いストレージエンジン
📊 統計情報
- コードベース: 完全な書き直し(5000+ 行のRustコード)
- ドキュメント: 11,900+ 行の包括的なドキュメント
- サンプルコード: 2,000+ 行の実用例
- パフォーマンス: 5〜300倍の改善
- テストカバレッジ: 包括的なテストスイート
🔗 リンク
- GitHub: https://github.com/disnana/DictSQLite
- ドキュメント: v4.2フォルダ
- Issues: https://github.com/disnana/DictSQLite/issues
🎉 DictSQLite v2.0.4は、パフォーマンスとセキュリティを大幅に向上させた次世代のキーバリューストアです。
移行を検討している方は、MIGRATION_GUIDE_V4.2_JP.md をご覧ください。