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的支持和问题解答。