Skip to main content

EphemeralDB

軽量で揮発性のコンテキスト管理ストアです。メモリ上でスコープ付きキー・バリューストレージを提供します。

概要

EphemeralDBは階層的なスコープ機能を持つ一時的なデータ管理のために設計されています。以下の用途に最適です:

  • DSLインタープリター
  • 複雑な設定パーサー
  • ネストしたトランザクション処理
  • 深い再帰処理中の一時状態管理

主な機能

  • スコープ付きストレージ: スタックのようにスコープをpush/pop
  • 階層アクセス: 子スコープから親スコープのデータにアクセス可能
  • ドット記法: user.profile.nameのようなネストしたキーをサポート
  • コンテキストマネージャー: with文で使用可能
  • スレッドセーフ: マルチスレッド環境で使用可能
  • メモリのみ: ファイルシステムや外部依存関係不要
  • 軽量: 純Python実装

インストール

pip install ephemeraldb

クイックスタート

from ephemeraldb import EphemeralDB

# 新しいデータベースインスタンスを作成
db = EphemeralDB()

# 基本的な使用方法
db.set('名前', 'アリス')
db.set('ユーザー.年齢', 30)
print(db.get('名前'))  # アリス
print(db.get('ユーザー.年齢'))  # 30

# スコープ付き使用方法
db.set('グローバル変数', 'グローバルです')

db.push_scope('スコープ1')
db.set('ローカル変数', 'ローカルです')
print(db.get('グローバル変数'))  # グローバルです(親からアクセス可能)
print(db.get('ローカル変数'))   # ローカルです

db.pop_scope()
print(db.get('ローカル変数'))   # None(スコープが削除されました)

# コンテキストマネージャー使用方法
with db.scope('一時スコープ'):
    db.set('一時データ', '一時的')
    print(db.get('一時データ'))  # 一時的
# 一時データは自動的にクリーンアップされます

APIリファレンス

コアメソッド

  • set(key: str, value: Any) - 値を保存
  • get(key: str, default: Any = None) - 値を取得
  • delete(key: str) - キーを削除
  • exists(key: str) - キーの存在確認
  • clear() - 現在のスコープをクリア

スコープ管理

  • push_scope(name: str = None) - 新しいスコープを作成
  • pop_scope() - 現在のスコープを削除
  • current_scope() - 現在のスコープ名を取得
  • scope_count() - アクティブなスコープ数を取得
  • scope(name: str) - スコープ用コンテキストマネージャー

高度な機能

  • keys() - 現在のスコープの全キーを取得
  • items() - 全キー・バリューペアを取得
  • to_dict() - 現在のスコープを辞書としてエクスポート
  • from_dict(data: dict) - 辞書を現在のスコープにインポート

使用例

DSLインタープリター

from ephemeraldb import EphemeralDB

def execute_block(db, variables, statements):
    """変数スコープを持つブロックの実行をシミュレート"""
    with db.scope('ブロックスコープ'):
        # ブロック変数をインポート
        for var, value in variables.items():
            db.set(var, value)
        
        results = []
        for statement in statements:
            if statement.startswith('SET '):
                _, var, value = statement.split(' ', 2)
                db.set(var, value)
            elif statement.startswith('GET '):
                _, var = statement.split(' ', 1)
                results.append(db.get(var))
        
        return results

db = EphemeralDB()
db.set('グローバル定数', 42)

results = execute_block(
    db,
    {'ローカル変数': 'ブロック1'},
    ['SET 一時変数 こんにちは', 'GET ローカル変数', 'GET 一時変数', 'GET グローバル定数']
)

print(results)  # ['ブロック1', 'こんにちは', 42]

設定パーサー

def parse_config_section(db, section_name, config_data):
    """継承を持つ設定セクションの解析"""
    with db.scope(f'設定_{section_name}'):
        for key, value in config_data.items():
            db.set(f'{section_name}.{key}', value)
        
        return db.to_dict(include_hierarchy=True)

db = EphemeralDB()
db.set('デフォルト.タイムアウト', 30)
db.set('デフォルト.リトライ回数', 3)

dev_config = parse_config_section(db, '開発', {
    'ホスト': 'localhost',
    'ポート': 8000,
    'デバッグ': True
})

print(dev_config)

トランザクション処理

class Transaction:
    def __init__(self, db, name):
        self.db = db
        self.name = name
    
    def __enter__(self):
        self.db.push_scope(f'トランザクション_{self.name}')
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.db.pop_scope()

db = EphemeralDB()
db.set('アカウント.残高', 1000)

try:
    with Transaction(db, '送金') as tx:
        current_balance = db.get('アカウント.残高')
        if current_balance >= 200:
            db.set('アカウント.残高', current_balance - 200)
        else:
            raise ValueError("残高不足")
except ValueError:
    print("トランザクションがロールバックされました")

エラーハンドリング

EphemeralDBは詳細なエラー情報を提供します:

from ephemeraldb import EphemeralDB, ValidationError, CapacityError

try:
    db = EphemeralDB(max_scopes=5)
    # ... 何らかの操作
except CapacityError as e:
    print(f"容量エラー: {e}")
    print(f"エラーコード: {e.error_code}")
    print(f"詳細: {e.details}")

パフォーマンス特性

  • メモリ使用量: 格納されたデータのサイズに比例
  • 時間計算量:
    • 設定/取得: O(キーの深度)
    • スコープ操作: O(1)
  • スレッドセーフ: RLockによる保護
  • 容量制限: 設定可能な上限値

ライセンス

MIT License

貢献

バグ報告や機能リクエストは、GitHubのIssueでお願いします。プルリクエストも歓迎です。

Release files for EphemeralDB 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for EphemeralDB 1.0.0
File Size Uploaded
ephemeraldb-1.0.0.tar.gz 48.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for EphemeralDB 1.0.0
File Interpreter ABI Platform
ephemeraldb-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 104.8 kB

Release files / ephemeraldb-1.0.0.tar.gz

Download URL ephemeraldb-1.0.0.tar.gz
Size 48.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ebcbbc85660aadf341e697a19c82ff0dd996e2734f93c0202b7dead59535e4f2
BLAKE2b-256 checksum
How to use checksums
da5c3131732d0a377642f83493a91582c730e79d54f95ee792972223b0b84b3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / ephemeraldb-1.0.0-py3-none-any.whl

Download URL ephemeraldb-1.0.0-py3-none-any.whl
Size 56.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc29ac1a460905aa13e069427398c1df5db848a81bfa0564b77278a0e452e271
BLAKE2b-256 checksum
How to use checksums
e4711406d6cb92a21b1a3575564d7b3278c7cd339b29abe8394ec2d1a5faad6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page