请问多个功能需要同批数据是在程序里面遍历好还是sql数据库返回好

这个是没有一定之规的。如果能找到数据处理的时候,在某一步骤,数据集会归并,数据量大减,就在此分层。如果在某一个步骤之后,数据会整合成一个独立的完整业务内容,可以考虑在此分层。如果数据可能跨存储节点迁移,那么要谨慎设计数据库内业务逻辑。某些情况下数据库是大型项目的存储系统而非业务系统,它的内部逻辑和架构仅于数据本身的完整性有关。当然很多系统其实多少年也走不到这一步。你问的这些问题,如果脱离业务去猜测,并没有太多的通则可遵循,在大多数情况下,每一次跨越边界的数据尽量少,并且应该不破坏数据的完整性。
■网友
用redis、memcache这样的缓存把结果存起来是最通用的方法。其次是存内存里,但是这其实就是相当于是前一种方法的阉割版。不要每次从数据库里查。我假设你用的是mysql,《高性能mysql》里提到,尽量避免复杂的联查出现,如果可以,尽量在程序中保留中间值以减少SQL的复杂性。实际很多时候一条复杂的查询语句执行时间要长过迭代执行多条简单语句再在内存中拼接的时间。所以,建议你用一个redis存这些数据,它是专门用来解决这个问题的。你提到要在这个基础上做排序抽取和模糊搜索,这样的话,排序和抽取redis应该可以胜任,模糊搜索需要用专门的全文搜索工具,比如sphinx,我们这用的是coreseek,不过好像比较冷门,我也不太熟,就不多说了。
■网友
当你无法确定一个功能应该使用何种方案来实现时,那么请尝试所有方案,对比优缺点,再结合后3年的情况,做决定。
■网友
1 怎么查都一样,极端的方案可以所有逻辑都在数据库里做,也可以写个客户端把数据库下载一个副本,全在客户端做。30万条很少。2 缓存同上3 ZF项目做不大,别给自己找麻烦。如果你考虑高性能大规模的事情,赶紧换个工作。企业开发或者ZF项目,用数据库搞成存储过程比较讨喜,买数据库花多点儿钱显得高级。
■网友
缓存啊
■网友
这是个设计问题,没有到哪儿都适用的最优解在对业务理解中找开发效率和运行效率的平衡点
■网友
30万条,如果每条数据占用的存储空间不大,可以直接读到内存里面处理了。毫无疑问,内存的运算速度比在硬盘上面运行要快得多。如果数据量更大,就得用到数据仓库里面的一些知识了,比如先做ETL整合,或者更进一步做分布式处理,比如负载均衡、分表、分库之类的。


    推荐阅读