加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

nosql类型的数据库:mongodb、Redis、Memcached的优化点

发布时间:2020-12-13 13:36:56 所属栏目:百科 来源:网络整理
导读:---概念 非关系型数据库也叫 Nosql 数据库,关系型数据库通过外键关联来建立表与表之间的关系,而非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。例如,以键值对 key-value 存储,且结构不固定,每一

---概念

非关系型数据库也叫Nosql数据库,关系型数据库通过外键关联来建立表与表之间的关系,而非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。例如,以键值对key-value存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。而且仅需要根据key取出相应的value就可以完成查询,性能方面较关系型数据库有很大提升。

---特点

模式自由

? 不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。

逆规范化

? 不遵循范式要求,去掉完整性约束,减少表之间的依赖

弹性可扩展

? 可在系统运行的过程中,动态的删除和增加节点。

多副本异步复制

? 数据快速写入一个节点,其余节点通过读取写入的日志来实现异步复制。

弱事务

? 不能完全满足事务的ACID特性,但是可以保证事务的最终一致性。

---什么时候用nosql非关系型数据库

数据库表schema经常变化

数据库表字段是复杂数据类型

高并发数据库请求

海量数据的分布式存储

以下汇总了3nosql类型的数据库的优化

第一、mongodb

mongodb面向集合存储,易存储对象类型的数据,适合大数据量的存储,主要解决海量数据的访问效率问题,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务最好不要和别的服务在一起mongoDB 不支持事务。

Linux下可以直接使用mongo进入mongod命令行

优化的点:

1,语句这块的优化

a. 可以通过记录profile来找到执行时间长的语句

PSMongodbprofile就和mysql的慢查询类似,用于记录执行时间超过多少的语句。)

db.getProfilingLevel() # 获取profile级别

db.setProfilingLevel(1,2000)# 设置profile级别有三种:

? 0:不开启

1:记录慢命令,默认为大于100ms

2:记录所有命令

查询profile记录

db.system.profile.find();

b. 找到执行时间长的语句后,explain解析这条语句,可以看到它有没有使用索引,使用了什么索引

语句为:db.collection.find({xx:xx}).explain();

wKioL1e9wV_BfoVcAAAXd0Aq03k980.png-wh_50

c.通过explain的结果来优化查询语句

2,连接数

如果大并发下,连接数不够,会导致程序连接不上mongodb,需要调大连接数

3,内存大点,或者把磁盘换成SSD

可视化工具:mongoVUE 图形化界面监控:天兔lepus

wKiom1e9wV_yC5zOAABYl29lzBE203.png-wh_50

wKiom1e9wV6QrdurAACwMpvYU7g432.png-wh_50

第二、 Redis

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。Redismongodb的区别是数据全部存储在内存中,使用磁盘仅用于数据的持久化,而数据是存储在磁盘上。

优化的点:

1,连接数

2,缓存命中率

命中次数 / (命中次数 + 未命中次数)= 命中率

命中率低的原因

1key失效时间过短

2,内存设置的过小,导致内存中数据存满,redis自己清理了一些key,再去用key的时候,就找不到了

命令监控:(info命令)

wKioL1e9vxawEdKjAABXokHeAT0627.jpg-wh_50

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

wKioL1e9wV2yYpOwAABHKEzF5fI083.jpg-wh_50

第三、Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而大大提高读取速度。

优化的点:

2,缓存命中率

命中次数= 命中率

命中率低的原因

1 2,内存设置的过小,导致内存中数据存满,命令监控:(stats命令)

图形化界面监控:windows下修改phpmemcache.php(然后放到apachehtdocs工作目录下,如果是lampp的话:/opt/lampp/htdocs)

wKiom1e9vxqSfc1pAACBfrtVdFc816.png-wh_50

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

wKioL1e9vxzDcoVDAADm_4zEUa4766.jpg-wh_50

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读