关于iBoxDB--NoSQL数据库的使用注意事项

    iBoxDB一个非常不错的NoSQL数据库,使用它也是很偶然的。本来是用SQLite3做个客户端持久化的。没想到看到iBoxDB后只是为了测试好玩试用了一下,结果超出了我的预想。

    首先 iBoxDB性能要比SQLite3高出不少,虽然他们不是同类东西。不论读写、在事务和非事务情况下都优于SQLite。官方是用Mongodb做的对比,当然他们才是同类物件。

    对我的项目来说,唯一遗憾的是iBoxDB没有连接加密。要想实现数据保护,只能自己把数据加工后再写入数据库。

  •     它跨平台,原因是它是通过Net和Java代码驱动的。

  •     支持事务,这很有必要。

  •     它有三种模式:File 、 MemoryMappedFile、 InMemory。性能一个比一个高,看名字就知道为啥。

  •     零配置、无依赖、主键和索引齐备。

  •     对我本项目而言最重要的是它竟然支持NET2+和JAVA6+。

    文档型数据库处理对象的持久化简单、直接。这也是我选择它的另一个主要原因。

    iBoxDB上手很容易,但用好它还需要注意一些使用方法。积累些经验分享给大家吧。

    1、在官方下载的包中,有一些很重要的文件。包括库文件和一些基本操作和配置示例。

    2、iBoxDB默认没有数据库加密功能,数据是完全开放的。解决方法是在应用程序中加密数据后再存入数据库中,可重写IO类的Write和Read方法。参见https://github.com/iboxdb/...IO/EncryptDatabaseConfig.cs,我还是不明白为啥作者不增加连接加密的功能。

    3、一切从new DB()说起,它是管理一个数据库的开始。DB控制数据库的创建和关闭以及对库的一般性配置。DB对象可在应用程序中以单例模式使用,生命周期可与程序共生死。程序死亡时,记得Close()或Dispose()。

    4、可同时创建多个new DB(x)对象,但参数 ‘x’地址不能相同。也就是说,你不能同时创建指向相同数据库的DB对象。

    5、数据库的最佳创建位置,作者给出了代码示例iBoxDB.LocalServer.DB.Root("/data/");

    6、想获得数据库的当前配置定义(包括库表),从DB.GetConfig()获取

    7、从DB.Open()方法可获得一个AutoBox对象,这个对象是操作CRUD的。它不需要管理,也不需要释放,是一个拿来使用主义。AutoBox可重复使用。

    8、从AutoBox.Cube()会获得一个Box对象,这个对象是用于控制事务的。此对象一定记得释放,你应该这样写using(Box box = auto.Cube()){box.Commit();}

    9、你需要遵守先建表和索引,后使用的原则。new DB().GetConfig().EnsureTable<Record>("Table", "ID"); 这个操作可放在Global文件中。

    10、如果你要一次性批量处理数据,最好是在一个事务中进行,这样会让你的效率达到最好。

    11、iBoxDB支持Like SQL语法糖,不过你要注意字段名是大小写敏感的。这个地方iBoxDB作者可改进一下

    12、文档定义的时候,属性的get和set必须public。你应该认真查看iBoxDB所支持的所有数据类型并将文档的属性正确定义。

    13、它不支持“from order where ID==1”这样的语法糖,你必须这样写“from order where ID==?”,通过传参方式执行。

    14、在执行CRUD操作的时候,它的处理方式是与文档类紧密绑定的。不支持JSON或BSON操作。灵活的大大降低,其实它的内部还是需要一个schema的,不是无schema设计。

先写到这里。如果内容有误或我理解的不正确,请及时留言给我。我会马上修正此文。这里非常感谢@iBoxDB的支持和问题解答。

在使用过程中,阅读者发现还有哪些注意事项,请评论告知,我会补充进来,方便大家知识分享。

你可能感兴趣的:(数据库,DB,NoSQL,database,iBoxDB)