好的伙计们。
我已经开始开发一个可能有一天会变大的闲暇时间项目。在我真正开始之前,我想确定我是从正确的设置开始的。所以我来找你。
我正在提供服务,主要是作为一个todolist /项目规划师。 在这个系统中,将有大量的用户和一定数量的任务。每个任务都可以分配给多个用户,每个用户可以有多个任务(多对多关系)。
到目前为止,我计划使用MySQL,但是我的一个朋友,他是该项目的一部分,而不是使用MongoDB。他告诉我它会提高性能并且更具可扩展性。 另一方面,我认为为了将所有任务分配给特定用户,或者分配给一个特定任务的所有用户,都需要使用MongoDB没有的连接(或者以一种麻烦的方式使用据我了解)。
现在我的问题是“你会建议使用哪种数据库系统.MySQL或MongoDB或第三种选择?为什么?”
感谢您的时间和帮助。
的Morten
答案 0 :(得分:2)
我们在IGN使用MySQL来存储人际关系(像你的用例一样多对多),并且在关系表中有大约5M条记录。我们在一个集群中有4个MySQL服务器,读取分布在3个MySQL从服务器上。顺便说一句,你总是可以根据系统的读/写重量来非规范化以优化读取和惩罚写入等。
我们在Spring中使用DAO模式,因此我们通过配置(以及编写适用的Mongo / MySQL DAO实现)交换数据库提供程序相当容易。大约一年前,我们已将活动(如社交媒体)转移到Mongo,但人际关系在MySQL中幸福地生活。
答案 1 :(得分:1)
Jonas对你帖子的评论说明了一切,
如果需要,您可以随时扩展。
此。
我非常注重If you don't have scaling problems, don't worry too much (if at all) about scaling problems.
为什么不使用最简单,最聪明,最干净的 交付 客户支付的功能(在我的至少情况!)这种方法节省了大量的时间和精力,是10个项目中9个项目的正确方法。
学习技术,因为它可以扩展。由于它在即将到来的项目中可扩展,因此与未学习的技术和未知技术相关联,并不是那么好。使用第三方内容时,除了可伸缩性之外还有许多其他因素。
MySQL似乎是一个很好的选择MySQL更成熟,拥有大量的客户端库,ORM和其他节省时间的技术。 MySQL可以处理数百万(如果你有ram的数十亿)行。我还没有遇到一个它无法处理的项目,我看到了一些令人印象深刻的数据集!当然,当你需要性能的时候,肯定你会发现自己正在扯掉orm和sql生成代码来替换你自己的手调整查询,但是那一天很有可能并且很有可能, that 。
Mongodb,虽然真的很酷但我很遗憾地说,可能会给你带来与缩放无关的问题。
我的2美分,快乐的编码!
答案 2 :(得分:0)
两者都可能适用于您的目的,但您的数据库在其结构中似乎相对严格,这是SQL处理得很好的。因此,我建议 MySQL 。多对多关系也相对容易实现和访问。
您可能会受到一点点性能损失,但根据我的经验,对于规模较小的应用程序(即数据库少于百万的数据库),这通常不是特别明显。我同意@JonasElfström的评论,但是:你的应用程序和数据库之间应该有一个抽象层,所以如果扩展成为一个问题,你可以解决它而不会有太多问题。
答案 3 :(得分:0)
坚持使用关系数据库,它可以处理多对多的关系,并且具有备份和恢复功能,高可用性,重要的是,您会发现您需要的每个开发人员都熟悉它。有大量用于扩展关系数据库的文档化方法。
选择MySQL或Postgres的开源数据库,具体取决于您的团队最熟悉的数据库以及它如何集成到您的基础架构堆栈的其余部分。
确保正确设计数据模型,最重要的是实体之间的关系。
祝你好运!