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

SQL查询

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

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

堆外存储

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

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

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

Ø  其他:HugeCollections、Fast-serialization等。

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

后端持久化

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

IMDG产品功能扩展的更多相关文章

  1. iWebShop产品功能技术优势有什么?

    iwebshop基于iweb si 框架开发,在获得iweb si 技术平台支持的条件下,iwebshop可以轻松满足用户量级百万至千万级的大型电子商务网站的性能要求.站点的集群与分布式技术(分布式计 ...

  2. 硕盟SM-T54| TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  3. 硕盟SM-T54|type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞接口功能说明

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  4. 硕盟type-c转接头|四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  5. 硕盟type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  6. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  7. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

  8. spring源码深度解析-2功能扩展

    容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFacto ...

  9. vs.net 2013 Saffolding功能扩展

    vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...

随机推荐

  1. 获取 Let's Encrypt 免费通配符证书实现Https

    说明 3月14日,Let's Encrypt的执行董事Josh Aas对外宣布,他们的通配符证书正式上线,用户可以基于此特性轻松部署/开启所有子域名的HTTPS功能. Let's Encrypt 是国 ...

  2. [LeetCode] Max Stack 最大栈

    Design a max stack that supports push, pop, top, peekMax and popMax. push(x) -- Push element x onto ...

  3. [Apio2009]Atm

    题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...

  4. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主

    题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...

  5. ●POJ 1509 Glass Beads

    题链: http://poj.org/problem?id=1509 题解: 给出一个字符串,有一个操作:把首字符放到末尾,形成新的串.求任意次操作后,字典序最小的串的首字母在原串中的位置.(这就是最 ...

  6. [Codeforces]663E Binary Table

    某变换好题.不过听说还有O(2^n*n^2)DP的…… Description 给定一个n*m的01矩阵,你可以选择对任意行和任意列取反,使得最终“1”的数量尽量少. Input 第一行两个整数n,m ...

  7. 【完整项目】使用Scrapy模拟HTTP POST,获取完美名字

    1. 背景 最近有人委托我给小孩起个名字,说名字最好符合周易五行生克理论,然后给了我个网址,说像是这个网站中的八字测名,输入名字和生辰八字等信息,会给出来这个名字的分数和对未来人生的预测.当父母的自然 ...

  8. Map 探索

    关于Map问题我一直了解的不是很透彻,下面进行比较系统的总结一下. 1.

  9. USB_ESD处理

    今天收到客户反馈说碰到USB后机器会死机,之前一直没有关注ESD问题. 现在整理之前用过的成熟的ESD电路: 电感为 PZ3216D101-3R0TF,1206封装. 用ESD枪测试OK, 用打火机持 ...

  10. c# &sqlserver

    sqlserver CHARINDEX函數返回字符或者字符串在另一個字符串中的起始位置 eg: select bh,left(djxl,CHARINDEX('A',djxl)) as ,sum(rs) ...