服务器架构之性能扩展-第九章(10)

 

第九章Mongodb数据库

9.1mongodb入门

9.1.1 NoSQL入门

NoSQLnot only SQL的缩写,它指的非关系型数据库,是以key-value形式存储,和传统数据不一样,比如不遵循sql标准。随着大数据时代的到来,NoSQL有助于解决传统数据库扩展困难,读写慢,成本高,有限的支撑容量问题.因为它在扩展和性能方面做了提升,对于事务性的要求还不能代替传统数据库。目前新浪微博的redis数据库,视觉中国的mongodb都属于NoSQL数据库范畴。

9.1.2认识mongodb

 

Mongodb是一个介于关系数据库和非关系数据之间的产品,它语法类似javascript语言。数据是键与值的一种组合,格式如{age”:25}形式,数据以集合存储。目前已超过百家网站使用mongodb

9.1.3 mongodb的安装

首先到mongodb.org上下载相应版本。

Tar zxvf mongodb-linux-x86-2.2.2.tgz   //解压

Cd mongodb-linux-x86-2.2.2  //解压完毕后即成为可执行程序

 

9.1.4 启动mongodb

Mkdir /usr/local/mongodb

Mkdir /usr/local/mongodb/data

Rsync  -auvz /root/mongo-linux-ix86-2.2.0/bin/ /usr/local/mongodb/

Touch /usr/local/mongodb/dblogs

 

/usr/local/mongodb/bin/mongod  --dbpath=/usr/local/mongodb –logpath=/usr/local/mongodb/dblogs –fork  //启动mongodb

 

Echo /usr/local/mongodb/bin/mongod  --dbpath=/usr/local/mongodb –logpath=/usr/local/mongodb/dblogs --fork >>/etc/rc.local //开机启动

一般使用pkill mongod  //终止进程,避免使用kill -9杀死进程,因为容易造成mongodb死锁。

/usr/local/mongodb/bin/mongo  进入字符界面

9.1.5mongodb体系结构

Mongodb数据库不同于传统的关系数据结构,它包括文档,集合和数据三级结构组成。物理结构为一个ns文件一些数据库.0和数据库.1成。Mongodb数据类型,包括null、布尔、数字、字符串、数组以及对象六种数据类型组成。

9.1.6 mongodb基本命令

>Show dbs  //显示所有数据库

>db.dropDatabase();  //删除当前数据库

>use mydb   //建立新的数据库

>db.user.insert({name:”user1”,age:25}); //插入数据

>db.user.find();  //查看数据

>db.user.drop({name:”user1”}); //删除记录

>db.user.update({_id:1},{name:”user2”});  //修改记录

9.2  mongodb的高级操作

9.2.1 insert的操作

>db.user.save({name:”user2”});  //保存数据

saveinsert一般有同样的插入效果。 但是当主键id相同时,save便会只做修改不做插入的操作。

 

Db.cl.remove();删除所有记录,如果加上记录字段则删除相应字段。

批量插入数据

 Js方式插入数据

9.2.2 find查询的操作

Db.c1.find();查询语句

Find命令也可以指查找指定字段,字段值为1为真显示,为0为假。

条件查询,gt大于,lt小于,e等于,ne不等于,gte大于等于,lte小于等于,用$定义。

 

Sort用于排序排列,用sort排列,-1位倒叙,1位正序排列

Limit用来控制显示输出个数,skip用来排除前面多少个

in用来进行范围查找

$or或的查询,$nor非,orin区别是:or可以接不同字段,in需要接同一个字段。

插入数组,用elemMatch查找数组,代替post.title

查询控制两种方法

 

 

查询数组记录,必须在第二个字段进行

9.2.3 update更新的操作

Db.collection.updatecriteriaobjNewupsertmulti);

Criteria:用于设置查询条件的对象

Objnew:用于设置更新内容

Upsert:如果记录村子啊就更新它,否则新增一记录

Multi:如果多个符合条件的记录,只会更新第一个符合条件的记录

Upsert第三个参数,意思是如果字段不存在则增加该字段

 

$set可以用于改变源字段值或增加新字段

 

$inc字段每个年龄增加一岁,inc对字段曾进行增减值的更改

$unset删除字段,当age为真时删除字段

$push增加数组字段

$pop删除上条记录,如为-1则从前数,$pushAll一次插入多条记录

addToSet只能插入不同值记录

