微信号:infoqchina

介绍:有内容的技术社区媒体

Java内存数据网格Hazelcast 3.0支持连续查询和条目处理

2013-10-23 20:27 马德奎

Java开源内存数据网格Hazelcast的最新版本支持“条目处理(Entry Processing)”、多线程执行、连续查询和延迟索引。Hazelcast 3.0在两周前的JavaOne会议期间发布,体现了该产品自2008年创建以来的最大变化,以及改写其70-80%的代码所做出的努力。它还使用服务提供程序接口(SPI)重新实现了所有现有的分布式对象,如Map、Queue和ExecutorService等。


借助多线程执行这一新特性,操作现在可以由多个线程执行(由处理器内核因子确定),这有助于在多核机器上进行扩展。新SPI允许开发新的分区服务和数据结构。所有Hazelcast数据结构,如Map、Queue,均使用SPI进行了重新实现。


Hazelcast 3的其它技术特性包括:


条目处理:Hazel cast 3有一个称为条目处理的新特性,使开发人员可以对Map进行快速内存操作,而无须担心锁或并发问题。EntryProcessor是一个可以修改或替换映射条目值的接口。它既可以作用在单个映射条目上,也可以作用在所有映射条目上。未来版本还会增加使用Predicate选择目标条目的支持,如“查找和替换”。EntryProcessor可以与Hazelcast的另一个新特性一起使用:内存格式设置。在默认情况下,条目值存为字节数组(二进制格式),但当它存为对象(对象格式)时,条目处理器可以直接作用在该对象上。EntryProcessor的另一个特性是,它可以自动取得映射条目的独占访问,而无须使用同步来防止更新丢失。


序列化:作为现有序列化方法的一种替代方法,Hazelcast提供了Portable序列化接口。该接口有许多优点,如相同对象类型的多版本支持和不依赖于反序列化和/或反射的查询和索引支持。Hazelcast还提供了IdentifiedDataSerializable接口,它是DataSerializable接口的略微优化版本,不使用类名和反射进行反序列化。Hazelcast还允许开发人员插入自定义的串行器用于对象序列化。


连续查询:该特性允许程序员设置查询,这些查询会在addition/update/remove/evict事件中的任何数据与其相匹配时触发。这一过程由侦听器完成。侦听器使用查询进行注册,并在Map条目发生了与查询相匹配的变化时获得通知。在支持诸如复杂事件处理(CEP)这样的情况时,这很有用,而此类情况通常需要单独的产品支持。


延迟索引:借助延迟索引这一新特性,开发人员无须每次在开始阶段就添加索引,而是可以在任何时候为条目添加索引。


分布式事务:Hazelcast 3支持两阶段提交的分布式事务。新事务API同时支持1-阶段(本地)和2-阶段事务。


InfoQ就新版本的特性与Hazelcast的共同创建者Fuad Malikov进行了交谈。


InfoQ:在新版本中增加分布式事务支持的动机是什么?与关系数据库中的2PC事务相比,它在内存数据网格中是如何工作的?该特性有什么限制吗?


Fuad:我们听取了很多来自社区的建议。Hazelcast用户要求Hazelcast提供2阶段提交(2PC)事务的能力。例如,他们希望能够在一个分布式队列中消费一个数据项,对其进行处理,然后将一个条目存入另一个分布式Map中。这整个过程需要在一个事务中完成,这样,在节点失败时,才不会丢失未处理的数据。


Hazelcast是完全的内存解决方案,在默认情况下,它依赖多节点内存复制实现持久性。2PC的实现也是如此。在准备状态,它就在多个节点上复制事务状态。


另外,Hazelcast的下一个版本将能够通过JCA以及JMS和JDBC等其它资源参与XA事务。


InfoQ:对于Hazelcast v3中的连续查询特性,您可以解释下它的工作原理吗?


Fuad:在这些特性中,这是另一个使人们认识到内存数据网格不仅仅是缓存的特性。连续查询提供了便利和分布式处理能力这一“存储过程”由来已久的思想,但它与现代复杂事件处理(CEP)模式更为类似。与数据库存储过程不同的是,在Java中,连续查询可以保证应用层中应用逻辑的清晰。除此之外,它还具有其它优点,包括有极高的可扩展性,以及能够保证在数据所在的位置对其进行处理,从而使这一过程非常快速和高效。


连续查询的实现结合了Event和Predicate API。Hazelcast支持EntryListener,该侦听器监听在Map条目上进行的ADDED、UPDATED、REMOVED或EVICTED等操作。在先前的版本中,它就可以监听所有的Map条目或者特定的Key。除此之外,借助连续查询特性,开发人员可以定义查询(Predicate),而只有更新的条目与该查询匹配时才会触发事件。通过这种方式,侦听器会收到一个基于查询的连续的事件流。


InfoQ:在Hazelcast的下一个版本中,有什么开发人员可以期待的新特性和功能增强吗


Fuad:为了创建Hazelcast 3,它70-80%的代码都重写了,这使我们能够支持一些主要架构的模块化。在下一个版本里,其中一个真正令人兴奋的特性是服务提供程序接口(SPI)。我们将Hazelcast内部构件分成Networking、Clustering、Partitioning和Service等四个模块。这些内部构件将暴露为SPI,因此社区可以对Hazelcast进行扩展和开发自定义的分布式数据结构和处理服务。另一个特性是可移植客户端协议。该协议使开发人员可以用任何语言实现客户端。我们会发布C++客户端,并期待由社区来实现其它语言的客户端,如Python和Ruby。


Hazelcast 3遵循Apache 2许可协议,可以从其产品网站上下载。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 从菜鸟到总监!成为优秀设计师的10个必备技能 IT女--候车一则 第四届GOT论坛开幕在即 邀您共赏“营在云端” 奇葩:世界各国高考作文题都是怎样的? 【黑帽官方】 2016独家黑帽网SEO培训从零开始(第四期)