一个小白问题,问问大家都怎么做的。
一个User用户,一个Blog表,一个Picture表,一个Friend表……等等,为用户提供博客、相册、好友等功能。
要求用户登录后显示其博客数、照片数、好友数等。。
这些字段是建在User表里,每次增减博客、照片、好友后更新好呢?
还是每次登录运行3个select count(*) from xxx;好?//如果记录太多是不是效率和对数据负担太大
大家一般怎么弄?社交网络用户表字段记录数count
一个User用户,一个Blog表,一个Picture表,一个Friend表……等等,为用户提供博客、相册、好友等功能。
要求用户登录后显示其博客数、照片数、好友数等。。
这些字段是建在User表里,每次增减博客、照片、好友后更新好呢?
还是每次登录运行3个select count(*) from xxx;好?//如果记录太多是不是效率和对数据负担太大
大家一般怎么弄?社交网络用户表字段记录数count
或者在User表添加字段,然后用触发器来修改?
或者在User表添加字段,然后用触发器来修改?为这些表中的user表引用字段添加索引
比如Blog表有一个userid外键引用了user,为userid添加索引,当你count(*) where userid=xxx的时候只查询索引表不会查询Blog表。
添加好友后,也是需要count(*)让后再update.
这个和加载页面的时候count(*)我觉得效率上没啥区别。
可能用户在添加好友后慢一下会觉得正常,而页面刚加载的时候慢就觉得不适应吧。
或者在User表添加字段,然后用触发器来修改?为这些表中的user表引用字段添加索引
比如Blog表有一个userid外键引用了user,为userid添加索引,当你count(*) where userid=xxx的时候只查询索引表不会查询Blog表。
恩。这个方法效率就高些了……
不知道专业社交网站怎么弄得。。
内存数据库
数据库缓存吧……engine=memory 的内存引擎数据库
内存数据库
数据库缓存吧……
我说的是内存数据库,不是数据库缓存
redis,MongoDB
内存数据库
数据库缓存吧……比如微博,并发量非常大,并且是海量数据,但是咱们完全感觉不到延迟,发一个微博之后自己马上可以看到,过一会之后别人也可以看到,如果是直接访问的物理数据库,性能不会这么高。一般的做法都是使用了内存数据库,具体是个什么样的架构,不是太清楚,但是可以知道的是:存取都是使用内存数据库,内存数据库和物理数据库之间有同步的机制。
恩,微博的确反应非常快……可能是架构和数据库比较特殊。。
不过不是很多企业都用mysql深度定制的数据库。。而且那么大并发更要追求尽可能少访问数据库。。