MQTT---HiveMQ源码详解(外传)为什么使用Xodus

原创 2017年03月08日 09:48:23

源博客地址:http://blog.csdn.net/pipinet123


MQTT交流群:221405150


既然要考虑为什么使用,那么我们应该从这么几点来去分析这个问题。
1、原始需求是什么?
2、现有框架/产品。
3、对比匹配一个。

原始需求是什么?

功能方面:

一、需要存储6种格式的数据
    1、client_session_subscriptions
        包含clientid、订阅主题、订阅主题质量、更新时间
    2、client_sessions(客户端连接信息)
        包含是clientid、否在线、在线node、持久化session选项
    3、outgoing_message_flow(服务端发送给客户端信息流水)
        包含clientid、message(即所有从服务端到客户端的mqtt消息)、时间戳
    4、incomming_message_flow(客户端发送给服务端信息流水)
        包含clientid、message(即所有从客户端到服务端的mqtt消息)、时间戳
    5、queued_messages(服务端向客户端发送消息的队列)           
        包含clientid、publish、时间戳
三、支持Transaction
四、因为HiveMQ自己做的Cluster Replicate,所以embedded数据库更佳。

性能方面:

1、在完成高性能的同时需要满足占用很少的消耗,尤其是内存。

现有框架/产品

redis

功能
1、Key-Value内存数据库
2、不支持Transaction
3、非embedded
性能
1、连接占用tcp连接
2、占内存
3、并发读写性能很好

MapDB

功能
1、embedded
2、纯java编写,适合HiveMQ调用
3、支持Transaction
4、B-Tree
性能
该处性能由于有Xodus做的性能对比,此处不做赘述。

H2 MVStore Map

功能
1、Key-Value数据库
2、支持Transaction
3、R-Tree
4、非embedded
性能
该处性能由于有Xodus做的性能对比,此处不做赘述。

Xodus

功能
1、支持Transaction
2、embedded
3、MVCC
性能
该处性能由于有Xodus做的性能对比,此处不做赘述。

对比匹配一个

功能

由于HiveMQ存储结构较简单、单一;不需要太丰富的查询、插入;支持事物;并最好是embedded型数据库即可,所以由上即可选出使用MapDB和Xodus。

题外话:在3.x.x版本之前,hivemq就是采用MapDB做为持久化框架。
之后hivemq在性能、并发性做了非常大的调优。

性能

下图为xodus官网给出的性能对比:

对比

xodus源码地址:https://github.com/JetBrains/xodus

总结

由上分析,我们就可以得出今天最终的答案。


HiveMQ的性能测试如下:
链接: https://pan.baidu.com/s/1gfHsKkN 密码: 9fhk

版权声明:本文为博主原创文章,未经博主允许不得转载。

MQTT---HiveMQ源码详解(三)配置加载

MQTT---HiveMQ源码详解(三)配置加载
  • pipinet123
  • pipinet123
  • 2017年03月07日 23:26
  • 5480

MQTT---HiveMQ源码详解(一)概览

MQTT---HiveMQ源码详解(一)概览
  • pipinet123
  • pipinet123
  • 2017年03月07日 22:08
  • 7634

HiveMQ源码详解(一)概览

源博客地址:http://blog.csdn.net/pipinet123简单介绍HiveMQ是企业级MQTT Broker,提供高性能、高可用、高扩展、高安全性的企业级服务。它是纯Java实现的。官...
  • csdnxingyuntian
  • csdnxingyuntian
  • 2018年01月18日 15:05
  • 10

MQTT---HiveMQ源码详解(九)Netty-Codec

MQTT---HiveMQ源码详解(九)Netty-Codec
  • pipinet123
  • pipinet123
  • 2017年03月10日 11:24
  • 5168

MQTT---HiveMQ源码详解(一)概览

MQTT---HiveMQ源码详解(一)概览
  • pipinet123
  • pipinet123
  • 2017年03月07日 22:08
  • 7634

scrapy-redis源码分析

原创文章,链接: (I) connection.py 负责根据setting中配置实例化redis连接。被dupefilter和scheduler调用,总之涉及到redis存取的都要使用到这个模块。...
  • u012150179
  • u012150179
  • 2014年07月28日 11:02
  • 10916

物联网学习手册

refer:https://github.com/phodal/awesome-iot 物联网 物联网是新一代信息技术的重要组成部分,其英文名称是:“The Internet of things”...
  • lxl584685501
  • lxl584685501
  • 2015年04月20日 16:37
  • 5903

MQTT---HiveMQ源码详解(十)Netty-Statistics

MQTT---HiveMQ源码详解(十)Netty-Statistics
  • pipinet123
  • pipinet123
  • 2017年03月10日 11:31
  • 4727

安卓PopupWindow使用详解与源码分析(附项目实例)

基本用法首先定义弹窗的Layout文件res/layout/popup_window.xml
  • jzj1993
  • jzj1993
  • 2015年09月19日 11:12
  • 1385

《LwIP协议栈源码详解——TCP/IP协议的实现》移植综述

如果你认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态。毅力是一种习惯,毅力是一种状态,毅力是一种生活。看了这么久的代码觉得是不是该写点东西了,不然怎么对得起某人口中所说的科...
  • QQ576494799
  • QQ576494799
  • 2016年03月28日 09:55
  • 2151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MQTT---HiveMQ源码详解(外传)为什么使用Xodus
举报原因:
原因补充:

(最多只允许输入30个字)