java所有基础知识Amazing Redisjava后端开发

Mongo、Redis、Memcached对比及知识总结

2018-09-27  本文已影响307人  Huang远

存储原理(持久化)


数据类型:


网络IO模型


由主线程进行 accept 连接,然后针对每一个连接创建一个线程进行处理,「thread per connection」这种模型:

(1)不适合短连接服务,创建/删除线程的开销是巨大的,体现在创建线程时间和至少1MB 内存的使用。

(2)伸缩性受到线程数的限制,200+线程数的调度对 OS 也是不小的负担。另外随着线程数的增加, 由于 mongo 本身业务的特性,对数据处理的并发度并不高,DB锁和全局的原子操作造成的 context-switch 也是急剧上升,性能反而下降,频繁的线程切换对于 cache 也不友好。

内存管理机制


2、在Redis中,并不是所有的数组都一直存储在内存中的。这是和Memcached相比最大的一个区别。当物理内存用完的时候,Redis可以将一些很久没用到的value交换到磁盘(注:这里用到的是Redis的Virtual Memory技术,Redis2.4版本之后已经不提倡使用了)。Redis只会缓存所有key的信息,如果Redis发现内存的使用量超过了某个阈值,将触发swap操作。swap操作根据规则计算出哪些key对应的value需要swap到磁盘,然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保存超过其机器物理内存大小的数据。当然,机器本身的内存必须要能够保存所有的key,毕竟这部分数据是不会被swap到磁盘的。同时由于Redis将内存中的数据swap到磁盘的时候,提供服务的主线程和进行swap的子线程会共享这部分内存,所有如果需要更新swap的数据,Redis将阻塞这个操作,直到子线程完成swap之后才可以进行修改。当从Redis中读取数据的时候,如果读取的key的value不在内存中,那么Redis需要从swap文件中加载对应的数据,然后再返回给client,这里就存在一个I/O线程池的问题。在默认情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会执行相应的操作。这种策略在client数量较小,进行批量操作的时候比较合适。但是如果Redis应用在一个大型的网站应用中,这显示是无法满足大并发的情况的。所以Redis允许我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。

3、当Memcached接收到客户端发过来的数据时,会根据收到数据的大小选择一个最合适的slab class,然后通过查询Memcached保存着的该slab class内空闲chunk的列表,就可以找到一个用于存储数据的chunk。当一条数据记录过期或者丢弃时,该记录所占用的chunk就可以被回收,重新添加到空闲列表中。

4、从以上过程中可以看到,Memcached的内存管理效率高,并且不会造成内存碎片,但是它最大的不足是会造成空间浪费。因为每个chunk都分配了特定长度的内存空间,所以变长数据无法利用这些空间。如下图所示,将100字节的数据缓存到128字节的chunk中,剩余的28个字节就被浪费掉了。


image.png

集群管理


image.png

2、Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

3、默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。

4、仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别(由备用节点提升为主节点)。仲裁节点是必须的。详见:http://blog.csdn.net/luonanqin/article/details/8497860

应用场景


参考:


http://blog.csdn.net/sun491922556/article/details/76423178?locationNum=1&fps=1

https://www.zhihu.com/question/32071167?sort=created

https://yq.aliyun.com/articles/71969

上一篇 下一篇

猜你喜欢

热点阅读