新闻增加了Tag标识以后,在做搜索时,采用的是用新闻ID来查找Tag,索引按新闻ID生成;
可是有个实际的问题出现:Tag是随时在增加的;
于是,每当Tag变化的时候,就需要删除原来的新闻ID的索引,再重新创建新的索引
如此非常麻烦
冥思
既然Tag是变化的,那就应该以Tag来定新闻,按Tag创建索引
每当Tag新增的时候,就增加一个新的索引项,而不用改变已有的索引项
如此甚好
反过来想,事情就简单多了。
Keep smiling and never give up,even when things get you down
新闻增加了Tag标识以后,在做搜索时,采用的是用新闻ID来查找Tag,索引按新闻ID生成;
可是有个实际的问题出现:Tag是随时在增加的;
于是,每当Tag变化的时候,就需要删除原来的新闻ID的索引,再重新创建新的索引
如此非常麻烦
冥思
既然Tag是变化的,那就应该以Tag来定新闻,按Tag创建索引
每当Tag新增的时候,就增加一个新的索引项,而不用改变已有的索引项
如此甚好
反过来想,事情就简单多了。
写代码写久了,有的习惯就养成了
比如敲了一个大括号,顺手肯定会把另外一半也敲上
写php也写了有段时间了,一直都是<?php开头 ,然后顺手敲上 ?> 结尾
今天看Zend frameword的文档,才突然发现,原来
对于只包含有 PHP 代码的文件,结束标志(”?>”)是不允许存在的,PHP自身不需要(”?>”), 这样做, 可以防止它的末尾的被意外地注入空白并显示输出。
原来如此,之前在看Zf的例子代码的时候就在奇怪为什么没有?>结尾,一直没去好好想,现在刚明白
回头去修改类代码。
网站的项目里,Cache被大量使用,但是Cache的位置却一直让人很迷糊。
统计了我自己的几个项目里Cache的位置:
1、数据读取后立即缓存:
这种方式是最容易理解的方式,既然是要经常用到的数据,就先缓存,免得再重复的读取。
如果应用程序的层次简单,这种方式很好用。
2、数据操作层不缓存任何数据,在逻辑层缓存:
数据操作类里,可能会涉及到多表的操作,从各个表里取出数据,经过计算整理之后返回值。
这种方式,各个数据库操作读取的数据其实都是临时性的数据,如果都缓存起来,会浪费不必要的内存空间,因为我们需要的仅仅是最后的结果而已。
3、数据层和应用层都不缓存数据,页面展示层缓存:
在Web程序中,数据库的操作最终被反映到页面进行展示,数据操作和应用层的整合处理,都可以看做临时数据;
只需要把页面的各个部分按不同的策略缓存就行了,这样连应用层的计算时间都节省了。
以上三种Cache的方式,各有优缺点,不过通过我自己的实践发现,第一种Cache方式最好不要使用,后两种,需要搭配使用。