gpt4 book ai didi

mysql - MongoDB、Mysql 和关系

转载 作者:行者123 更新时间:2023-11-30 23:31:40 24 4
gpt4 key购买 nike

我正在创建在线聊天。

上下文(如果需要):

到目前为止,我一直在使用 PHP/MySQL 和 AJAX 来完成这项工作,但这不是一个健康的解决方案,因为我一直在使用“拉式”类型的应用程序,担心可伸缩性。我阅读了有关“推送”方法的替代方案,似乎我的选择是有限的并且不包括 PHP。如果 Websockets 集成在每个浏览器中,它可能是一个非常有趣的选项,但事实并非如此(而且对于大多数实现它的人来说,它似乎默认情况下是禁用的)。长轮询也是一个候选者,但它涉及其他问题,例如并发打开的连接数也可能会终止您的 Web 应用程序。

这就是为什么违背我的意愿,我认为我唯一可行的选择是使用服务器端 javascript(那时我会选择 node.js + now.js)。

这就是说,我可能也需要重新考虑数据库的使用。我需要保留每个用户的存储数据并将这些用户链接到他们提交的消息。如果是由推送系统驱动的聊天引擎,那么 MySQL 仍然是一个有值(value)的选择吗?我阅读了有关 NoSQL 数据管理的内容,MongoDB 似乎是对 node.js 的一个很好的补充。

我的两个问题:

  1. 在实时 Web 应用程序的情况下,我最好转向 NoSQL 系统(我需要从头开始学习)而不是 MySQL(我已经知道)有什么原因吗?

  2. 假设在 MySQL 中:

    • 我有一个名为 user (user_id_p, username) 的表
    • 我有一个名为 messages (message_id, message, user_id_f) 的表
    • 我想进行一次查询以获取与用户名“omgtheykilledkenny”关联的所有消息。

    足够简单,但我如何使用 MongoDB 及其集合理念实现它?

感谢您的帮助。

最佳答案

  1. 使用 node.js/MongoDB 很酷,因为 Mongo 的文档结构已经是 JSONish,所以您不必将查询转换为 JSON。如果您已经了解 JavaScript,那么您在学习 MongoDB 方面就有了先机。 Mongo 确实可以轻松扩展写入和读取,速度非常棒,尽管我在单个系统上看到一些 MySQL 基准测试与 Mongo 相当——当您开始需要多个盒子时,它真的很出色。

  2. 假设您有一个单独的消息集合,并且您已经知道您可以执行的用户 ID:db.messages.find({user_id:ObjectId(...)});

更新:如果您不知道用户 ID,那么您需要执行两个查询,是的(除非您使用另一个答案中推荐的嵌入式数组——对于这种用例,我建议不要这样做,虽然,因为您最终会查询整个文档/消息列表,甚至只显示一个子集)。根据您的用例,显然,如果您有用户名,您也可以将用户 ID 放在手边,以应对这种情况。如果是客户端输入,则提供的用户名无效。

更新 2:如果您有唯一的用户名,您可以将用户名设为用户集合的 _id 以避免此问题。大多数人可能会反对这样做,并且它有一些明显的缺点,例如更难更改用户名。

关于mysql - MongoDB、Mysql 和关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com