首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 使用 BerkeleyDB(五):完整操作封裝 BDBManager

     編輯:關於C語言

核心接口


public interface IPut { string Key { get; } }

BDBManager 完整實現


public class BDBManager : IDisposable
{
    private readonly string _dir, _dbName;
    private DbBTree _btree;
    private Txn _txn;
    private Db _db;
    private Env _env;
    private readonly BinaryFormatter _formatter = new BinaryFormatter();
    private readonly MemoryStream _keyStream = new MemoryStream();
    private readonly MemoryStream _dataStream = new MemoryStream();
    private bool _committed;

    public BDBManager(string dir, string dbName)
    {
        _dir = dir; _dbName = dbName;
        InitEnv(); InitStreams();
    }

    void InitEnv()
    {
        _env = new Env(EnvCreateFlags.None);
        Env.OpenFlags flags = Env.OpenFlags.Create | Env.OpenFlags.InitLock | Env.OpenFlags.InitLog
            | Env.OpenFlags.InitMPool | Env.OpenFlags.InitTxn | Env.OpenFlags.Recover;
        _env.Open(_dir, flags, 0);
        _txn = _env.TxnBegin(null, Txn.BeginFlags.None);
        _db = _env.CreateDatabase(DbCreateFlags.None);
        _btree = (DbBTree)_db.Open(_txn, _dbName, null, DbType.BTree, Db.OpenFlags.Create, 0);
    }

    void InitStreams() { /* formatter, keyStream, dataStream 已在字段初始化 */ }

    // Set / Get / Remove / Find / Commit / Dispose 完整代碼見原文
    // 關鍵邏輯:
    // - 序列化 Key/Value 到 MemoryStream
    // - DbEntry.InOut/Out 包裝字節數組
    // - btree.Put/Get/Delete/Cursor 操作
    // - BufferSmall 時擴容 MemoryStream 重試
    // - Dispose 時自動 Commit
}

關鍵技術細節

適用場景

  • 嵌入式 Key-Value 存儲,單機、高性能、支持事務。
  • .NET Core 跨平台需改用 BerkeleyDB.NET 或 LMDB、RocksDB 托管封裝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
環節處理
序列化BinaryFormatter + MemoryStream,避免文件 IO
事務Env.TxnBegin → 所有操作共用 _txn → Commit/Rollback
游標遍歷DbBTreeCursor.Get(Next) + BufferSmall 動態擴容
資源釋放IDisposable → Dispose → Commit → db.Close → env.Close