热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node连接mysql数据库05

数据库:1.分类(按照最主要特征去分类)1)文件型数据库(就是一个文件,可以很方便的拷贝)不适合存储大量的数据。适合单机存储少量数据。access、sqlite(对系统占用空间极小

数据库:

1.分类(按照最主要特征去分类)

  1)文件型数据库(就是一个文件,可以很方便的拷贝) 不适合存储大量的数据。适合单机存储少量数据。

  access、sqlite(对系统占用空间极小)

  2)关系型数据库:强调数据之间是有关系,功能很强大,但性能会下降。

  mysql、Oracle

  3)分布式数据库:可以把数据库安装在各个机器上,安全性是比较高的,一般会做备份,一般会备三份,如果全丢的可能性不太大,这时候如果任何一台机器死了,数据没法恢复,你再放一台新的机器上去,他会自动的把数据同步过去。

  特点:单机的性能不一定好,但是可以通过堆积器来堆堆堆,最后总体的性能吞吐量非常的高

  mongoDB

  4)NoSQL:砍掉了复杂的查询,无法支持复杂的查询,不用那么多的功能,但是性能高,一般系统的性能高低都在数据库这。支持高并发。

  memcache、redis

一个项目中可以根据需要,使用不同的数据库。比如:客户端用sqlite用来缓存一些数据(包括提交失败的,包括用户断网的),置于后台,用Oracle或者mysql。还可以用redis当外壳,因为数据不可能都每次找mysql要(对mysql的压力很大),是用redis当缓存(存储最近一段时间的数据,热门数据等),这样就降低了主数据库mysql的负载。

如果比较简单的项目,就使用一种数据库就行了,比如mysql。

2.安全性

  注入攻击

3.操作

  管理型

  增删改查

管理工具:可视化操作数据库

  navicat

类型:

  数字:int

  文本: varchar  -> 短的字符串

       text  -> 大量字符串

索引的作用:

1.性能

  1)主键 : = 唯一 + 索引

  2)唯一 :Unique(不重复)

  3)索引:提高查询性能,但降低其他操作(新增和删除)的性能,更占空间

  4)全文索引:适合文本搜索

主键 = 唯一 + 索引

2.限制和约束

node操作数据库:

通常情况下,数据库和web前端机(不是指浏览器,说的是对用户直接提供访问的服务器),一般情况下,web前端机和数据库一定不是在一台机器上,为什么?

1)因为web前端机的风险更高,他会直接接受用户的访问,所以不会把数据库放在他上面去,否则很容易把数据库暴露出去  

2)一般情况下,web前端机很多,把数据库部署上去会涉及到分布式的各种事。

3)前端主机的资源消耗比较大(要做缓存,磁盘内存都比较忙)数据库放在前端机上性能会低

所以一般情况下,nodeJs和数据库之间都是通过网络来交换数据,因为他们不在一台主机上面。

nodejs操作数据库也是异步的

如果也是异步的,我们操作数据库的时候得想办法变成promise认识的状态,变成同步化。

node 安装数据库:

1) npm init -y    -> 初始化

2)npm i mysql -D ;  -> 安装  (这个安装的是mysql库的版本,而不是mysql服务器的版本)

node连接mysql的必要条件:

1.需要电脑上有mysql服务器(可以单独下载mysql,也可以用phpstudy,phpstudy中自带的有mysql)

2.npm 安装mysql的库,用于引入mysql模块,连接mysql数据库

3.可以用navicat数据库工具查看数据库(一般创建数据库,都用他,基本不在node中创建数据库,太麻烦)

 

 添加成功data会出现一个这样的信息: 一般里面的insertID最常用,返回给前端。

 

 接下来,我们要做一个前端填写用户名密码登录注册,后端收到数据进行校验,校验成功后存储到数据库:

前端:ajax发送数据,默认get方式

 后端:判断存储

 前端提交:

 数据库:存储到了xiaohong 这条数据

综上:我们其实有两个问题需要解决

问题1) 当同时连接数过多时,只有一个连接,一个卡住,其他都跟着等着,性能不好。

我们使用了一个叫做createConnection来跟服务器建立连接


let db = mysql.createConnection({ }),这样做是没问题的,但是有个小小的问题,你可以想象咱们现在的这个服务器是跟数据库之间是只有当前自己的一个连接,如果有几十个用户同时访问这个服务器,那么当前面有个用户的请求比较大,卡住了,那么这几十个用户的请求都得排队等着,为什么呢?因为这个db这个东西它一次只能执行一个请求,如果这一个请求没完,它下一次再请求会卡住。直到前一次完事,下一次才能开始,这个是它的问题,所以如果我们真想要提高操作数据库的性能,我们可以做连接池,何谓连接池呢?就是我跟服务器一次建立建立比如十条、五十条连接,需要请求的时候,从这个池子(其实就一个数组)里面拿出一个空闲的连接来,然后就用,等用完了,再把它放回去,这样的话就能保持连接一直存在,这样就既不用每次碰到请求还要现去连接,这样会慢,而且负载还重,也不会轻易的被卡主,当然有可能这十条、五十条连接都被卡住了,但总体来说还是比一条连接概率要低的多,所以我们要做 建立多条连接,并且还用完还要放回连接池等一系列的事,但是这些我们自己做显然不太可能,我们可以用一个叫做createPool的方法,这个createPool可以自动的帮我们建立一个连接池,不需要我们来管,他会自动的替我们管理这里面的连接。当然他比createConnection连接也多了一个参数:connectionLimit : 10(最大连接数,可以是任意值,但是值越大会加重数据库服务器的负担,通常10就够了) ,这个参数默认值就是10,如果不额外修改,就可以省略掉这个参数
mysql.createPool({
  connectionLimit : 10,  //默认10,这个参数可以省略
  host : '',      //域名 
  user : '',     //数据库账号
  password : '', //数据库密码
  port : '',    //如果默认端口号3306,port参数可以省略,加了就可以自己定义当前连接数据的端口号(与要连接的数据库保持一致)
  database : '' //连接的数据库名字
})

 问题2)操作数据库中全都是用回调函数,虽然可行,node中操作数据库的机制也是这样的,但是太麻烦了,尤其是复杂操作

解决办法:co-mysql ,他是另外一个模块,这个模块没有办法独立的来使用,他实际上不是一个mysql,他实际上是一个mysql的一个封装,可以把普通连接封装成可以做异步调用的连接。 

使用要先安装: npm i co-mysql -D ;

引入:const co=require('co-mysql');

使用:把原来的连完的连接包裹一下;


      let cOnn=mysql.createPool({});
      let db=co(conn);

 因为用了async和await 我们用try catch包裹,捕获错误信息。

综上:对于用户名和密码的校验注册和登录都要用到,所以我们要把他提出去,引入进来。

 

 

 

 



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 缓存 分布式锁 Redis
    分布式锁现在Redis基本上没家公司都在使用,只是各自使用的场景不以,但Redis最出名的还是做为缓存服务器,提搞服务器的的吞吐量,下面我们来围绕这个作为缓存做一个总结今天的目标其 ... [详细]
  • SeMITechnologies正在使用矢量搜索引擎Weaviate构建的内容。SeMI的首席执行官兼联合创始人BobvanLuijt说,它是一种独特的AI优先数据库,使用机器学习 ... [详细]
author-avatar
手机用户2502911617_428
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有