当前播放: HBase和Aerospike哪个NoSQL才是你的菜?
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
合辑:新版短视频
Kafka某台broker IO阻塞,为何会导致发送方无法发送消息?
什么是C++中的The Rule of Three?
基于时序特性,如何构建一个时序存储引擎?
如何利用反射和泛型编程让你的Java代码更优雅?
C++中为什么move constructor需要加noexcept?
如何使用Postman做接口自动化测试?
给你点“颜色”瞧瞧
如何用Spark实现一个通用大数据计算引擎?
如何让你的Robot Framework飞起来?
如何透彻理解Selenium和WebDriver?
Spring Data JPA 如何进行复杂动态查询?
Spring Data JPA如何实现动态部分更新?
未来的编程语言长什么样?
高并发场景下锁的使用技巧(悲观锁/乐观锁/分布式锁)
为什么React组件要声明key?
为什么React不推荐使用Mixin?
如何设计一个高可用的配置中心?
如何通过代码技巧提升内存使用效率?
如何全面地改造Robust?
如何基于Netty构建一个简单的RPC服务?
Spring Boot中如何使用HTTP/2?
教你10分钟玩转Gradle plugin
如何深入理解Kube-Proxy?
如何深入理解Kubernetes架构?
如何使用和优化iOS中的WebView?
一个1000万资金重复支付的代码剖析
如何实现数据异构的多级缓存策略?
如何从 CRD 扩展开发切入Kubernetes源码学习?
如何更轻松简单地从源码编译部署Kubernetes?
如何设计并实现一个高可用的订单系统?
ZooKeeper的ZAB算法与Paxos的本质区别是什么?
微服务框架Apache ServiceComb的设计思想有哪些?
如何深入理解分布式事务TCC实现原理?
SSR 、CSR、预渲染、同构等首屏优化技术要如何选择?
如何利用ClassPath解决Java开发工程问题?
如何读懂Babel转换出的JavaScript代码?
大厂前端面试中经常提到的Promise要如何实现?
使用 Vue 开发小程序是怎么做到的?
为什么CSS要放在header底部,JavaScript要放在body底部?
前端Router是怎么实现的?
如何理解现代发布策略?以Kubernetes为例
JavaScript中如何封装一个具有自动失败重试功能的HTTP模块?
JavaScript中如何优雅地实现函数防抖?
服务发现技术是如何演进出来的?
HTTP/2能带来哪些性能提升?
如何快速对请求链路的关键点进行网络问题排查?
React 中如何实现模块的按需加载?
究竟要不要使用React Hooks?
TLS1.3原理以及在Nginx上的应用
如何利用有效的资源扛住618大促流量?

HBase和Aerospike哪个NoSQL才是你的菜?

臧萌 PayPal数据处理组技术负责人

NoSQL 从诞生之初曾经饱受质疑,经过这么多年的发展,NoSQL 证明了自己的价值,各大公司也已经从“是不是要用 NoSQL”发展为“应该用哪个 NoSQL”。究其背后的原因,我以为是互联网飞速发展带来的数据飞速膨胀,“要对超大数据集进行简单的数据操作”成为互联网公司的刚需,而 NoSQL 正是在这个大背景下发展起来的…

作者介绍

臧萌,现任 PayPal 数据处理组技术负责人,《Java 入门 123》一书的作者。

展开
¥4.99 购买
开通VIP
48
登录 后留言

