zoukankan      html  css  js  c++  java
  • 一款.NET下的开源轻量级对象数据库NDatabase

    【原创翻译】C#开源轻量级对象数据库NDatabase介绍【原创资料限时奉送】

    2013-02-20 09:35 by asxinyu, 1992 阅读, 93 评论, 收藏编辑

    今天向大家介绍一款.NET下的开源轻量级对象数据库NDatabase,花了1天时间看了一下文档和一些例子。觉得有必要把一些东西整理成中文文档,也方便大家。本来想把以前的一个小项目改造一下,做一个例子的。无奈,时间不是很充足,还要忙着找工作。所以大家自己看看,这个数据库在某些方面还是很有用的。下面的总计都是按照官方文档进行翻译的,稍微去掉和修改了一些,总结了一下该数据库的一些特点和特性。然后把重点写出来了。简单的增删查改在后门的例子中。翻译水平有限,敬请指点:

    1.前言

    NDatabase是一个易于使用的.NET对象数据库。为了避免关系数据库带来的开销,可以尝试用NDatabase。NDatabase是新一代的面向对象数据库:1个原生的.NET数据库持久层。它的主要特征有:

    •  简单:NDatabase非常简单,很容易学习上手使用;它API是简单,不需要学习任何数据库映射技术;不需要对象和存储持久层之间的映射;NDatabase以最简单的方式存储对象;不需要安装和管理。
    •  小:NDatabase 运行时小于300Kb,部署程序的时候,很容易集成到.NET应用程序中去。
    •  安全健壮:NDatabase支持ACID事务处理,保证数据的完整性。即使在硬件故障的情况下,所有的提交工作都会应用到数据库,在下一次启动的时候自动执行。
    • 单一数据库文件:NDatabase使用单一的文件存储所有的数据,包括元数据,对象,索引等。
    • 生产率:NDatabase使用很少的代码来进行数据持久化,不需要映射。因此,开发人员可以专注于业务逻辑的实现,而不是在数据持久层浪费时间。

    2.NDatabase入门

    2.1 基础设置

    NDatabase中所有的数据库引擎设置都在OdbConfiguration类中。如BTree Validation,和BTree index degree的设置都在这个类里面,打开日志的设置也在这个类里面。NDatabase提供了默认的日志类实现:ConsoleLogger,可以使用OdbConfiguration类中的EnableConsoleLogger方法进行设置。实现好自定义的日志类后,还需要进行注册RegisterLogger方法,才能够使用。

    1 OdbConfiguration.RegisterLogger(new Log4NetLogger());

    2.2 使用索引

    使用IOdb接口的IndexManagerFor方法可以为指定类型添加索引,如:

    复制代码
     1 using (var odb = OdbFactory.Open("index1.ndb"))
     2 
     3 {
     4 
     5     var fields = new[] { "Name" };
     6 
     7     odb.IndexManagerFor<Player>().AddUniqueIndexOn("nameIndex", fields);
     8 
     9     odb.IndexManagerFor<Game>().AddIndexOn("nameIndex", new[] { "Result" });
    10 
    11 }
    复制代码

    2.3 使用事务

    NDatabase可以使用事务来保证数据的完整性(ACID:原子性,一致性,隔离性,持久性)。当一个NDatabase被打开后,将会自动创建一个会话,包含一个特殊的当前事务对象,这个事务对象实例管理当前所有的数据和数据操作行为。

    2.4 内存数据库模式

    NDatabase可以将数据库所有数据直接加载到内存中,直接使用OdbFactory方法的 OpenInMemory即可。 

    2.5 关于触发器

    要增加一个触发器,首先要建立一个实现了Trigger 接口()的类,该接口有4种可用的类型(InsertTrigger,UpdateTrigger,SelectTrigger,DeleteTrigger)。如:

    复制代码
     1 public class MyTrigger : InsertTrigger
     2 
     3 {
     4 
     5     public override bool BeforeInsert(object obj)
     6 
     7     { return true; } 
     8 
     9     public override void AfterInsert(object obj, OID oid)
    10 
    11     { }
    12 
    13 }
    复制代码

    在使用过程中,打开数据库后,要注册触发器,才能使用:

    复制代码
     1 var mage = new Mage("Merlin", 3.3, 3.4);
     2 
     3 var myTrigger = new MyTrigger(); 
     4 
     5 using (var odb = OdbFactory.Open("inserting_trigger.db"))
     6 
     7 {
     8 
     9     odb.TriggerManagerFor<Mage>().AddInsertTrigger(myTrigger);
    10 
    11     odb.Store(mage);
    12 
    13 }
    复制代码

    2.6 扩展数据库架构

    在数据库的使用周期中,类型的定义可能会改变,NDatabase提供了重构管理接口,可以扩展数据库架构,使用IRefactorManager可以重命名类型名称和字段名称,以及增加和删除字段。如下列代码:

    复制代码
     1 using (var odb = OdbFactory.Open("Refactoring.odb"))
     2 
     3 {
     4 
     5     var refactorManager = odb.GetRefactorManager();
     6 
     7     refactorManager.RenameField(typeof(User), "age", "_age");
     8 
     9     refactorManager.RenameField(typeof(User), "name", "_name");
    10 
    11 }
    复制代码

    2.7 自定义日志接口

    2.1节中提到了日志的配置,可以自定义日志类,注册后使用,如下所示:

     

    复制代码
     1 public class Log4NetLogger : ILogger
     2 
     3 {
     4 
     5     private static readonly ILog Log = LogManager.GetLogger(typeof (ILogger)); 
     6 
     7     #region Implementation of ILogger 
     8 
     9     public void Warning(string message)
    10 
    11     {  Log.Warn(message); } 
    12 
    13     public void Debug(string message)
    14 
    15     {  Log.Debug(message);} 
    16 
    17     public void Info(string message)
    18 
    19     {  Log.Info(message); } 
    20 
    21     public void Error(string message)
    22 
    23     {  Log.Error(message);} 
    24 
    25     public void Error(string message, Exception t)
    26 
    27     {
    28 
    29         Log.Error(message);
    30 
    31         Log.ErrorFormat("Error: {0}, exception: {1}", t.Message, t);
    32 
    33     }
    34 
    35     #endregion
    36 
    37 }
    复制代码

     

     

    2.8 异常处理

    NDatabase使用内部的异常处理类型来处理错误,以下是NDatabase中的异常类型:

    BTreeException

    BTreeNodeValidationException

    DuplicatedKeyException

    CorruptedDatabaseException

    LinqQueryException

    2.9 非持久属性

    如果有一些属性不想保存到数据库,可以使用[NonPersistent]属性。 

    3.实际使用的几个例子

     使用之前当然要先有实体类,例子的实体类采用最简单的,这里有些地方就不写出来了。

    3.1  2个保存对象的例子

    先看简单的:

    1   var sport = new Sport("volley-ball");
    2   using (var odb = OdbFactory.Open(TutorialDb5MinName))//打开数据库
    3       odb.Store(sport);

    再看复杂的:

    View Code

    3.2 再看看几个简单的查询例子

    最简单的,注释就免了,都比较简单

    复制代码
     1 using (var odb = OdbFactory.Open(TutorialDb5MinName))
     2 {
     3     var query = odb.Query<Player>();
     4     query.Descend("Name").Constrain("julia").Equal();
     5     var players = query.Execute<Player>();
     6 
     7     Console.WriteLine("\nStep 3 (Soda): Players with name julia");
     8 
     9     foreach (var player in players)
    10         Console.WriteLine("\t{0}", player);
    11 
    12     Assert.That(players, Has.Count.EqualTo(1));
    13 }
    复制代码

    看看这种,LINQ的查询方式:

    复制代码
    using (var odb = OdbFactory.Open(TutorialDb5MinName))
    {
        var players = from player in odb.AsQueryable<Player>()
                      where player.Name.Equals("julia")
                      select player;
    
        Console.WriteLine("\nStep 3 (Linq): Players with name julia");
    
        foreach (var player in players)
            Console.WriteLine("\t{0}", player);
    
        Assert.That(players.Count(), Is.EqualTo(1));
    }
    复制代码

    简单的例子就写这么多吧。实际的还有很多灵活的操作,比如比较,查询,还对表直接的关系等等。如果有兴趣,适合你,可以看后面的资源链接。

    4.NDatabase资源

    1.开源网址:https://ndatabase.codeplex.com/ 

                     http://ndatabase.wix.com/home#!overview/c18h9

                     http://ndatabase.net/

    2.教程地址:

                    官方5分钟入门使用教程

                    官方1分钟入门使用教程

                    NDataBase教程及说明文档

                    官方数据库性能测试及对比
    3.自制的 NDatabase类库API帮助文档 和 英文版资料电子书

      最给力的是什么,当然是下载了,呵呵。据说,有下载的文章会吸引更多人。

         自己动手,丰衣足食。呵呵,做了一份 NDatabase类库API帮助文档 和 英文版资料电子书。

         需要的留下邮箱,21日中午12点钟左右发送,仅此一次。写篇文章不容易,希望大家不要吝啬哦。 

    编程爱好者,关注.NET软件开发,Matlab编程及网络技术

    http://www.cnblogs.com/asxinyu/

    E-mail:asxinyu@qq.com

     
  • 相关阅读:
    Chrome恢复显示网址 https:// 和 www
    test
    test
    [转载]看我花式绕过校园网计费认证
    [软件分享]速盘,一个新的百度网盘下载工具
    通过canvas计算任意两个颜色的插值
    Canvas绘制圆点线段
    MySQL 5.7.30 的安装/升级(所有可能的坑都在这里)
    感觉自己成长慢,单点突破可以让你成长快10倍
    承认吧,你就是个意志力很差的人
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2918933.html
Copyright © 2011-2022 走看看