首页 > 其他

数据库数量级提高怎么优化 为什么php不适合做计算密集型业务?

为什么php不适合做计算密集型业务?

php,即"超文本预处理器"是一种通用的开源脚本语言。php是一种在服务器端执行的脚本语言,类似于c语言,是一种常用的网站编程语言。php的独特语法是c、java、perl和php自己的语法。有利于学习,应用广泛,主要适用于web开发领域。

1.优点:开源、免费、快速【程序开发快、运行快、技术学习快】

1)跨平台,性能优越,与linux/unix结合时比与windows结合时强45%,与许多免费平台结合时非常经济,如lamp(linux/apache/mysql/php)或famp(freebsd/apache/mysql/php),或者如果数据应用足够大,可以考虑换成postgresql或oracle,支持n种数据库。(编号10)

数据库数量级提高怎么优化 为什么php不适合做计算密集型业务?

2)语法简单,学c和perl很容易,部分和asp差不多。有成熟的开发工具,如nuphped、zendstudio等。,而eclipse可以在linu台下使用。

3)目前支持主流技术,如webservic::db作为数据库抽象层,用smarty或者smarttemplate作为模板层,如果是php5.1就用pdo(php数据对象)访问数据库。

5)有很多成熟的框架,比如phpmvc,prado,cake等等,支持mvc,类似事件驱动的框架,像rubyonrails这样的快速开发框架,足以满足你的应用需求。

6)php5有成熟的面向对象体系,可以适应基本的面向对象要求。适合开发大型项目。

7)有成熟的社区支持php的开发。

8)目前很多大型应用都使用php,比如淘宝、雅虎、163、新浪等大型门户,很多都选择php作为自己的开发语言,所以大型门户都可以选择,我觉得够你用了。

9)有很多开源框架或者开源系统可以使用。比如大家熟知的开源框架有zendframework、cakephp、codeigniter、symfony等。,开源论坛包括discuz!、phpwind等。、开源博客wordpress、开源网店系统如ecshop、shopex等。开源sns系统如uchome、thinksns等。

10)低成本(linuxapachemysqlphp内核)

2.不足之处

1)函数命名不规范驼峰法和滑移线,传递参数的位置不一样,大家都知道。

2)单线程;php本身一直是单进程程序;虽然phpspthreads扩展早已存在。但是不够稳定,运行起来会莫名其妙的挂掉;php扩展都是用c写的,也就是说任何一个有线程竞争资源控制问题的扩展都能让整个一个死掉。

3)核心异步网络不支持(当然linux中只有同步无阻塞网络模型)。然而,缺乏这一点使得开发能够承受大并发的网络应用程序变得困难。传统网络模型和io都被阻塞。这个基本的编程实践是一个进程(或线程)响应一个用户链接请求。所以不可能像实时网游那样完成需要上千个网络连接的任务。虽然php也有libevent和eio扩展在一定程度上弥补了这一点,但感觉不是那么完美。

4)只支持web开发,制作不方便。exe文件、桌面应用程序和手机程序。

5)不适合做爬虫,自动运行脚本和科学计算项目,这种语言的基本框架也不适合,虽然有很多实现。

6)后期维护困难。后期提速的空间有限。

在对php有了大致的了解之后,让让我们理解为什么php很慢。

php的慢是相对于c/c级别语言而言的。事实上,php语言最初的设计并不是用来解决计算密集型的应用场景。我们大致可以理解为php为了提高开发效率而牺牲执行效率。

我们知道php的一个很大的特点就是弱类型化,也就是我可以随意定义一个变量,随意赋给各种类型的数据。以int整数为例,在c语言中:

intnum200//通常是4个字节。

但是,如果php定义了相同的变量,实际对应的存储结构是:

这个结构将比c变量占用更多的内存,c变量在php中定义如下:

200澳元;//这个变量实际上会比c变量多占用很多倍的存储空间。

事实上,对于php来说,无论存储什么类型的数据,都是通过上面提到的"灭口"结构。为了兼容php程序员变量类型,php对开发者友好,但对执行引擎残酷。单个变量的内存消耗可能不明显。一旦使用php数组,复杂度指数就会上升(数组的实现是hashtable)。然后,当zendengine执行时,它将这些php代码编译成操作码(php中间字节码,格式有点类似于汇编),由zend引擎逐行解释执行。

