【问题标题】:simple multiple user selections/options简单的多用户选择/选项
【发布时间】:2011-03-21 17:26:27
【问题描述】:

我看到了许多实现,例如 Facebook 点赞、论坛业力、在论坛帖子上标记为已读以及对给定项目的多个用户可用的其他简单选项和选择。

我知道我可以在 mysql 中通过创建一个表来实现这一点,该表将帖子 ID 链接到类似系统的类似用户 ID。

我的问题是,在一个有很多帖子的页面上,我必须对每个帖子进行查找。我使用准备好的语句,这样对我来说更快。

是否有其他方法来实现这些系统,如果没有,是否有优化,如数据库类型或其他可以加快速度的调整?

基本上,是否有强大、快速的多对多数据库交互实现。

*编辑*** 我正在使用opera mini,所以我在评论ajax和js时遇到了问题


现在,我有一个包含两列的表格。一个用于用户 ID,另一个用于帖子 ID。两者都被索引并用于外键约束。 我正在考虑在两者之间创建一个复合主键。

我的主要问题是业力。我允许用户对每个帖子进行投票。问题是,对于每个帖子,我需要获得总票数,确定用户是否投票允许用户投票或不投票。

我的网站允许许多用户托管他们自己的网站,因此我需要认真优化这一点。

有人建议我为此使用内存表。


注意** 我不能使用 memcached。

【问题讨论】:

  • 到目前为止你有什么?
  • 假设“喜欢”很少更改并且经常阅读,那么像 memcached 这样的系统确实非常、非常运行良好,并且可以非常快速地为一个页面查找 50 个项目。
  • +1 for memcache -- Facebook 甚至发布了他们使用的优化版本,最有可能用于这类事情。

标签: php mysql load performance


【解决方案1】:

我强烈建议使用 MySQL 数据库以外的其他东西。我编写了一个 opensocial 应用程序,该应用程序对数据库进行大量写入和读取。这一切都始于 MySQL 数据库,我什至切换到专用的主从复制设置。但无济于事,它很昂贵,而且扩展性不是很好。

最终的解决方案是使用NoSQL db,它可以充分利用 RAM。我的决定是mongoDB,它有一个活跃的社区,很好地解决了我的问题。 MongoDB 证明具有高度可扩展性。

【讨论】:

  • 我一直在看mongodb,老实说,值得使用。它的无模式结构几乎适用于我所有的应用程序。我有时喜欢去规范化和存储序列化数组。享受 50 岁。
  • 谢谢,很高兴能为您提供帮助。
【解决方案2】:

到目前为止,您还有些模糊,但如果需要,我会开始并继续添加内容:

  1. 确保您正在编制索引
  2. 最少查找 - 让您获得列表 将弹出的帖子,使用它 列表以匹配喜欢的人,如果他们查看过文章等。
  3. 使用数字 - 确保所有 比较是用数字进行的
  4. 如果您正在运行查询,请不要为每个帖子运行单个查询
  5. 您的查询有限制吗? - 确保你使用它
  6. 去规范化不是罪
  7. 您可以对数据库进行分区以减少查找次数(例如,如果数据超过 60 天并且几乎没有被触及,则将其移动到辅助数据库/表中,这样表的大小就不会很大)

例如SELECT * FROM user_liked WHERE post_id IN (1,2,3) 而不是

SELECT * FROM user_liked WHERE post_id = 1

【讨论】:

  • 虽然有些人可能不同意,但非规范化有时会很有用,比如保留喜欢帖子的总人数
【解决方案3】:

Philipp Keller 几年前写了一堆关于基于 MYSQL 的标签系统的文章。就像喜欢一样,标记是在事物(标签、被喜欢的文章)和用户之间建立多对多的关系。他文章中的逻辑也应该直接适用于您的问题。

同时查看 cmets。

【讨论】:

  • 很遗憾,这些链接已损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2011-11-12
相关资源
最近更新 更多