设为首页 收藏本站
查看: 1396|回复: 0

[经验分享] nosql类型的数据库:mongodb、Redis、Memcached的优化点

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-10-25 12:25:47 | 显示全部楼层 |阅读模式
  ---概念
  非关系型数据库也叫Nosql数据库,关系型数据库通过外键关联来建立表与表之间的关系,而非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。例如,以键值对key-value存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。而且仅需要根据key取出相应的value就可以完成查询,性能方面较关系型数据库有很大提升。
  ---特点
  模式自由
  –      不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。
  逆规范化
  –      不遵循范式要求,去掉完整性约束,减少表之间的依赖
  弹性可扩展
  –      可在系统运行的过程中,动态的删除和增加节点。
  多副本异步复制
  –      数据快速写入一个节点,其余节点通过读取写入的日志来实现异步复制。
  弱事务
  –      不能完全满足事务的ACID特性,但是可以保证事务的最终一致性。
  ---什么时候用nosql非关系型数据库
  数据库表schema经常变化
  数据库表字段是复杂数据类型
  高并发数据库请求
  海量数据的分布式存储
  以下汇总了3种nosql类型的数据库的优化
  第一、  mongodb
  mongodb面向集合存储,易存储对象类型的数据,适合大数据量的存储,主要解决海量数据的访问效率问题,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务最好不要和别的服务在一起。mongoDB 不支持事务。
  Linux下可以直接使用mongo进入mongod命令行
  优化的点:
  1,语句这块的优化
  a.    可以通过记录profile来找到执行时间长的语句
  (PS:Mongodb的profile就和mysql的慢查询类似,用于记录执行时间超过多少的语句。)
  db.getProfilingLevel()          # 获取profile级别
  db.setProfilingLevel(1,2000)# 设置profile级别
  profile级别有三种:
  –      0:不开启
  –      1:记录慢命令,默认为大于100ms
  –      2:记录所有命令
  查询profile记录
  –      db.system.profile.find();
  b.    找到执行时间长的语句后,explain解析这条语句,可以看到它有没有使用索引,使用了什么索引
  语句为:db.collection.find({xx:xx}).explain();
DSC0000.png

  c.通过explain的结果来优化查询语句
  2,连接数
  如果大并发下,连接数不够,会导致程序连接不上mongodb,需要调大连接数
  3,内存大点,或者把磁盘换成SSD
  可视化工具:mongoVUE      图形化界面监控:天兔lepus
DSC0001.png

DSC0002.png

  第二、   Redis
  redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。Redis和mongodb的区别是redis数据全部存储在内存中,使用磁盘仅用于数据的持久化,而mongodb数据是存储在磁盘上。
  优化的点:  
  1,连接数
  2,缓存命中率
  命中次数 / (命中次数 + 未命中次数)= 命中率
  命中率低的原因
  1key失效时间过短
  2,内存设置的过小,导致内存中数据存满,redis自己清理了一些key,再去用key的时候,就找不到了
  命令监控:(info命令)
  
DSC0003.jpg

  
  可视化工具:RedisDesktopManager   图形化界面监控:天兔lepus      
DSC0004.jpg

  第三、Memcached
  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而大大提高读取速度。
  优化的点:
  1,连接数
  2,缓存命中率
  命中次数 / (命中次数 + 未命中次数)= 命中率
  命中率低的原因
  1key失效时间过短
  2,内存设置的过小,导致内存中数据存满,redis自己清理了一些key,再去用key的时候,就找不到了
  命令监控:(stats命令)
  图形化界面监控:windows下修改phpmemcache.php(然后放到apachehtdocs工作目录下,如果是lampp的话:/opt/lampp/htdocs)
DSC0005.png

  然后访问:http://IP地址:11211/mem/phpmemcache.php    root   root/123456(根据自己的设置)
DSC0006.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626354-1-1.html 上篇帖子: centos6.6部署Mongodb数据库主从同步 下篇帖子: 关于 redis、memcache、mongoDB 的对比
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表