我有一个社交网络
users表大约有60,000行
朋友表约有100万行(用于确定谁是你的
朋友)
我想做一个朋友饲料,墙,无论你喜欢什么叫它,它会显示用户状态贴(推特类型的帖子)之类的东西,它会显示一些不同的项目但是一开始它只是朋友状态和也许博客文章.
基本上,您只会看到使用您朋友列表中的用户ID发布的内容.
我一直在努力想出最好的方法并且没有走得太远,但这是我最新的想法.
目前要建立这个饲料,我必须
获取大朋友桌上的朋友ID列表
从上面的结果中获取朋友ID中的流数据
加入用户表以获取发布者图片URL和用户名
然后加入评论表以获取在Feed项目上发布的评论
这是构建该Feed的一项重大任务
到目前为止,我有3个想法,这是你的帮助可以进来的地方.
Memcache选项:
当用户登录到站点时,使用memcache并将用户友好列表缓存为数组,当用户批准新朋友请求将某个朋友添加到该列表时,它将重建那里的缓存.
除了刚到那里的朋友,我可以在那里保存朋友图片网址和用户名,这将通过在构建好友Feed时消除此查询来再次加快速度.
文件缓存选项:
执行与memcache选项相同但将此数据作为数组保存到缓存文件而不是内存,然后将此缓存文件包含在页面中.
我不确定哪种是性能的最佳方法我理解memcache将所有内容存储在内存中所以有两万个可以使用大量内存和文件缓存的朋友的朋友只有在用户需要它时才将它放在内存中如果我是正确.此外,如果我使用文件方法,当用户退出网站时,我会删除那里的缓存文件,因此缓存文件夹永远不会是太大的文件
会话缓存选项:
与上面的文件缓存相同,我只是意识到会话数据被保存到文件中,这样就不会使它成为缓存吗?
请给我你的意见或任何建议或信息,因为我对缓存知之甚少,我已经阅读了很多,但有时其他人的想法有很多帮助
由于很多原因,Memcache是你最好的选择:
这真的很快 - 一切都在内存中,并且它非常适合像你一样的情况(和一般的缓存:)
它是分布式的 - 这意味着如果您运行多个Web/app服务器,它们都可以访问相同的缓存
您可以为memcache汇集多个服务器 - 如果您有一些相对未充分利用的服务器(或几个专用缓存服务器),您可以将它们全部集中到一个大缓存中
它具有超级可扩展性(前面提到的原因)
它有很好的PHP支持 - 用于memcache的PECL包最近更新了许多新的优点
您甚至可以将用户会话存储在memcache中 - 只需将其设置在php.ini文件中即可.这比在数据库中存储会话要快得多,并且允许您的会话在多个Web主机上保持不变(如果您处于负载平衡状态)...这也将为您的站点提供一点性能提升,因为不需要在每个请求上点击文件系统/数据库以获取会话信息.
... 还有很多 ;)
至于您对个别缓存项目的内存占用的一些担忧,您有一些选择.我最初的想法是给它一个旋转,看看这些缓存项目真正有多大(你可以找到几个开源的东西来监控实际的缓存使用情况,比如cacti).我认为它们会比你想象的要小.
如果他们不是,我建议你重新思考你的缓存策略,实际缓存,持续多长时间等等.也许你可以从缓存中的几个东西构建feed(即缓存单个用户数据,然后从缓存中的所有单个项目构建一个人的订阅源.在这方面有很多好文章,只是搜索出来:)