055 PHP知识点总结五

news/2024/7/3 21:12:17 标签: mysql, tp, 数据库, 设计模式, 缓存
40、nosql和Mysql的区别
   也即非关系型数据库和关系型数据库
目前世界上主流的存储系统大部分还是采用了关系型数据库,其主要有一下优点:
1.事务处理—保持数据的一致性;
2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上只有一处);
3.可以进行Join等复杂查询。
nosql在优势方面,主要体现在下面这三点: 
1. 简单的扩展:典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群; 
2. 快速的读写:主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作; 
3. 低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本; 
4. 
但瑕不掩瑜,NoSQL数据库还存在着很多的不足,常见主要有下面这几个: 
1. 不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本; 
2. 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像 SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等; 
3. 现有产品的不够成熟:大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语; 

41、在TP3.2中M方法与D方法的区别
虽然都是实例化模型对象,两者还是有区别的
D和M的区别主要在于
M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现
而D方法必须有创建模型类。
我们可以用下面两种方法去创建一个数据表的映射对象
第一种:$Test = D(‘Test’)
第二种:$Test = new Model(‘Test’)
虽然这两种都可以对数据进行select,insert,delete,udpate操作,在
数据验证上有很大的不同,
用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);
如果用第二种就没有了这个数据验证功能,需要手动验证。
D函数实例化的是你当前项目的Lib/Model下面的模块。
如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。
而M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。


42、对网站大访问量的优化方案
   提高访问速度。从硬件,最好从网站程序等等方面考虑。我给出以下几种方案:
1.尽量使用静态页,不要老使用动态信息调用。非常容易出问题
2.图片内容与网站数据尽量放在同一个服务器或者机房内。大量外链图片是会有问题的
3.一次又一次,一遍又一遍的分析流量走向,然后缩短浏览者浏览距离,举个例子,浏览者如果现在在你网站看一个新闻需要点5次鼠标,你就要缩短这个点击数。
4.一次又一次,一遍又一遍的分析,修改你的网站数据库结构,使其更加简洁。
5.提高网站的安防能力
6.买个好服务器,托管在一个好的机房!
43、网站高并发 大流量访问的处理及解决方法
  第一:确认服务器硬件是否足够支持当前的流量。 
普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化都不可能彻底解决性能问题。 
第二:优化数据库访问 
 前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站,静态化往往不能满足某些功能。 
 缓存就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用这些文件,而不必再访问数据库,技术如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大量SQL查询。最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作,如果要做到极致的话需要代码的优化; 
 第三,禁止外部的盗链。 
   外部网站的或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,自己就可以通过配置来禁止盗链。当然,伪造refer也可以通过来实现盗链,不过目前蓄意伪造refer盗链的还不多,可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。 
第四,控制大文件的下载。 
   大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。 
第五,使用不同主机分流主要流量 
   将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。 
第六,使用流量分析统计软件。 
  在网站上一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。我推荐使用的流量分析统计软件是Analytics(Google分析)。
45、主要运用到哪些缓存
一、数据缓存
这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
二、页面缓存
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)。
三、时间触发缓存
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存
四、内容触发缓存
当插入数据或更新数据时,强制更新缓存
五、静态缓存
这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
    六、内存缓存
     Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。redis 也可以做到。
46、php的设计模式
1、单例模式 2、工厂模式 3、观察者模式 4、命令链模式 5、策略模式
单例模式:
一个类在整个应用中,只有一个对象实例的设计模式
类必须自行创建这个实例
必须自行向整个系统提供这个实例
三私:私有静态成员变量、构造函数、克隆函数
一公:公共的静态方法
2、工厂模式
可以根据输入的参数或者应用程序配置的不同一创建一种专门用来实例化并返回其它类的实例的类
3、观察者模式
观察者模式提供了组件之间紧密耦合的另一种方法。
该模式:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)全本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。
4、命令链模式:
以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求,如果可以,该请求被处理,进程停止。
5、策略模式:
此算法是从复杂类提取的,因而可以方便地替换。
47.Mysql事务的特性
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
    事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,
       要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,
       并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
begin 开始一个事务
rollback事务回滚
commit事务确认
48、Mysql事务的应运场景
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

比如手机充值过程,支付宝金额减少,相应的手机话费增加,只要有一个操作不成功,则另外一个操作也不会成功

欢迎关注公众号:phpstory


http://www.niftyadmin.cn/n/1384735.html

相关文章

使用图像和多媒体

2019独角兽企业重金招聘Python工程师标准>>> <embed src"kongzhi.swf" width"564" height"287"></embed> <img src"image/fangjian.jpg" width"160" height"180" hspace"5" …

spring-security中的csrf防御机制(跨域请求伪造)

什么是csrf&#xff1f; csrf又称跨域请求伪造&#xff0c;攻击方通过伪造用户请求访问受信任站点。CSRF这种攻击方式在2000年已经被国外的安全人员提出&#xff0c;但在国内&#xff0c;直到06年才开始被关注&#xff0c;08年&#xff0c;国内外的多个大型社区和交互网站分别爆…

jquery 查找表格里的input_jquery列表文字input文本框输入关键词查找表单代码

特效描述&#xff1a;列表文字表单 文本框输入 关键词查找表单。代码结构1. 引入CSS2. 引入JS3. HTML代码jQuery关键词查找元素高亮代码伟大的吉萨金字塔The Great Pyramid of Giza (also known as the Pyramid of Khufu or the Pyramid of Cheops) is the oldest and largest …

Azure迁移之路--(1)本地虚拟机预算评估

Azure迁移服务评估本地工作负载以迁移到Azure。 该服务评估内部部署机器的迁移适合性&#xff0c;以Azure为基础&#xff0c;基于性能的大小&#xff0c;并提供在Azure中运行本地计算机的成本估算。 如果您正在考虑升级和迁移迁移&#xff0c;或者处于迁移的早期评估阶段&#…

056 PHP知识点总结六

49.Include和require的区别 require 外部文件如果不存在&#xff0c;会报错&#xff0c;后面的代码不会执行 Include 外部文件如果不存在&#xff0c;会报错&#xff0c;后面的代码继续执行include_once()和require_once()在加载之前要判断是否已经导入 50、索引的建立与使用索…

IAR for STM8 错误

一个IAR for STM8 v1.3 的工程&#xff0c;换到1.4版后出现如下错误 unable to allocate space for sections/blocks with a total estimated minimum size of 0x2341 bytes in <[0x008000-0x009fff]> (total uncommitted space 0x1f80). 在网上找到下面文章&#xff0c;…

[c++]setw()用法总结

setw()是用来控制后面的输出长度的。 使用需调用&#xff1a; include<iomanip> eg&#xff1a; cout<<setw(5)<<"s"<<endl; 结果为&#xff1a; s;//四个空格加一个s共占5个字符 setw()默认填充为" "(空格),可以通过setfill&a…

nes模拟器java版_【Java JDK和VirtuaNES(FC模拟器)哪个好用】Java JDK和VirtuaNES(FC模拟器)对比-ZOL下载...

fc模拟器virtuanes怎么录像打开游戏&#xff0c;在你想要开始录像的地方点上面的电影→录像(此时选择你想把录像文件放置的位置和文件名)&#xff0c;他就开始录了&#xff0c;在你想录的结尾再点电影→停止这个时候&#xff0c;在你选的位置就会出现一个.vmv文件&#xff0c;这…