IMDG产品功能扩展

开源IMDG通常都提供了SPI或其他接口,供用户自行扩展。以Hazelcast为例,我们可以用一些好玩的小工具增强其查询、Map和后端持久化的功能。这些小工具虽然看起来很小,但功能也非常强大。


SQL查询

JoSQL非常简单易用,只需几步就可以在普通Java对象上实现SQL查询功能,而且对标准SQL支持的还很全面呢。同时也提供了接口,我们可以自定义想要的SQL函数。


 

它与Hazelcast的集成方法非常简单,就是新建一个Predicate子类。查询时使用我们新建的这个类,Hazelcast执行时会将我们新定义的apply发送到各个结点上执行,将符合条件的数据返回并汇总,最后返回给我们。利用JoSQLHazelcast查询的where过滤条件增强比较容易,但是想利用JoSQLgroupbyjoin和各种汇总函数对Hazelcast进行增强的话改动比较大,因为Hazelcast的设计就是进行简单的过滤查询,返回值都是对象。要扩展的话可能要利用HazelcastMapReduceAggregator接口。


堆外存储

JDK中提供了直接申请堆外内存的方法,就是ByteBuffer.allocateDirect(),其底层调用的是Sun私有的Unsafe.allocateMemory()。因为像Hazelcast这些开源IMDG都把堆外存储缓存数据作为商业版的主打功能之一,所以我们需要自行扩展。但是自己管理堆外内存很麻烦,涉及到空闲内存分配、回收、内存碎片等等管理问题,所以我们还是希望直接使用第三方的产品。在这一领域,目前已经有一些开源产品了:

Ø  MapDB:嵌入式数据库,提供文件和堆外存储,以及ACID支持。

Ø  DirectMemoryApache旗下的开源项目,目前还是0.3版本。

Ø  其他:HugeCollectionsFast-serialization等。

 

MapDB为例,看一下它的使用方法。具体与Hazelcast的集成方法稍稍麻烦一些,需要实现三个Hazelcast的类,可以参考GitHub上的项目:Hugecastmapdb-hz-offheap


后端持久化

使用IMDG时,我们通常还要为每个对象的缓存提供数据加载和持久化类,从而实现缓存的初始化加载和read/write-through功能。可以简单地使用JDBC+DozerMap实现数据的加载保存和实体对象装配,或者利用Hibernate简化这个过程。每种IMDG都提供了对应的扩展接口,例如Hazelcast的扩展点是MapLoaderMapStore,具体实现方式很简单就不列举了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值