$addToSet$each一起用一次加入多个值

$pull删除数组指定值,$pullAll删除多个指定值

$rename更改字段名

9.2.4 创建capped collection固定集合

固定集合是固定大小的数据存储方式,它速度处理更快

Db.createCollectionc6{cappedtruesize10000max5}); //数据大小10kB,记录5条,填满了则取代前面的记录

Db.runCommand({convertTocapped:”test”,size:10000});

9.2.5 GridFS大存储类型

GridFS是一种大二进制文件,可以存储一些大文件。包含.files元数据对象和.chunks二进制块信息。

加载GridFS数据类型:

Cd /usr/local/mongodb/bin

Tar zcvf mongofiles.tar.gz  mongosniff

./mongofiles put mongofiles.tar.gz

Mongofile是进行文件上传下载的工具,put上传,get下载

9.3           mongodb性能管理

性能优化,如同大多数数据库一样索引可以很好地完成优化工作。可以通过explain()查看数据查询记录的次数。

9.3.1     mongodb的索引管理

>db.c1.ensureIndex({name:1});  //建立索引

>db.c1.getIndexes();  //查看索引

再执行explain()便可以看到次数变为8->1

Db.c1.dropIndexes();   //删除索引

9.3.2     profile慢查询

profile是一种慢查询日志功能。可以通过两种方式开启:

1、          启动mongodb是可以加上—profile=级别

2、          使用db.setProfilingLevel(级别,时间); 定义级别

0-:不开启;1-:记录慢查询;2-:记录所有密令

最后通过>db.getProfilingLevel();查看级别

9.3.3     mongodb优化方案

首先建立索引可以提高执行效率

其次使用limit();可以减少资源的消耗量

再次capped collection固定空间功能可以提高效率

再次,查询时指定字段而不是所有字段,提高速度

最后使用慢查询功能,优化语句。

9.3.4     mongodb性能监控

mongosniff命令可以监控数据库操作历史

Mongostat命令可以查看mongodb实时结果

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开始架构一套软件时,您可以遵循以下步骤,并注意以下问题: 1. 需求分析和规划: - 确定软件的功能和需求,明确目标受众和使用场景。 - 制定项目计划和时间表,分解任务和里程碑。 2. 技术选型: - 根据需求和团队技能,确定使用React作为前端框架、Node.js作为后端框架以及MySQL作为数据库的技术栈。 - 探索并选择适合的第三方库、组件和工具,如React Router、Express.js、Sequelize等。 3. 架构设计: - 设计前后端的架构,确定如何划分模块和组件,以及它们之间的交互方式。 - 定义前后端的API接口规范,包括请求方法、数据格式等。 4. 数据库设计: - 分析需求,设计数据库结构和关系模型。 - 创建数据库表,并定义表之间的关联关系和索引。 5. 前端开发: - 使用React进行前端开发,创建页面和组件,实现用户界面和交互逻辑。 - 与后端进行接口对接,调用API来获取和更新数据。 6. 后端开发: - 使用Node.js开发后端逻辑,处理业务逻辑、请求和响应。 - 定义API接口,处理前端请求并与数据库进行交互。 7. 数据库开发: - 使用MySQL创建数据库表和字段。 - 编写SQL查询语句,实现数据的增删改查操作。 8. 测试与调试: - 编写单元测试和集成测试,确保各个模块的功能正常。 - 使用调试工具和日志记录来排查问题。 9. 部署与上线: - 部署前端和后端代码到服务器或云平台。 - 配置服务器环境、域名和SSL证书等。 - 监控和优化性能,确保系统稳定运行。 在整个开发过程中,您还需要注意以下问题: - 安全性:确保对用户数据和敏感信息进行适当的保护,如使用HTTPS、数据加密等。 - 性能优化:优化前后端代码,减少加载时间和响应时间,提升用户体验。 - 异常处理:处理错误和异常情况,提供友好的错误提示和日志记录。 - 用户体验:关注用户界面的设计、易用性和响应式布局,确保在不同设备上都能良好展示。 - 可扩展性:设计系统以支持未来的扩展和功能增加。 - 团队协作:使用版本控制工具(如Git)进行代码管理,采用合适的开发流程和团队协作方式。 以上是一个大致的指导,您可以根据具体项目需求和团队情况进行调整和细化。在开发过程中,建议持续进行代码审查、测试和反馈循环,以确保软件质量和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值