对象关系映射(Object Relational Mapping 简称ORM)允许你把数据库中的数据 当成一个PHP对象来操纵和控制。一旦你定义了ORM和你的数据库中数据的关系,那么无论你用任何你喜欢的方式操纵数据,以及保存结果到数据库,都不需要使用SQL语言。通过创建按照配置约定的模型之间的关系,大部分从数据库中重复的编写创建,读取,更新和删除信息的查询可以被减少或者完全消除。所有的关系都能被自动用ORM库来处理并且你可以像使用标准对象属性一样访问相关数据。 注意:请确定你使用了最新的 3.0.* 来处理, 最新的版本可以访问 http://dev.kohanaphp.com/projects/kohana3/files 启用 第一步是 启用并配置 数据库(database)模块 Orm模块被包括在 Kohana3.0安装程序中。但是在你使用前需要你去启用它。 在你的 application/bootstrap.php 文件中修改调用的 Kohana::modules() 方法,按照下面的示例来包含 orm 模块。 Kohana::modules(array( ‘userguide’ => MODPATH.’userguide’, ‘database’ => MODPATH.’database’, ‘orm’ => MODPATH.’orm’, // orm access )); 没有必须的配置文件 定义模型 简单 如果你的数据库和名称约定( 在v2 版本的文档中有提到)匹配并且你不使用pdo链接,模型可以像这样简单的定义: class Model_Account extends ORM { } 定制 一些基本模型属性的定义: class Model_Account extends ORM [...]
最近一直在做Web数据分析的项目,调用大量的mysql数据库数据,又对其进行计算,用的全是lamp技术,只因为就会lamp开发。 我想大多数从事Web开发的人员都应该是如此,由于Web程序开发简单,不管是asp,php,jsp,只要会基本的Web程序语言,对数据库调用,再加上一个Web主机、Web服务,就可以开发自己想要的网站程序了。因为上手简单,互联网运用得到很大的发展,从事Web开发的人就相当多了。 我这个非计算机专业的大学生,也就这样从事了Web开发。工作了三年,最近又用lamp 对数据做了大量的运算,这来说说对lamp技术,php的了解,讲讲他们的功能所在。 1.软件开发和Web开发 说到软件开发,大家立马会说java.我没有学习过java,但知道java是软件开发语言必选。下图是Tiobe发布的2011年5月编程语言排行。 java第一,可见java语言要软件开发的重要地位。 PHP有些下降,排名第五,但也说明其语言的地位比较重要。PHP 主要运用于Web开发,这一点目前是不可动摇的。 2.asp,php和jsp 对于新学者总是会比较这三种语言,每一种语言都有他有长处,不然就没有他存在的意思。 从上图也可以看出PHP的优势,其它两种语言都没有其中。目前人们说的较多的jsp比php运行要快,这点不要否认,可Web开发的意思在哪里。 Web开发要求的是开发周期短,运营维护成本低。jsp这点做的不好,他对硬件要求的要高一些,由于从java过来的,动不动就要用oracle数据库。php一般都用mysql数据库,安装的硬件要求相对较低。虽说mysql的单表空间在几十或几百M时,性能会急剧下降,可现行的网站,有几M的单表数据存储是能满足需求的,我的lampblog博客,发了三四百篇文章,算个小有流量的博客,也就用了8.5Mb,单表最大7Mb,网站访问速度还是很稳定的。 还有一点要说,就是php开发的速度快,启用一个现成的框架,配置一下数据库连接,造几个前端模版,很快一个网站就出来了。 3.php的框架 说到快速开发,大家都会用框架,因为框架把布局都已定好,只用填内容就好了。国内国外的的框架比较多,较出名的有Zend Framework,CakePHP,他们都开发了很多功能,用户不用写简单的功能,只要用调用他的功能,写入自己的流程序好了。 目前我正在用的是kohana3,他的优点是小巧、安全、易扩展,前面提到的框加安全因该不是问题,功能也比较强大,可问题出在性能上,因为开发了太多的功能,调用的程序太多,性能损失较大。kohana3小巧,定义了很好的架构,具备了其本的功能,安全没得说,很好的考虑了扩展问题,不管是加载第三方程序,还是自己重写自己的功能,都是很方便的,所以我们团队选择了他。 4.php的兄弟:perl ruby python perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl 象C一样强大,象awk、sed等脚本描述语言一样方便。Perl 一般被称为“实用报表提取语言”,php语言也可以扩展perl的代码库。 Ruby 语言通常非常直观,按照编程人认为它应该的方式运行。加上Ruby on Rails的架构,很多人开始加入了行列。 Python具有非常简捷而清晰的语法特点,适合完成各种高层任务。 因为对这几种语言没怎么用,只是一些了解。php可能因为开发的比较早,功能较全,符合程序员大众的需求。这几个语言可只是在某上方面胜于php,后面这几个兄弟的竞争如何不得而知,但目前php使用是最多的。看看wordpress的用户就知道了。 5.php apache mysql 这是我要说的重点,再加上linux,就成了lamp技术,这里不讲如何安装使用,我的博客讲了很多了。 这两天在做大的数据分析计算,按照原有的网页请求流程,请示Url,apache收到请求处理,调用php程序运行,频繁操作数据库,这对大量的分析计算可是不行。 于是我查到了使用php命令行,也就是php-cli方式运行。用shell程序调用php命令行,绕过了apache,这下程序性能提升了很多倍。原来我用的是kohana2.3.4 ,由于对命令行方式支持不是很好,改进了kohana3,这个问题解决了,还有kohana3在性能上也比kohana2.3.4好很多。 这一步解决了很多性能问题。可再用xhprof (php性能分析工具)一分析,主要性能瓶颈转移到了mysql操作上。我用的是kohana3的ORM操作数据库,快速开发方便操作带来了很大的性能问题,于是把所有的SQL找出来,使用kohana3里的DB,这下性能又提升了很多。 之后再次分析性能,主要在数据库读取写入上了。这下开始优化数据库结构了,根据程序功能,合并或分割数据库,还有一个很重要的是创建索引优化SQL查询。以前觉得SQL查询没什么,正常的博客访问不都是提取数据并显示,这些都没有问题的。这次做大量数据分析计算,很多时间是写入、更新数据库,创建索引会加重数据库的写入。最后通过SQL的记录,性能的分析,每一个写入操作,至少要进行十几次的查询操作,性能问题在查询上。能过创建索引优化SQL查询,程序性能又提升好几倍。 这就是我目前所用到的优化技术。 6.shell和php 这是分析过程的一个小插曲。 前面也讲到用shell调用php,我也想到了用shell来处理数据不是更快。可以用shell调用mysql命令,提取数据库的数据,进行处理再写入数据库,效率不是更高。 想法行好,实现成了问题。shell的效率的确很高,他调用外部命令,执行文件操作都是很好的,可问题是对字符串的大量操作成了问题。awk的操作字符串功能实在有限,不能像php那样有大量的字符串操作函数,所以最后不得不放弃这个想法。同时用php操作字符串,读写文件也还是很快的,如果去掉数据库,我的程序性能又可以提升好几倍,可数据的操作不得不用数据库,还好这点小小的性能问题我还是可以接受的。
Date::fuzzy_span()方法用一个失真的方式返回所给出时间和现在时间之间的差异 用法 Date::fuzzy_span(159084000); 将返回 several decades ago Date::fuzzy_span(1258264800); 将返回 less than a month ago Date::fuzzy_span(1261720800); 将返回 in less than a month
Date::unix2dos()方法将UNIX格式的时间戳转换为DOS格式的时间戳 用法 Date::unix2dos(159084000); 将返回 2162688 转换DOS时间戳到UNIX格式 Date::dos2unix()方法将DOS格式的时间戳转换为UNIX格式的时间戳 用法 Date::dos2unix(2162688); 将返回 159084000
Date::span()方法用人类可读格式返回两个时间戳之间的时差 用法 echo Date::span(time(), time()+3600, ‘hours’); 将返回 1 Date::span(159084000, 227512800); 将返回 Array ( [years] => 2 [months] => 2 [weeks] => 0 [days] => 0 [hours] => 15 [minutes] => 24 [seconds] => 20 ) Date::span(159084000, 227512800, ‘months,days’); 将返回 Array ( [months] => 26 [days] => 0 )
Date::years()方法返回起始年和终止年中的年份组成的数组。使用当前年 +/-5就是当前年的 最大/最小 用法 echo Date::years(); 将返回 Array ( [2004] => 2004 [2005] => 2005 [2006] => 2006 [2007] => 2007 [2008] => 2008 [2009] => 2009 [2010] => 2010 [2011] => 2011 [2012] => 2012 [2013] => 2013 [2014] => 2014 ) echo Date::years(1975, 1981); 将返回 Array ( [1975] => 1975 [1976] => 1976 [...]
Date::months()方法会返回一个数组,该数组包括了1年内的月的递增集合。 用法 echo Date::months(); Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 [11] => 11 [12] => 12 )
Date::days()方法会返回一个数组,该数组包括了你给的月内的天的递增集合。 用法 echo Date::days(5); 将返回 Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 [11] => 11 [12] => 12 [13] => 13 [14] => 14 [15] => 15 [16] => 16 [...]
Date::adjust()方法调整了一个非24小时数字为24小时数字。 用法 echo Date::adjust(8, ‘PM’); 将返回 20 echo Date::adjust(12, ‘PM’); 将返回 12 echo Date::adjust(9, ‘PM’); 将返回 21
Date::ampm()方法会按你给的小时返回一个AM或者PM。只能用在24小时。 用法 echo Date::ampm(8); 将返回 AM echo Date::ampm(11); 将返回 AM echo Date::ampm(12); 将返回 PM echo Date::ampm(18); 将返回 PM