MongoDB、Mysql和关系
我正在创建一个在线聊天 上下文(如果需要): 到目前为止,我使用PHP/MySQL和AJAX来完成这项工作,但这并不是一个健康的解决方案,因为我一直使用“拉”类型的应用程序,担心可伸缩性。 我读过关于“push”方法的备选方案,似乎我的选择是有限的,不包括PHP。 如果Websockets集成在每个浏览器中,那么它可能是一个非常有趣的选项,但事实并非如此(对于大多数实现Websockets的浏览器来说,它在默认情况下是禁用的)。 长轮询也可能是一种选择,但它涉及其他问题,如并发打开连接的数量,这也可能会杀死您的web应用程序 这就是为什么违背我的意愿,我认为我唯一可行的选择是使用服务器端javascript(node.js+now.js将是我当时的选择) 也就是说,我可能也需要重新考虑数据库的使用。 我需要保存每个用户的存储数据,并将这些用户链接到他们提交的消息。 如果是由推送系统驱动的聊天引擎,MySQL仍然是一个有价值的选择吗? 我读过关于NoSQL数据管理的文章,似乎MongoDB是node.js的一个很好的补充 我的两个问题:MongoDB、Mysql和关系,mysql,node.js,mongodb,relational-database,Mysql,Node.js,Mongodb,Relational Database,我正在创建一个在线聊天 上下文(如果需要): 到目前为止,我使用PHP/MySQL和AJAX来完成这项工作,但这并不是一个健康的解决方案,因为我一直使用“拉”类型的应用程序,担心可伸缩性。 我读过关于“push”方法的备选方案,似乎我的选择是有限的,不包括PHP。 如果Websockets集成在每个浏览器中,那么它可能是一个非常有趣的选项,但事实并非如此(对于大多数实现Websockets的浏览器来说,它在默认情况下是禁用的)。 长轮询也可能是一种选择,但它涉及其他问题,如并发打开连接的数量,这
- 我有一个名为user(user\u id\u p,username)的表
- 我有一个名为messages的表(message\u id,message,user\u id\u f)
- 我想进行一次查询,以获取与用户名“omgtheykilledkenny”关联的所有消息
db.messages.find({user\u id:ObjectId(…)})代码>
Update2:如果您有唯一的用户名,可以将用户名作为users集合的_id,以避免此问题。大多数人可能会建议不要这样做,但它有一些明显的缺点,例如使更改用户名变得更加困难。您无法在MongoDB中执行连接,因此无法实现第二个要求。Mongo这样做的方法是在用户集合中嵌套消息: {用户名:'abc',消息:[……]} 或者使用refId,这是连接和嵌套文档之间的一种折衷方法: 就从MySQL切换到Mongo而言,您不必完全抛弃MySQL。存在一个比另一个更合适的用例。如果合适的话,您可以在系统的不同部分同时使用这两种方法。就我个人而言,过去我在很多方面都使用过MySQL,现在我在一个大项目中使用MongoDB。我发现移动非常容易,因为使用MongoDB驱动程序非常容易,而且MongoDB站点总体上非常适合文档编写
您可以使用前端的JSON_encode和JSON_decode转换JSON,并使用MongoDB的PHP驱动程序查询和插入/更新数组,因此可以说它比MySQL更直观、更易于使用。这只是一个习惯的问题。#1:是的-速度和规模是两个原因#2:使用mongo做你想做的事情很容易。你做过RTFM吗?你有什么特别的问题吗?还是你想让我们教你?请相信我,我做过RTFM,但我就是不明白。我就是找不到如何在集合之间建立关系。这对于有经验的开发人员来说可能是显而易见的,但对我来说没有意义。在同一个集合中进行简单的查询是可以的,但是在两个集合之间组合数据以获得响应是我无法理解的。到目前为止还没有发现任何与此相关的东西。除此之外,我相信我的问题非常具体。谢谢韦斯·弗里曼。我的第一个答案已经完全回答了。至于第二个,我不确定。在您的示例中(我很清楚地RTFM'ed),它假设它会给我提供的用户id的消息,但不会给我特定用户名的消息(在另一个名为“users”的集合中可用)。有两个查询(我查询这个用户名的id,然后查询我检索到的用户id的消息)很容易做到这一点,但是有一个并且只有一个查询,我将如何做到这一点?这就是我的观点,谢谢。我想把你们的两个答案都设置为有价值的,但似乎只有1个问题是允许的。关于这个问题,我不能在会话中保留任何用户的id,因为我可能需要任何用户的id(或者没有)。对于用户名作为id,它不会回答我的问题,因为这里的用户名就是一个例子。我需要它,但我也需要附加到消息,用户性别,出生日期,头像等。这些是用户相关的,而不是消息相关。唯一的共同点是