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

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

相关文章

文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的...
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒...
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb...
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn...
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无...