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是非常easy的,不管是数据直接写还是延后写都支持。

以下我们回想一下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能够给应用带来低延迟的数据訪问特性(通过各种机制)。尤其是Hazelcastclient的就近缓存和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所不具备的。

Hazelcast与MongoDB集成的更多相关文章

  1. 【原】Spring与MongoDB集成:配置

    MongoDB的API提供了DBObject接口来实现BSONObject的操作方法,BasicDBObject是具体实现.但是并没有提供DBObject与BeanObject的转换.在还没有了解到与 ...

  2. Solr与MongoDB集成,实时增量索引

    Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...

  3. Mongodb集成LDAP授权

    一.环境简介 Mongodb enterprise v4.0.16 OpenLDAP v2.4.44 二.Mongodb集成LDAP的授权过程 客户端指定某种外部验证方式链接Mongodb: Mong ...

  4. [Solr] (源) Solr与MongoDB集成,实时增量索引

    一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...

  5. mongodb集成spring

    1:首先需要下载mongodb的java驱动包 https://github.com/mongodb/mongo-java-driver/downloads 2:需要下载spring集成mongodb ...

  6. 【原】Spring与MongoDB集成:仓库

    上一篇文章用介绍了如何配置spring-data-mongo连接到MongoDB上,如何创建MongoTemplate.MongoTemplate就相当于一个通用的仓库,可以持久化业务对象. 在spr ...

  7. ABP 结合 MongoDB 集成依赖注入

    1.我们再ABP项目添加一个.NET Core类库  类库名自定定义, 我这里定义为 TexHong_EMWX.MongoDb 添加NuGet包. ABP mongocsharpdriver 添加 A ...

  8. spring boot MongoDB的集成和使用

    前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...

  9. SpringBoot | 第三十一章:MongoDB的集成和使用

    前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...

随机推荐

  1. python练手系列-分布式监控

    如果我们要写一个监控系统,要注意哪些问题和需求? [1] agent收集数据的时候需要通过系统调用少的方法收集到我们需要数据,一般来说我们优先使用python自带的系统方法,然后是读取/proc 文件 ...

  2. c中#与##的应用思考

    c中#与##的应用思考 原创 2014年02月25日 22:01:35 927 一. 思考出处 在读<<linux 0.12完全剖析>>初始化部分, init进程是通过fork ...

  3. 【LeetCode】Binary Tree Preorder Traversal(二叉树的前序遍历)

    这道题是LeetCode里的第144道题. 题目要求: 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很 ...

  4. C++程序在Windows平台上各种定位内存泄漏的方法,并对比了它们的优缺点

    一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准.而在W ...

  5. [python篇][1]configparser 问题汇总

    https://wiki.python.org/moin/ConfigParserExamples 1 错误一 nicodeEncodeError: 'ascii' codec can't encod ...

  6. acm之图论基础

    1.图的定义 图 是一个顶点集合V和一个顶点间关系的集合E组成,记G=(V,E) V:顶点的有限非空集合. E:顶点间关系的有限集合(边集). 存在一个结点v,可能含有多个前驱节点和后继结点. 1顶点 ...

  7. List容器——LinkedList及常用API,实现栈和队列

    LinkedList及常用API ①   LinkedList----链表 ②   LinkedList类扩展AbstractSequentialList并实现List接口 ③   LinkedLis ...

  8. 【Luogu】P2598狼和羊的故事(最小割转最大流)

    题目链接 最小割水题.入点向白点连边,白点向白点.黑点和空点连边,空点向空点和黑点连边,黑点向黑点和汇点连边.然后跑最大流即可. 话说Fd最近怎么光做水题啊……一点用都没有……qwq 我太菜了,做完一 ...

  9. jQuery全屏滚动插件fullPage.js使用中遇到的问题(滑动轮播效果无效)

    1.fullPage.js是什么? fullPage.js 是一个基于 jQuery ,用来制作全屏网站的插件. 2.兼容性: - jquery兼容:兼容 jQuery 1.7+ - 浏览器兼容: I ...

  10. 算法复习——哈希表+折半搜索(poj2549)

    搬讲义~搬讲义~ 折半搜索感觉每次都是打暴力时用的啊2333,主要是用于降次··当复杂度为指数级别时用折半可以减少大量复杂度··其实专门考折半的例题并不多···一般都是中途的一个小优化··· 然后折半 ...