2010年1月19日 星期二
* 研究一下JRobin的实现原理
* JRobin它自己扩展了数据类型,如RrdString、RrdInt、RrdLong、RrdDouble等!这些数据类型类型都是从RrdPrimitive这个类继承的。
* 在RrdPrimitive中的成员变量中有一个RrdBackend类的实例和一个pointer。
* 我们可以认为RrdBackend中包含了整个Rrd文件的所有信息,pointer 则是指向数据位置。
* 我们可以根据 pointer 和 RrdBackend 去读和写数据到rrd文件。
* *****************************************************************
* RrdBackend 现在有两种真正的具体实现,一个是RrdMemoryBackend,一个是RrdNioBackend
* RrdMemoryBackend 是将数据都存到内存中,RrdNioBackend 是将数据写到磁盘中。
* RrdMemoryBackend 用一个byte[] buffer数据存储信息,rrd文件的所有信息都通过RrdDef的定义算出所占用的Byte,这个数目就是buffer的下标。再将数据以Byte的形式写到buffer中。
* 我们可以通过参考RrdMemoryBackend 的实现,扩展出一种新的RrdBackend,如数据库的存储方式,这样就能将rrd数据存到数据库中了。
* 具体是,参考RrdMemoryBackend 将他的成员变量 buffer 提供出 Setter和getter方法,这样我们就能取到byte[]数组,再参考他的RrdMemoryBackendFactory类,更改他其中的方法,open exists delete 方法,将数据存到数据库中,并对其操作。
* 大概的就是这种方式思路,具体实现请仔细研究源码。
* ******************************************************************
* 以上 仅仅是我个人看JRobin源码了解到的,如有什么理解错误请指出!谢谢!