php大数据怎么处理,PHP如何防止向数据库插入相同的数据?
为你的每一次提交的数据生成一个唯一的uniqid,插入数据前,先判断一下这个uniqid是否存在,如果存在就删除它,后面做插入操作,如果不存在说明表单已经失效,提示用户表单失效,当然这个地方在真正的高并发下面会有问题,比如都判断存在,但是在删除的时候都会去删除,除非你可以得知删除的结果,比如采用redis来存储uniqd就可以得知删除结果,因为redis都是原子操作
PHP后台顺序输出数据与前端交互?
建议使用datatables,数据源采用ajax source,options配置中
{
bServer:true,
bPagination:true
}
完全就能满足你的需求。而且所有的增删查改在前后端均会同步。
其原理是前端通过分页参数获取数据后会在js的context下维护一个数组对象用于存放数据表,此表与后台数据完全映射。自带的search功能默认可以对前端js维护的数据表进行索引查询,也可以通过函数重载改写为直接使用select like来对后端整表进行查询。非常方便。
如果是后台产生数据更新而非前端主动产生,有几种方法:
1、ajax source设置timer自动更新,系统负担与timer的频率成正比;
2、使用部分浏览器支持的websocket建立一个长连接,更新后通知前端;
3、使用部分浏览器支持的notifications功能
web开发技术日益更新不进则退,我的项目更新日志里有很多都是对技术框架的更新log,并且效果卓著。举例说明,我的项目中最早使用的datatables版本是1.10,没有使用ajax source进行分页读取数据库,而是全部读取后前端分页。在数据量增大后效率极具下降。前后端均加上时间打印后发现,PHP+mysql的总用时为0ms,而前端建立js数据表花了近10s。于是前往官网查看优化方式,看到版本已更新为1.13则顺手更新了整个模块,没想到之前的近10s耗时随着这次更新降到了几百ms的级别,瞬间解决了效率问题。开源的强大就在于你不是一个人在战斗,你遇到的问题,别人也会遇到,可能早就解决。
一般用哪些工具做大数据分析?
在推荐工具之前,我们要先把数据可视化和 信息可视化分清楚,狭义上的数据可视化指的是将数据用统计图表方式呈现,而信息可视化则是将非数字的信息进行可视化。
我们常常听说的数据可视化大多指狭义的数据可视化以及部分信息可视化。根据数据类型和性质的差异,经常分为以下几种类型:
统计数据可视化:用于对统计数据进行展示、分析,一般都是以数据库表的形式提供,常见的有 HighCharts、ECharts、G2、Chart.js 、FineBI等等;关系数据可视化:主要表现为节点和边的关系,比如流程图、网络图、UML 图、力导图等。常见的关系可视化类库有 mxGraph、JointJS、GoJS、G6 等;地理空间数据可视化:常见类库如 Leaflet、Turf、Polymaps 等等;还有时间序列数据可视化(如 timeline)、文本数据可视化(如 worldcloud)等等;然后下面我再来盘点几个大数据可视化常用的工具:
一、D3D3.js 是一个基于数据操作文档的 JavaScript 库。 D3 可以将强大的可视化组件和数据驱动的 DOM 操作方法完美结合。
D3 的优劣:
强大的 SVG 操作能力,可以非常容易的将数据映射为 SVG 属性集成了大量数据处理、布局算法和计算图形的工具方法强大的社区和丰富的 demoAPI 太底层,复用性低,学习与使用成本高D3 没有提供封装好的组件,在复用性、易用性方面不佳,社区里有很多基于 D3 的可视化组件库:
nvd3.js: 基于 D3 封装了常见的折线图、散点图、饼图,功能比较简单dc.js: 除了提供了常见的图表外还提供了一些数据处理能力c3.js: 一个轻量级的基于状态管理的图表库D3 有着 Stanford 的血脉渊源,在学术界享有很高声誉,灵活强大使得它成为目前领域内使用最广泛的可视化类库,但偏底层的 API 和数据驱动模式,使得上手 D3 存在一定门槛,基于 D3 的工程实现上需要自己考虑和处理更多内容,如动画、交互、统一样式等,研发成本较高。
二、FineBI简洁明了的数据分析工具,优点是零代码可视化、可视化图表丰富,只需要拖拖拽拽就可以完成十分炫酷的可视化效果,拥有数据整合、可视化数据处理、探索性分析、数据挖掘、可视化分析报告等功能,更重要的是个人版免费。
评价:
FineBI做到了自助式分析,图表类型丰富,数据分析功能较强大,钻取,筛选,分组等功能都有。但是对于普通没有IT基础的人来说,要想真正熟练地掌握finebi,还是有一定的难度的,需要花上几天,但是这个难度相比Excel的VBA学习还是低不少的。
三、HighChartsHighCharts 是一个用纯 JavaScript 编写的图表库, 能够简单便捷的在 Web 应用上添加交互性图表。这是在 Web 上使用最广泛的图表,企业使用需要购买商业授权。
HighCharts 的优劣:
使用门槛极低,兼容性好使用广泛,非常成熟样式比较陈旧、图表难以扩展商业上使用需要购买版权这是图表界的 jQuery,在世界范围内是使用最多最广的一个可视化类库,但整体图表设计比较陈旧难以扩展,同时商业公司使用需要按照使用人数购买版权,比较昂贵,阿里有购买过,目前已不推荐使用。
四、EChartsECharts 缩写自 Enterprise Charts,企业级图表,开源来自百度数据可视化团队,是一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器,底层依赖另一个也是该团队自主研发的轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。ECharts 是目前国内唯一一个入选 GitHub 全球可视化榜单的开源项目,2w+ star 全球排名第三,社区活跃,覆盖主流前端框架和 8 种编程语言的扩展,目前国内市场占有率处于绝对领先地位。
ECharts 的优劣:
丰富的图表类型,覆盖主流常规的统计图表配置项驱动,三级个性化图表样式管理移动端优化,交互和布局适配,按需打包深度的交互式数据探索地理特效(百度迁徙,百度人气,公交轨迹等效果)灵活性上不如 Vega 等基于图形语法的类库复杂关系型图表比较难定制ECharts 能很好满足传统图表需求,但在高度灵活多样化的可视需求面前,需要另寻出路。
五、LeafletLeaflet 是面向移动设备的交互式地图的 JavaScript 库。 测量的 JS 只有大约 38 KB,它具有大多数开发人员需要的所有映射功能。
Leaflet 的优劣:
专门针对地图应用mobile 兼容性良好API 简洁、支持插件机制功能比较简单,需要具备二次开发能力地图专用,其他领域使用不上。目前 Google 地图、高德地图、百度地图都拥有自研的 JS 库。
六、VegaVega 是华盛顿大学计算机学院数据交互实验室(IDL)开发的一套交互图形语法,定义了数据到图形的映射规则、常见的交互语法和常见的图形元素,用户可以自由使用 Vega 语法进行组合构建出各种各样的图表。
Vega 的优劣:
完全基于 JSON 语法,提供从数据到图形的映射规则支持常见的交互语法复杂的语法设计,使用和学习成本很高Vega 在学术上有着比较完美的语法设计,但在工程易用性上比较欠缺。
七、deck.gldeck.gl 是 Uber 可视化团队基于 WebGL 开发的面向大数据分析的可视化类库。
deck.gl 的优劣:
主要以 3D 地图可视化为主,内置了地理信息可视化常见的场景支持大规模数据的可视化需要具备 WebGL 的知识,层的扩展比较复杂deck.gl 在 3D 地图领域效果很赞,在其他领域不适用。
基于 Web 的可视化工具还有很多,上面是几个一直以来使用比较多的类库工具,以及最近涌现的一些新秀。各个类库工具特性不同,定位不同,关键要看应用场景的适用性。
八、AntVAntV 是蚂蚁金服全新一代数据可视化解决方案,主要面向从事数据可视化应用相关的工程师和设计师,目前包括:
底层绘图引擎 G:目前基于 canvas 2d 提供基础绘图能力,基于 webgl 的版本正在规划中;可视化语法类库 G2:一套数据驱动的高交互可视化图形语法,提供了丰富的图表、专业的数据处理能力、便利的扩展方式和强大交互能力;关系可视化类库 G6:专注解决流程与关系分析的图表库,集成了大量的交互,可以轻松的进行动态流程图和关系网络的开发;移动端图表类库 F2:是一套精简、高效易扩展的移动端图表库,适于对性能、体积、扩展性要求严苛的移动应用场景下使用;可视化设计指引与使用规范:统计图表以及常用场景下的可视化设计指引和使用规范;九、G2G2 (The Grammar Of Graphics) 是一个由纯 JavaScript 编写、强大的语义化图表语法类库,提供了一整套图形语法,可以让用户通过简单的语法搭建出无数种图表,并集成了大量的统计工具,支持多种坐标系绘制,可以让用户自由地定制各种图表。
G2 的优劣:
简单、易用完备的可视化编码强大的扩展能力语法需要一定学习成本十、G6G6 是一个由纯 JavaScript 编写的关系数据可视化类库,提供了基本的网图和树图功能,并支持多种内置布局。G6 提供了查看和编辑两种视图,开发者可基于 G6 对关系图快速进行二次开发。
G6 的优劣:
简单的语法,强大的交互能力支持多种视图,易于使用的编辑视图强大的边和节点的扩展能力现阶段上层封装比较少,使用成本比较高为什么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种数据库。(N >= 10)
2)语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。
3)目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。
4)有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。
5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。
6)PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。
7)有成熟的社区来支持PHP的开发。
8)目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。
9)有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客 WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
10)使用成本低 (linux apache mysql php内核)
2.缺点
1)函数命名不规范 驼峰法和下滑线,传参位置不一 你知道的
2)单线程 ; PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉
3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善
4)只支持web开发,不方便做 .exe文件,不方便做桌面应用程序. 不方便做手机程序.
5)不适合做爬虫、自动运行脚本.科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。
6)后期维护困难。后期提速空间局限性较大。
在对PHP有一个大致的认识以后,我们来了解一下为什么说PHP慢?
PHP的慢是相对于C/C++级别的语言来说,事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。
我们知道PHP一个很大的特点,就是弱类型特性,也就是说,我可以随意定义一个变量,然后给它随意赋值为各种类型的数据。以一个int整型数字为例子,在C语言中:
int num = 200; // 通常是4字节
但是,如果是PHP定义了一个同样的变量,实际对应的存储结构则是:
这个结构体将会占据远比C变量多得多的内存,PHP中定义方式如下:
$a = 200; //这变量将实际占用对比C变量很多倍的存储空间。
其实对PHP来说,无论存储什么类型的数据,都是用上述“通杀”的结构体实现。为了兼容PHP程序员的变量类型“乱入”,PHP做到了对开发者的友好,但是对执行引擎很残酷。单个变量内存消耗可能还不明显,一旦用到PHP的数组等,则复杂度指数上升(数组的实现是HashTable)。然后,Zend引擎执行时,将这些PHP代码编译为opcode(PHP的中间字节码,格式有点类似于汇编),由Zend引擎逐行解释执行。
无论是字符串的连接操作,还是数组的简单修改等,几乎都是“PHP程序员一句话,Zend引擎跑断腿”的节奏。因此,同样的操作,对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外,还有内存自动回收、变量类型判断等等,都会增加系统资源的消耗。
例如,我用纯PHP实现的快速排序函数和原生sort函数,排序10000个整型数字,来做一个耗时对比,结果如下:
原生的sort耗时3.44 ms,而我们自己实现的PHP函数sort则是68.79 ms。我们发现,两者执行效率差距巨大。我的测试方式,是计算函数执行前后的时间间隔,而不是整个PHP脚本从启动到结束的时间。PHP脚本启动和关闭过程,本身有着一系列的初始化和清理工作,也会占据不少的耗时。
通常情况下,PHP执行效率的排行是:
最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。
然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于Zend API之上,用C实现的功能,执行效率和C /Java是属于同一个数量级的。
真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架。
在一般情况下,我们并不推荐用过PHP实现逻辑复杂计算类型的功能,尤其是Web系统流量比较大的场景下。因此,PHP程序员应该对PHP的各种原生函数和各类拓展有一个比较广泛的了解,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或者拓展),而不是自己写一堆复杂的PHP代码来实现这类型功能。
如果有足够的PHP拓展开发实力,将这类型业务功能重写为一个PHP拓展,也会大幅提升代码的执行效率。这是一个非常不错的方式,也被广泛应用PHP优化中。但是,自己编写的PHP业务拓展的缺点也很明显:
拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)
拓展在PHP版本升级的时候,可能需要做额外的兼容工作。
人员变动后的维护和接手成本也比较高。
实际上,在互联网一线企业中,更常见的解决方案,并非增加PHP拓展,而用C/C 独立写一个服务server,然后PHP通过socket和服务server通信来完成业务处理,并不将PHP本身和业务耦合在一起。
不过,Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(例如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。
如何使用phpMyadmin优化MySQL数据库?
phpMyadmin仅仅是一个数据库管理工具,与Mysql数据库优化应该是很松耦合的。下面简单谈谈MySql数据库的几个优化点:
1、优化SQL语句比如尽量少用"select * from ...",需要什么字段返回什么字段,可以有效节省网络IO,缩短查询时间,还可以增加Mysql服务器的吞吐量。
再比如需要select最近一个月的数据,数据量比较大;拆成10次请求,每次请求select三天的,效果可能会好很多。
再比如使用join做表连接的时候,尽量用小表驱动大表,简单来说就是left join,左表是驱动表;right join 右表是驱动表;inner join mysql会自动做优化
学会使用EXPLAIN关键字辅助优化
优化SQL语句是数据库优化的首选;
2、优化表结构比如字段类型,可以用数字的字段,尽量不要用Text,比如订单Id一般都是数据。
小字段能满足要求的,尽量不要用大字段
根据业务场景,在合适的字段上添加索引,提高搜索速度
适当的做字段冗余和缩减
3、表的拆分数据库表一般分为纵向拆分和横向拆分,纵向拆分就是将一个表按照列拆分成多个表,通过外键连接。横向拆分就是按照某个字段(比如:时间)做拆分。
数据库拆分对于数据量太大,或者QPS很大的场景,就需要分库处理。比如设置主库和从库,主库用于写数据,从库用于读数据
以上优化手段,部分可以借助phpMyadmin实现。
更详细的优化手段欢迎点击我的头像,关注我,查看我之前写的Mysql系列文章。
大家觉得这个回答怎么样呢??