Hazelcast与MongoDB集成

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50263213 Hazelcast与MongoDB集成作者:chszs,未经博主允许不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50263213

Hazelcast与MongoDB集成

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

一、Hazelcast与MongoDB

Hazelcast的分布式数据结构和计算性能使得它可以作为应用程序后端的“MongoDB”。

MongoDB是一个开源的、面向文档的数据库,其扩展性和灵活性都非常好。MongoDB不是把数据存入(关系数据库的)表和行,而类似于JSON文档的方式和是以动态模式进行存储。简而言之,MongoDB是一种NoSQL数据存储,主要涉及数据的存储和持久化以及无模式数据的检索。

Hazelcast是一个开源的、分布式的、高可用的、可扩展的内存数据网格存储,它基于Apache v2许可证发布,可用作缓存、消息代理器以及分布式计算平台。Hazelcast强调高速访问分布式数据(通常是分布式的缓存)、分布式计算和分布式消息。

可以查看这个文档: https://hazelcast.com/use-cases/nosql/nosql-data-store/

Hazelcast可以当作NoSQL存储方案。MongoDB有一些数据网格、网格计算的功能,但MongoDB在这方面未做最优化。因此,Hazelcast和MongoDB在这方面做功能对比,有点类似于比较苹果和桔子。

Hazelcast和MongoDB可以结合起来协同工作,而不是相互竞争。Hazelcast支持使用MongoDB作为其后端的数据存储。把Hazelcast的数据映射到MongoDB是很容易的,无论是数据直接写还是延后写都支持。

下面我们回顾一下Hazelcast和MongoDB的特性,看看他们怎样相互配合工作。

二、特征

1、简单性

Hazelcast和MongoDB这两种技术运行都很简单,我们可以让MongoDB在几分钟内实现完全启动。比如,在Mac OS X系统上,可以使用brew安装MongoDB。

brew mongo install

Hazelcast的启动同样简单。

2、对Java开发者的优势

Hazelcast和MongoDB对于开发Java应用程序来说,是非常适合的。对于Hazelcast来说,可以在集群中直接使用Java对象,无需担忧数据传输层的问题,这样开发工作就简化了很多。而使用MongoDB就既需要使用MongoDB的数据结构,又需要写和配置数据传输层。

BSON库完全支持BSON数据格式、数据存储格式和网络传输层格式,MongoDB使用BSON作为存储的“文档”。BSON是二进制JSON的简称,是JSON数据序列化的二进制编码。

MongoDB官网上有Java驱动包,而且此驱动包是一个Java对象文档映射框架,可以把MongoDB的文档与Java对象进行双向映射。

就部署和集成Java应用而言,Hazelcast可以给应用带来低延迟的数据访问特性(通过各种机制),尤其是Hazelcast客户端的就近缓存和Hazelcast成员的嵌入式部署。而对于MongodB,网络延迟是存在的,因为它没有本地内存缓存。

3、分布式计算

Hazelcast的分布式计算框架极其强大,它允许任意业务逻辑执行位置引用,并支持跨集群的分布式扩展。MongoDB支持单线程的MapReduce框架,但不支持任意的用户代码执行。

Hazelcast在分布式计算方面还有很多MongoDB不具备的功能特性,比如分布式并发工具:锁、信号量、队列等,可以把任务协调分布到多个节点并行工作,而这些在本地是很难实现的。我知道很多人使用MongoDB作为他们自己的消息代理器的实现,但是很难想象,仅使用MongoDB如何实现实际的并行。

4、持久化

Hazelcast主要是解决访问分布式数据和进行分布式计算时保持低延迟。默认情况下,Hazelcast不涉及磁盘或其它持久化的存储。Hazelcast不是数据库。而MongoDB是一个真正的持久化数据库(当然,MongoDB的持久化也有一点问题,因为它的写操作是写内存,不是同步写入磁盘的。)

我们来看看把Hazelcast的数据持久化到MongoDB所带来的好处吧:

1)IMap和MapStore

Hazelcast的通读/通写功能是两个接口:MapLoader和MapStore。如果只需从数据库读取数据,那么开发者只需实现MapLoader接口。

MapLoader接口

public interface MapLoader<K, V> {
    V load(K key); (1)
    Map<K, V> loadAll(Collection<K> keys); (2)
    Iterable<K> loadAllKeys(); (3)
}
  • 1)方法一是获取给定键名的值。如果分布式的Map中未包含给定键名的值,那么Hazelcast将调用load(key)方法的实现来获取这个值。
  • 2)方法二是获取键名集合对应的所有键值。这是一个批读取操作,是针对多个读取给定键名的值的优化。
  • 3)方法三是获取存储区的所有键名。

MapStore接口继承了MapLoader接口,并允许保存IMap条目到数据库。

MapStore接口

public interface MapStore<K, V> extends MapLoader<K, V> {
    void store(K key, V value); (1)
    void storeAll(Map<K, V> map); (2)
    void delete(K key); (3)
    void deleteAll(Collection<K> keys); (4)
}
  • 1)存储键值对
  • 2)存储多个条目。此方法的实现可以优化多个存储键值对的操作
  • 3)删除给定键名的条目
  • 4)删除给定键名集合的多个条目

要想对MapLoader和MapStore接口了解的更多,查看文档: http://docs.hazelcast.org/docs/3.5/manual/html-single/index.html#map-persistence

要与MongoDB互动,使用mongo-java-driver驱动包。

Maven依赖配置如下:

<dependency>
   <groupId>org.mongodb</groupId>
   <artifactId>mongo-java-driver</artifactId>
   <version>${mongo-java-driver.version}</version>
</dependency>


MongoClient mongoClient = new MongoClient(new MongoClientURI(mongoUrl)); (1)
MongoCollection collection = mongoClient.getDatabase(dbName).getCollection(collectionName); (2)
final Document document = (Document) collection.find(eq("_id", key)).first(); (3)
collection.insertOne(document); (3)
  • 1)使用给定URI(比如mongodb://localhost:27017)建立到MongoDB实例的连接
  • 2)MongoClient类提供了连接MongoDB实例、访问数据库、访问集合、访问文档的方法
  • 3)MongoCollection类允许对集合中的文档进行增删改查

总结

MongoDB结合Hazelcast,可以提供低延迟访问分布式、无模式的数据的解决方案。如果你在寻求NoSQL数据存储解决方案,MongoDB是很适合的。Hazelcast的fenbushii数据结构和分布式计算能力,是MongoDB所不具备的。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
124 0
|
4月前
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
4月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
5月前
|
SQL NoSQL 关系型数据库
ClickHouse(24)ClickHouse集成mongodb表引擎详细解析
**MongoDB引擎在ClickHouse中提供只读访问远程数据,用于`SELECT`查询。不支持写入。创建MongoDB表引擎的语法:`CREATE TABLE ... ENGINE = MongoDB(host, db, coll, user, pass)`。例如:**查看[ClickHouse中文文档](https://zhangfeidezhu.com/?p=468)获取更多教程,包括系列文章覆盖的各种表引擎解析。
151 0
|
5月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
6月前
|
人工智能 NoSQL atlas
MongoDB Atlas Vector Search与Amazon Bedrock集成已全面可用
MongoDB Atlas Vector Search知识库与Amazon Bedrock的最新集成,将极大加速生成式AI应用的开发
2634 1
|
5月前
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
141 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
290 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
368 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
318 1