php 搜索工作经验小结

1.保证程序的响应速度要快,准:
    a.建表、写sql要注意性能方面的点
        建表结构尽量简单(单个表字段不要多,可以通过关键字段建扩展表和详细表,数据量太大的可以考虑分表)。常用查询字段并且数值分散度高的建索引写sql的时候:尽量不要出现子查询或查询结果作为临时表这样的结构,因为子查询的时候不会走索引,如果是一张大表会很慢;where条件的时候,将能过滤出最小结果的条件放在最前面,这样在执行过滤的时候,会数据量越来越小;注意联合索引的时候,联合索引里最左边的字段一定要出现在where条件中,才可以在想用联合索引的时候,保证运行;注意会导致索引失效的情况。
    b.合理使用缓存memcache
        对于不需要即时更新的数据,可以合理使用缓存(保证缓存存储的维度,设置合理的缓存时间,这里可以考虑到运用md5处理后的信息作为缓存的key)
    c.合理使用消息队列rabbitmq
        对于不需要即时写入数据库,但需要按照顺序写入数据库,且不影响读数据库的情况的数据,可以使用消息队列rabbitmq将一个时间段内的数据收集起来,然后统一写入数据库(这种数据要允许丢失,一旦rabbitmq异常,数据就写入不了)。
    d.合理使用搜索引擎solr
        搜索引擎solr是在建立文档索引后,便于程序搜索的。检索文档型索引比数据库快,所以在查询的时候可以合理选择是否需要用到solr索引。用到solr的可以从两个方向考虑:一个是分词(导入词库,在指定字段选择分词模式,query查询的时候就可以将输入的关键字进行分词后的检索了),一个是不分词(在指定分词的字段上查询
,query的时候将输入的关键字用""包起来,这样就不会分词,而是用整词模式的,类似是sql语句里的like中间模糊匹配一样)。

    e.对于触发场景必然发生的条件可以不用判断和容错,如果所有的语句都使用判断语句的话,不仅会出现大面积的if语句,也会影响性能。

    f.在php里面变量可以直接使用,不需要声明;所以在用完一个大的变量后,最好可以手动unset销毁该变量(php的变量在方法体结束前都不会自动销毁)。这种情况在for,if块中比较常见(在if,for中定义的临时变量在该块外还可以应用也就是存在着占用内存块)。

2.保证程序的健壮性

    a.涉及到dao查询,http连接,扩展服务器连接等场景的操作代码,最好都用try-catch监视起来。

    b.涉及到一些应用变量空(未定义,null和空值)的场景。需要在它被应用的时候,尽量先判断非空(保证程序不会因为空的情况报错,例如拼接sql的时候)

    c.合理设置默认值,在处理一些业务场景比较复杂的case的时候。可能因为没包含某些场景导致流程走错的情况,这时候可以设置默认值,走默认情况(当然这个是需要合理设置,也就是有些时候需要在出现新场景的情况不容进去而是让它报错,便于自己考虑新场景的流程)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值