精选留言(12)

  • LongXiaJun
    老师好萌

    作者回复: 可能主要还是胖的吧

    2019-07-19
    11
  • alnssi
    Aerospike和Redis或Pika比起来有什么优势?老师能说说嘛😄

    编辑回复: Aerospike 原生支持多核,持久化到磁盘,集群和HA。根据业界经验,一个 DB 从设计之初就支持的核心功能的易用性+稳定性要好过以后增加的核心功能。

    Redis也支持了集群和HA,两者的套路如出一辙,可谓英雄所见略同。我本人并没有在生产环境用过 Redis,不确定 Redis 现在的持久化方案和集群方案是不是有坑。Aerospike 的还是没什么大问题的,包括集群扩容等操作也都安排得明明白白。

    同时,Aerospike还有针对SSD的核心技术,号称可以充分利用SSD磁盘。SSD确实和普通的机械磁盘不一样。初步的介绍可以移步 https://www.bilibili.com/video/av52944283/。 Aerospike 针对的SSD优化:https://www.aerospike.com/docs/operations/plan/ssd/

    Redis 的数据结构比较丰富,这里一个Aerospike支持的数据结构的文档:https://www.aerospike.com/docs/guide/cdt.html

    两者都是用C写的,性能都很棒棒。两者的客户端也都很丰富。

    就像视频中说的,Aerospike 启动的时候需要将所有的 key 都从磁盘加载到内存,这个是比较耗时间的。但是好处是集群服务的时候更稳定。

    Aerospike 也支持UDF,使用的语言是Lua,就是在服务器端进行计算。这个Redis好像没有。

    当然,Aerospike是商业版的软件,要想用的爽,还是得花钱。社区免费版有各种限制,包括集群机器数量(三台)等。具体的免费版和收费版的对比(https://www.aerospike.com/products/product-matrix/)。但是即使是收费版,也最多支持128台,和Redis号称的1000台差距很大。这是 Aerospike 官方公布的限制 https://www.aerospike.com/docs/guide/limitations.html。

    2019-07-15
    5
  • 金生水足
    能和mongoDB比较一下吗?

    作者回复: mongoDB和HBase以及Aerospike感觉不是在一个象限中的。mongoDB更像是和MySQL这种传统的DB在一个象限竞争的。

    mongoDB有以下特征:
     - 原生支持索引
     - 原生支持JSON数据
     - 支持根据JSON的数据进行查询

    所以它和MySQL这种DB的差别就是对数据的schema没有强制的约束,不需要在数据变化的时候修改表结构。这些特性可以灵活的应对业务数据的变化。


    mongoDB可以根据JSON数据的值进行查询,所以它是document-based的数据库。

    相比之下,HBase和Aerospike则是更存粹的key-value(s)的NoSQL。他俩都是用bin来描述一条记录里的一个值的。可以用key得到这一行所有的bin,也可以指定key和bin name(s)获取一行对应的value(s)。这一点和mongoDB就很不一样了。

    如果说的再掺杂一点个人观点。我认为mongoDB和传统的关系型数据库更像的原因是,它们都侵入了一点业务逻辑。无论是mongoDB的client的查询API,还是SQL,其本质都是业务逻辑。我们在用它们提供的接口,来操作数据,执行业务逻辑。

    而HBase和Aerospike则更薄,只做到数据这一层。虽然AS也支持complex data type,HBase也支持coprocessor,但是更主流的情况下,它们是获取数据,然后让用户自己写代码处理数据,完成业务逻辑,而非是使用它们客户端提供的API完成业务逻辑。

    换个角度来说。HBase和Aerospike速度应该更快。毕竟它们的接口更简单。

    尝试总结一下,如果受够了修改table schema,尝试寻找MySQL的替代品,那么mongoDB可以试试看。如果是纯粹的需要一个key-value(s)系统,可以考虑HBase和Aerospike。至于HBase和Aerospike怎么选,看视频吧~

    P.S. mongoDB是业内有名的第一眼DB,看着很爽,试着用用也很爽,量一大就凉凉了。个人不是mongoDB的专家,如果考虑mongoDB,建议对mongoDB的读写压力评估一下,是否能够适应业务相当一段时间内的增长。

    2019-08-16
    2
  • 蜗牛
    还有其他课程吗,想听

    作者回复: 你想从0开始学Java吗?让你听个够

    2019-07-30
    1
  • 李饶
    老师您好,请问一下那Hbase保持key的顺序性是仅仅了为了保证索引到key的效率,而逻辑上连续的业务数据(value)本身则在存储上就是需要离散的,是需要分配的不同的机器上的,那这种设计下需要取得连续数据时索引到的key也是离散的,而为了力保效率的scan操作在此时是不是没有使用价值?(scan出来的key是连续的,value却是离散,也就是不能取出连续的数据),scan在什么设计下才能发挥最大价值呢?

    作者回复:
    从理论上分析,“逻辑上连续的业务数据(value)本身则在存储上就是需要离散的”并不一定就会比业务数据都聚集在一台机器上慢,因为一台机器就只有固定的几个磁盘。而如果数据请求分散到很多机器上,很多机器的磁盘一起工作,获取单条value的代价/时间可能更高,但是因为是很多机器上的很多磁盘一起工作,所以从集群的角度看,完成这次数据获取的请求可能需要的时间会更少。

    HBase本身是基于HDFS的,每个文件默认是三个copy,所以即使业务数据确实是存储在一个region上,但是实际读取时,HDFS文件是否是在一台机器上,还未可知。当然在一台机器上的概率肯定是比较高的。

    说完理论,谈实际。实际使用的时候,还是要根据数据的特性做设计。文中给的设计是key连续,value分散,是基于value远大于key的前提。比如100B的key,32k的数据。这样数据散列开,可以充分利用集群的资源。

    当然,除了数据特性,还要看请求的特性。如果请求量特别大,整个集群的压力很大,磁盘IO达到了瓶颈,value散列开反而是没什么好处,反而会增加IO的次数和压力。当然这并不是一个健康的集群状态,需要从operation层面解决。

    所以scan在什么情况下才能发挥最大价值,要看实际情况。但是如果需要获取连续的多个值,而又不想独立建索引系统(比如在DB,或者ES里索引key),那么HBase的scan就是值得一试的。最典型的就是TSDB。

    2019-11-25
  • 春天里的布谷鸟
    讲的不赖

    作者回复: 😁

    2019-11-03
  • 一个好名字
    老师好有意思,哈哈哈哈
    2019-09-27
  • 王小迈
    老师您好,对于HBase的数据表+索引表的方案,有个疑问,给定startKey和endKey,可以顺序scan出索引表里所有的UUID,但得到UUID不是连续的,这样访问数据表就没法使用scan一次性扫描出所有期望的记录了,访问效率不高,这个问题怎么解决呢?

    作者回复:
    这个不是问题是目的。集群的目的就是为了让请求尽量分散到集群里所有的机器上。index小,100条数据的index对一台机器的压力可能就相当于1条数据对一台机器的压力。然后再读100条记录,大概率这100条记录会均匀分散到集群的所有机器上。所以从整个集群的角度看,这样是最大化的利用集群资源,提高集群吞吐量。

    2019-09-23
  • kyleqian
    这样看,是否可以认为如果业务中需要大量的顺序查询读取一个范围内的数据,而且写入大多也是顺序的,最好还是使用hbase?

    作者回复:
    准确来说,还是要看同一时间并发的请求的分布。

    比如一秒钟有一万个请求,集群有10台机器。那么如果这一万个请求能均匀分布到10台机器上,那么是最充分利用集群的方式。如果一秒钟有一万个请求,都打到同一个机器上,另外9个就是闲置着,整个集群的吞吐量就受制于单台机器了。

    读取也是一样的道理。

    2019-09-17
  • 闫飞
    超级厉害👍
    2019-08-13
  • MIKE
    最终都还是要靠类似hash的方法实现数据存储的均匀分布

    作者回复: 兵来将挡,水来土掩。Hash的水平扩展性比较好。Redis的集群解决方案和Aerospike如出一辙,大家在这方面都是有共识的。

    个人见解,除非是TSDB这种对数据顺序访问有刚需的场景,否则尽量不要假设数据是排序的,太累太烦。

    2019-07-31
  • rubylalala
    优秀

    作者回复: (-:

    2019-07-29
收起评论
其他推荐
33:16
PerfLabs: 以Cloud Native的姿势进行应用测试和调优
乐鸿辉 携程高级研发经理
免费
38:40
NBF:新零售服务开放的Serverless架构与深度实践
冯微峰 阿里巴巴高级技术专家
免费
42:37
诗和远方:蚂蚁金服Service Mesh深度实践
敖小剑 蚂蚁金服高级技术专家
免费