【发布时间】:2012-05-04 09:11:06
【问题描述】:
我正在创建一个在线聊天。
上下文(如果需要):
到目前为止,我一直在使用 PHP/MySQL 和 AJAX 来完成这项工作,但这不是一个健康的解决方案,因为我坚持使用“拉”型应用程序,担心可伸缩性。 我阅读了有关“推送”方法替代方案的信息,看来我的选择是有限的并且排除了 PHP。 如果 Websockets 集成在每个浏览器中,它可能是一个非常有趣的选项,但事实并非如此(似乎对于大多数实现它的人来说,它默认是禁用的)。 长轮询也是一种候选方式,但它涉及其他问题,例如并发打开连接的数量也可能会杀死您的 Web 应用。
这就是为什么违背我的意愿,我认为我唯一可行的选择是使用服务器端 javascript(node.js + now.js 将是我的选择)。
这就是说,我可能也需要重新考虑数据库的使用。 我需要保留每个用户的存储数据并将这些用户链接到他们提交的消息。 如果是推送系统驱动的聊天引擎,那么 MySQL 是否仍然是一个有价值的选择? 我阅读了有关 NoSQL 数据管理的内容,似乎 MongoDB 将成为 node.js 的一个很好的补充。
我的两个问题:
对于实时 Web 应用程序,我是否有理由更好地迁移到 NoSQL 系统(我需要从头开始学习)而不是 MySQL(我已经知道)?
-
假设在 MySQL 中:
- 我有一个名为 user (user_id_p, username) 的表
- 我有一个名为 messages (message_id, message, user_id_f) 的表
- 我想进行一次查询以获取与用户名“omgtheykilledkenny”关联的所有消息。
足够简单,但我如何通过 MongoDB 及其集合理念实现这一目标?
感谢您的帮助。
【问题讨论】:
-
#1:是的 - 速度和规模是两个原因 #2:使用 mongo 很容易做你想做的事情。您是否接受过 RTFM 并且有具体问题,或者您是要我们教您吗?
-
请相信我,我是 RTFM,但我就是不明白。我只是找不到如何在集合之间建立关系。对于有经验的开发人员来说这可能很明显,但对我来说没有意义。在同一个集合中进行简单查询是可以的,但是在两个集合之间组合数据以获得响应是我无法理解的。到目前为止没有找到任何与此相关的东西。除此之外,我相信我的问题非常具体。
标签: mysql node.js mongodb relational-database