ipconfiger
2012-12-10 14:24:45 +08:00
符号分隔做冗余的方案基本上多此一举,如果要用性能来说事的话,加缓存即可,何必在查询的时候冗余到字段里,这样在添加新TAG的时候又要做不少事情来保持冗余数据的同步。正确的使用缓存的方法是缓存计算的结果非计算的中间步骤。冗余字段的方式就是典型的舍本逐末了。
假设一个场景,读取topic,同时读取topic相关的TAG,那么你应该缓存的是
select * from topic where id=id 和 select * from topic_tag where topic_id=id 的返回结果,甚至是这个页面渲染的结果,到时候直接输出页面就行了,序列化成字符串存储在一个列里的话,如果不缓存select * from topic where id=id 的结果,那么每次查询都有开销,而且这个方式还会增大每次查询的返回数据大小。如果缓存了整个逻辑的结果那么你冗余存的这一次就没什么意义,反而增大了数据库的冗余,还存在不同步的风险。所以什么都好分割啊,什么存json啊都是异端的设计,基本上都是没有经受过大负载访问洗礼的幼稚设计方法。