• mongodb,redis,mysql 简要对比


    本篇内容大部分不是原创,转载的会贴有链接。

    准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块。

    当下主流的要数NoSql数据库了,拥有强大的高并发能力。

    mongodb:

    它是一个内存数据库,数据都是放在内存里面的。

    对数据的操作大部分都在内存中,但mongodb并不是单纯的内存数据库。

    持久化方式:

    mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。

    然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

    至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。

    mmap详解链接:http://www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

    redis:

    它就是一个不折不扣的内存数据库了。

    持久化方式:

    redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。

    解密redis持久化:http://blog.nosqlfan.com/html/3813.html

    mysql:

    无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

    数据量和性能:
    当物理内存够用的时候,redis>mongodb>mysql
    当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。
    实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。
    但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
    mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。
    mysql,mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。
    当物理内存和虚拟内存都不够用的时候,估计除了mysql你没什么好选择了。
    其实,从数据存储原理来看,我更倾向于将mongodb归类为硬盘数据库,但是使用了mmap作为加速的手段而已。
    简说mmap:
    mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件进行操作。
    mmap 系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用。 read(),write()等操作。mmap并不分配空间, 只是将文件映射到调用进程的地址空间里, 然后你就可以用memcpy等操作写文件, 而不用write()了.写完后用msync()同步一下, 你所写的内容就保存到文件里了. 不过这种方式没办法增加文件的长度, 因为要映射的长度在调用mmap()的时候就决定了。
    下面是redis和mongodb的对比图:
  • 相关阅读:
    离线安装MariaDB 10.4.13
    YUM 的使用
    Crontab 定时任务
    静默安装卸载 ORACLE
    java 改变图片的DPI
    Java TIF、JPG、PNG等图片转换
    key可重复的Map
    集合对象去重
    Java创建TXT文件并写入 内容
    Java已知图片路径下载图片到本地
  • 原文地址:https://www.cnblogs.com/lovychen/p/5613986.html
Copyright © 2020-2023  润新知