`
mlzboy
  • 浏览: 726750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

目前来说比较.net下最好的bdb操作封装(附单元测试)

阅读更多
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->  1using System;
  2using System.Collections.Generic;
  3using System.IO;
  4using System.Linq;
  5using System.Runtime.Serialization.Formatters.Binary;
  6using System.Text;
  7using BerkeleyDb;
  8using Component;
  9
 10namespace ToolManager
 11{
 12    public class BDBRecord
 13    {
 14        public object Key getset; }
 15        public string Value getset; }
 16    }
    /**//// <summary>
 17    /// BDB数据库操作类库
 18    /// </summary>

 19    public class BDBHelper
 20    {
 21
 22        private string DBFilePath getset; }
 23        private DBStoreType DBType getset; }
 24        public enum DBStoreType : byte
 25        {
 26            Auto=1,
 27            Queue,
 28            Hash
 29        }

 30        [Obsolete("该构造函数已废弃 ,请使用BDBHelper(string dbfilePath)")]
 31        public BDBHelper()
 32        {
 33        }

 34
 35        public BDBHelper(string dbfilePath)
 36        {
 37            this.DBFilePath = dbfilePath;
 38        }

 39        [Obsolete("该构造函数已废弃 ,请使用BDBHelper(string dbfilePath)")]
 40        public BDBHelper(string dbfilePath, DBStoreType type)
 41        {
 42            this.DBFilePath = dbfilePath;
 43            this.DBType = type;
 44        }

 45        public BDBRecord FindOne()
 46        {
 47            return this.FindOne(null);
 48        }

 49        public BDBRecord FindOne(Func<objectstringbool> predicate)
 50        {
 51            //Dictionary<string, object> dict = new Dictionary<string, object>();
 52            try
 53            {
 54                Queue格式#region Queue格式
 55                //if (this.DBType == DBStoreType.Queue)
 56                //{
 57                using (Db db = new Db(DbCreateFlags.None))
 58                {
 59                    db.RecLen = 5000;
 60                    db.RecPad = '.';
 61                    DbQueue file = (DbQueue)db.Open(nullthis.DBFilePath, null, DbType.Queue, Db.OpenFlags.Create, 0);
 62                    using (DbQueueCursor cursor = file.OpenCursor(null, DbFileCursor.CreateFlags.None))
 63                    {
 64                        foreach (KeyDataPair kvp in cursor)
 65                        {
 66                            BinaryFormatter bf = new BinaryFormatter();
 67                            MemoryStream stream = new MemoryStream();
 68                            stream.Write(kvp.Data.Buffer, 0, kvp.Data.Size);
 69                            stream.Seek(0, SeekOrigin.Begin);
 70                            string k = BitConverter.ToInt32(kvp.Key.Buffer, 0).ToString();
 71                            object v = bf.Deserialize(stream);
 72                            if (predicate == null)
 73                            {
 74                                return new BDBRecord() { Key = v, Value = k };
 75                            }

 76                            else if (predicate(v, k))
 77                            {
 78                                return new BDBRecord() { Key = v, Value = k };
 79                            }

 80                        }

 81                    }

 82                }

 83                //}
 84                #endregion

 85            }

 86            catch (Exception ex)
 87            {
 88                Hash格式#region Hash格式
 89                //else if(this.DBType==DBStoreType.Hash)
 90                //{
 91                //遍历数据
 92                using (Db db = new Db(DbCreateFlags.None))
 93                {
 94                    //这里如果应用Db.OpenFlags.Create则在启动后会覆盖同名文件,并新建同名文件
 95                    //Db.OpenFlags.Truncate会清空数据库
 96                    DbHash dbf = (DbHash)db.Open(nullthis.DBFilePath, null, DbType.Hash,
 97        Db.OpenFlags.ThreadSafe, 0);
 98
 99                    using (DbHashCursor cursor = dbf.OpenCursor(null, DbFileCursor.CreateFlags.None))
100                    {
101                        foreach (KeyDataPair kvp in cursor)
102                        {
103                            BinaryFormatter bf = new BinaryFormatter();
104                            MemoryStream stream = new MemoryStream();
105                            stream.Write(kvp.Data.Buffer, 0, kvp.Data.Size);
106                            stream.Seek(0, SeekOrigin.Begin);
107                            string k = Encoding.UTF8.GetString(kvp.Key.Buffer, 0, kvp.Key.Size);
108                            object v = bf.Deserialize(stream);
109                            if (predicate == null)
110                            {
111                                return new BDBRecord() { Key = v, Value = k };
112                            }

113                            else if (predicate(v, k))
114                            {
115                                return new BDBRecord() { Key = v, Value = k };
116                            }

117                        }

118                    }

119                }

120                #endregion

121                //}
122            }

123            //return dict;
124            return null;
125        }

126        public Dictionary<objectstring> FindAll(Func<objectstringbool> predicate)
127        {
128
129            Dictionary<objectstring> dict = new Dictionary<objectstring>();
130            try
131            {
132                Queue格式#region Queue格式
133                //if (this.DBType == DBStoreType.Queue)
134                //{
135                using (Db db = new Db(DbCreateFlags.None))
136                {
137                    db.RecLen = 5000;
138                    db.RecPad = '.';
139                    DbQueue file = (DbQueue)db.Open(nullthis.DBFilePath, null, DbType.Queue, Db.OpenFlags.Create, 0);
140color: #000
分享到:
评论

相关推荐

    BDB数据库测试工具

    1. **性能测试**:通过模拟大量并发读写操作,测试BDB在不同工作负载下的响应速度和吞吐量,帮助优化数据库配置以达到最佳性能。 2. **压力测试**:在高并发环境下运行测试,检测BDB在极限条件下的稳定性和耐久性,...

    BDB 嵌入式数据库 32位 系统

    **伯克利数据库(Berkeley DB...总的来说,伯克利数据库(BDB)是一个强大的、适用于32位系统的嵌入式数据库解决方案,通过.NET接口库提供了与.NET环境的良好集成。在轻量级数据管理和存储需求中,它是值得考虑的选择。

    spring.net+ibatis.net+mvc配置demo

    spring.net+ibatis.net+mvc配置demo.rar spring.net版本:1.3.2 ibatis.net版本:1.6.1 demo运行环境是VS2013 数据库表,我就没传了,测试的时候,建立表 CREATE TABLE [dbo].[Hair8_AD]( [ADId] [int] ...

    封装好的berbeley db 多线程API 源码(c++)

    - 对于这样的库,通常会有示例代码展示如何使用API,以及单元测试来验证其正确性。 9. **移植性**: - 考虑到Berkeley DB跨平台的特性,这个API应该能够在多种操作系统上运行,如Windows、Linux和macOS等。 综上...

    bdb性能测试

    bdb性能测试(包括查询、插入、删除)批量和单条的比较

    tokyocabinet中HDB和BDB引擎的存储速度比较

    总的来说,tokyocabinet的HDB和BDB引擎各有优劣,选择哪个取决于具体的应用需求。HDB适合需要快速随机访问的场景,而BDB更适合需要保持数据有序和进行范围查询的情况。通过深入学习这两种引擎的源码,我们可以更好地...

    BDB 数据库9.0

    总的来说,BDB数据库9.0版本是一个强大、灵活且可靠的数据库解决方案,尤其适合需要高性能、高并发和本地数据存储的应用场景。通过理解和掌握BDB的相关知识,开发者可以构建出更稳定、更高效的应用程序。

    bdb练习

    总的来说,这个“bdb练习”旨在通过源码阅读和实际操作,提高开发者对bdb的理解和使用能力。通过对bdb的深入学习,开发者可以更好地解决数据存储问题,提升应用程序的效率和稳定性,特别是在处理大量数据和高并发的...

    BDB in kernel

    标题 "BDB in kernel" 指的是 Berkeley Database (BDB) 在Linux内核中的实现,这是一项将数据库管理系统直接集成到操作系统核心的技术。在描述中提到的 "Berkeley DB in kernel for linux-3.13" 显然是指BDB在Linux ...

    Oracle中BDB数据库的使用方法

    Oracle中的BDB(Berkeley ...总的来说,Oracle的BDB数据库因其轻量级、高性能和易用性,成为了许多小型项目和嵌入式系统的首选数据库。开发者可以根据实际需求,灵活地利用BDB提供的API来构建高效的数据存储解决方案。

    全功能的数据库工具BDB v2.8

    &lt;br&gt;如果您目前使用的是SQLServer的查询分析器进行数据库数据查询分析, 那么不妨试一下SQL自动完成功能,通过该功能可大大简化数据查询操作。 ( SQL自动完成功能即在执行查询分析时,不需要手动输入...

    bdb.rar_ oracle bdb_.b_bdb_bdb sql_bdb数据库

    bdb数据库是一种高效、重要的数据存储解决方案,特别是在Oracle公司提供的产品中占据着一席之地。bdb全称为Berkeley DB,它是一种轻量级、嵌入式数据库管理系统,常用于需要快速、本地化数据存储的应用场景。Oracle ...

    BDB数据库

    **BDB数据库详解** ...总的来说,BDB数据库因其高效、灵活和可靠的特性,在许多需要高性能数据存储的应用中得到了广泛应用。尽管现代有许多其他数据库解决方案,但BDB在特定场景下仍具有其独特的价值和优势。

    BDB使用指南,属于个人资源,个人学习研究的BDB心得

    本指南将详细介绍BDB的基本概念、安装配置、操作方法以及常见问题解决策略,旨在帮助个人学习者和研究人员更好地理解和运用BDB。 ### 一、BDB概述 BDB是一款非关系型数据库管理系统(NoSQL),它提供了键值对存储...

    超强的数据库管理工具Bainsoft BDB 3.2绿色版

    总的来说,Bainsoft BDB是一款全面的数据库管理工具,适用于多样的数据库环境,提供了丰富的功能,旨在优化数据库管理流程。对于那些需要跨平台管理数据库的用户来说,它无疑是一个值得考虑的选择。不过,随着技术的...

    数据库设计工具BDB 最新版 v3.0

    数据库设计工具BDB 最新版 v3.0 v3.0 下载: 1) 中文简体版: [url]http://www.bainsoft.com/downloads/BDB.rar[/url] 2) 英文版: [url]http://www.bainsoft.com/downloads/BDBEN.rar[/url] v3.0版本更新: 1, 增加...

    BDB设计数据库的软件很强的

    这对于需要频繁读取和写入操作的高并发应用来说,是一个显著的优势。 其次,BDB提供了多种数据访问接口,包括C、C++、Java和Python等,这使得它能够无缝集成到各种开发环境中。同时,BDB支持事务处理,确保了数据的...

    Berkeley DB(BDB)

    BDB使用日志记录技术来确保数据的持久性。每次事务更改都会被写入日志,即使在系统崩溃后,也能通过回滚日志恢复到一致状态。定期的检查点可以将内存中的更改写入磁盘,减少恢复时的日志处理量。 **7. 应用场景** ...

    基于bdb存贮的简单fifo持久队列,支持多个队列,采用bdb的btree方式组织数据

    基于bdb存贮的简单fifo持久队列,支持多个队列,采用bdb的btree方式组织数据。 启动参数说明: -n 数据库的文件名,默认为:xianglei.db -p http访问的端口号,默认:1985 -i http访问的ip地址,默认:127.0.0.1 -f ...

    BDB Professional Edition v2.8

    BDB Professional Edition v2.8 &gt;BDB(Bain DB Builder)是跨数据库平台的数据库设计工具、 &gt;目前版本支持的数据库平台: &gt; √ Access &gt; √ MS SQLServer &gt; √ Oracle &gt; √ MySQL &gt; √ SQL...

Global site tag (gtag.js) - Google Analytics