无论是字符串连接操作或数组的简单修改。;几乎是amp的节奏php程序员的一句话和zendengine"。所以php相对于c来说,同样的操作消耗更多的cpu、内存等系统资源。另外还有内存自动回收,变量类型判断等等,都会增加系统资源的消耗。

比如我用纯php实现的快速排序函数和原生排序函数,对一万个整数进行排序,进行耗时的比较。结果如下:

原生sort需要3.44ms,而我们自己的php函数sort需要68.79ms我们发现两者的实现效率差距巨大。我的测试方法是计算函数执行前后的时间间隔,而不是整个php脚本从开始到结束的时间。php脚本的启动和关闭过程本身就有一系列的初始化和清理工作,也会占用大量的时间。

一般来说,php执行效率的排名是:

最快的是php语言结构(isset,echo等。),php语言的一部分(它们根本不是函数)。

那么越快就是php的原生和扩展功能。php扩展,基于zendapi,用c实现的功能,执行效率和c/java属于同一数量级。

什么?;真正慢的是我们通过php编写自己的代码和函数。比如我们用纯php实现的比较重的框架,因为框架本身的模块比较多,明显会拖累语言层面的执行效率,占用内存比较多。(国内的yaf框架是用扩展的实现的,所以执行效率比纯php编写的框架快很多。

一般来说,我们不。;不推荐用php实现逻辑复杂的计算类型的功能,尤其是在web系统流量比较大的场景下。所以php程序员应该对php的各种原生函数和扩展有广泛的了解,在具体的功能实现场景中寻求更多的原生解决方案(原生接口或扩展),而不是写一堆复杂的php代码来实现这类功能。

如果有足够的php扩展开发实力,将这类业务功能改写成php扩展也会大大提高代码的执行效率。这是一个非常好的方法,广泛应用于php优化。但是自己写的php业务开发的缺点也很明显:

扩展开发时间长,需求变化时修改复杂。写的不好可能会影响web服务的稳定性。(比如apache的worker模式,在多线程场景中挂起会影响到同一个进程中的其他正常子线程。如果是多线程web模式,写扩展也需要支持线程安全)

当扩展php版本升级时,您可以可能需要做额外的兼容工作。

后的维护和接管成本也比较高。

其实在互联网一线企业中,比较常见的解决方案不是增加php的扩展,而是用c/c独立编写一个服务服务器,然后php通过sock

为什么头条能存储那么多视频文字,几亿用户,得多大存储空间啊?

堆叠硬盘。算法对于节省空间,减少带宽压力非常重要。

首先,技术当然足够强大!其次,你可能不理解的是,别人能处理这么多事情,为什么还能这么快呈现内容和内容的准确性!时效性!

根据我的理解,首先,并不缺少存储用的硬盘生产。即使狂潮兴起,企业几乎没有无法满足的硬盘需求。所以数据中心能存储这么多数据是没有问题的。

也许你会说这么多人同时访问硬盘速度不卡。那个关于硬盘的读写速度。硬盘阵列做出来后,硬盘的读写速度可以叠加。所以要达到这个要求,只要硬盘阵列技术做好就没有问题。

最后,你可能会问,这么多人上网怎么受得了?其实对于大型企业来说,服务器都是集群化的,也就是说一堆服务器在同事中运行。如果每台服务器都能负责几十万人的并发访问,只要增加足够多的服务器,就能应对更大数量级的用户群!

对于自己的眼光我只能回答这么多!希望能帮到你!

最不值钱的是存储。看个人硬盘的价格。一个t要400元,两个t要500多元,四个t要700多元。虽然专业存储更贵,但道理是一样的。存储量越大,单价越低。

最有价值的是算法,分布式数据库,分布式存储,可以让用户秒开。

当然储存量很大,但是分散在几个中心,几十万吨起,但是这个钱和他们赚的钱比起来不算多。

因为钱

在,idc最贵的就是带宽。

只要你有钱。

php开发框架函数语言

原文标题:数据库数量级提高怎么优化 为什么php不适合做计算密集型业务?,如若转载,请注明出处:https://www.lrccn.com/tag/12557.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「歌词网」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。