Mysql 关系型或面向文档的数据库更适合

Mysql 关系型或面向文档的数据库更适合,mysql,node.js,mongodb,compare,database,Mysql,Node.js,Mongodb,Compare,Database,我正在构建一个项目,用户可以选择多个项目并将它们添加到集合中,他可以共享这些集合。到目前为止,数据库如下所示: 我开始考虑使用以下结构将其切换到MongoDB: Sets Collection: { _id: ObjectId("51e06e788abe12d1070352351"), name: "somename", //name of the set uid:

我正在构建一个项目,用户可以选择多个项目并将它们添加到集合中,他可以共享这些集合。到目前为止,数据库如下所示:

我开始考虑使用以下结构将其切换到MongoDB:

    Sets Collection:
    {
            _id: ObjectId("51e06e788abe12d1070352351"), 
            name: "somename", //name of the set
            uid: "df4naL3_", // shortID for the URL
            createdby: ObjectId("51e06e788abe12d107000001"), //mongoId of the user
            items: {
                    [{
                            _id: ObjectId("51e06e788abe12d1070352351"),
                            category: "Dress",
                            title: "some title",
                            price: "33",
                            image: "someimage.png",
                            buyLink: "http://"
                    }]
            }
    }



    Items Collection:
    {
            _id: ObjectId("51e06e788abe12d1070352351"),
            category: "Dress",
            title: "some title",
            price: "33",
            image: "someimage.png",
            buyLink: "http://"
    }
问题

  • 是否有必要切换到MongoDB,或者Mysql将更好地满足我对该项目的需求?为什么
  • 既然MongoDB不支持连接,那么实现项目类别的解决方案是什么?请注意,项目将按类别编制索引,类别标题类似于:“附件”
  • NoSQL的一个含义是去规范化是可以的。您正在以牺牲存储空间为代价优化检索速度。因此,您可以复制所有项目,并将其作为集合实例的子数组插入。或者,您可以在集合实例的子数组中插入引用。这将需要2个查询(1个用于获取ID列表,另一个用于获取与这些IDE匹配的所有项)
  • 当我们离开关系数据库进入NoSQL世界时,这种数据复制的想法让人感觉非常不舒服。但在NoSQL中这是完全可以接受的,因为您只是在为不同的东西进行优化。是的,如果您从项中删除了一个实例,您需要从包含它们的集合的任何实例中删除副本。

    问题归结为应用程序将如何访问数据。如果您经常访问容器及其内容的所有细节,那么NoSQL可能非常适合这里


    老实说,您的最终用户可能不会在意,而且在大多数应用程序的负载情况下,您可能不会注意到执行速度的差异。我的建议是使用您熟悉的工具,直到负载和使用情况要求您开始优化。这是众所周知的好问题之一。

    根据我的经验E-DBS是大多数解决方案的最佳选择。它们是成熟的,查询语法是直观的,有很多工具可以用来加速开发过程并确保解决方案是稳健的。人们应该有充分的理由考虑NoSQL数据库。这不是我不喜欢NoSQL,我真的这样做,我在使用I。最常见的原因是复杂的数据模式、性能等。你为什么开始考虑在你的项目中使用NoSQL?这个问题的答案也是你在这里发布的问题的答案。我建议用谷歌搜索“何时使用mongo”对我来说,NoSQL在默认情况下不是一个工具,它更像是一个解决特定问题的工具

    关于你的职位:

  • 如果您不能从MongoDB中获得更多好处,那么使用MongoDB是没有意义的 我敢肯定你不会,考虑到 您的模式很简单,并且很容易映射到关系数据库 我认为你不会有任何性能问题 这里,更重要的是您使用关系数据库的经验

  • 对于联接,您必须对数据进行非规范化或查询 它是分开的


  • 谢谢你的回答。我只想问1-2个问题让我明白。我对MongoDB比较熟悉,但是如果我使用我提到的以下结构,很多集合都会有重复的数据。这种架构不会占用很多存储空间吗?你说得对,但这在NoSQL设计中并不像在relat中那样是不允许的更新重复记录会让你承担更多的责任,当然,如果空间是一个问题,那么你可以通过存储引用来建模。