We offer a platform for video- and audio-clips, photos and vector-grafics. We started with MySQL as the database backend and recently included MongoDB for storing all meta-information of the files, because MongoDB better fits the requirements. For example: photos may have Exif information, videos may have audio-tracks where we to want to store the meta-information of, too. Videos and vector-graphics don't share any common meta-information, etc. so I know, that MongoDB is perfect to store this unstructured data and keep it searchable.

然而,我们仍在继续开发我们的平台并添加新功能。接下来的步骤之一就是为我们的用户提供一个论坛。现在出现的问题是:使用MySQL数据库,这将是一个很好的选择,存储论坛和论坛帖子等或使用MongoDB,这也是?

所以问题是:什么时候使用MongoDB,什么时候使用RDBMS。如果可以选择,你会选择mongoDB还是MySQL,为什么会选择?


当前回答

我看到很多公司都在使用MongoDB对应用程序日志进行实时分析。它的无模式性非常适合应用程序日志,因为在应用程序日志中,记录模式往往会不时更改。此外,它的Capped Collection功能也很有用,因为它会自动清除旧数据以保持数据适合内存。

这是我真的认为MongoDB适合的一个领域,但MySQL/PostgreSQL一般更推荐。网络上有很多文档和开发人员资源,以及它们的功能和健壮性。

其他回答

如果需要复杂的事务,我会建议使用RDBMS。否则我会选择MongoDB,它工作起来更灵活,你知道它可以在你需要的时候扩展。(虽然我有偏见-我在MongoDB项目工作)

你知道,所有这些关于连接和“复杂事务”的东西——但许多年前是Monty自己解释了COMMIT / ROLLBACK的“必要性”,他说“所有这些都是在逻辑类(而不是数据库)中完成的”——所以这是同样的事情。我们所需要的是一个愚蠢但非常整洁和快速的数据存储/检索引擎,用于99%的web应用程序。

就像之前说的, 你可以在很多选择中选择,看看所有的选择: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

我的建议是找到你的最佳组合: 如果你需要ACID并且想要连接一些表,MySQL + Memcache真的很好 MongoDB + Redis是完美的文档存储 Neo4J是完美的图形数据库

我做什么:我开始使用MySQl + Memcache,因为我习惯了,然后我开始使用其他数据库框架。在一个项目中,你可以结合MySQL和MongoDB为例!

你可能更喜欢Mongo的两个主要原因是

模式设计的灵活性(JSON类型文档存储)。 可伸缩性——只要增加节点,它就可以很好地横向扩展。

适用于大数据应用。RDBMS不适用于大数据。

谁需要分布式、分片的论坛?也许是Facebook,但除非你要创建一个Facebook的竞争对手,否则就使用Mysql, Postgres或任何你最熟悉的。如果您想尝试MongoDB,可以,但不要期望它为您创造奇迹。它会有它的怪癖和一般的肮脏,就像其他东西一样,如果你真的已经在研究它,我相信你已经发现了。

当然,MongoDB可能被大肆宣传,表面上看起来很简单,但您将遇到更成熟的产品已经克服的问题。不要那么容易被诱惑,而是等待“nosql”成熟,或者死亡。

就我个人而言,我认为“nosql”将会枯萎并死于碎片化,因为没有固定的标准(几乎是根据定义)。所以我个人不会在任何长期项目上下注。

在我的书中,唯一能拯救“nosql”的是,如果它能无缝地集成到Ruby或类似的语言中,并使语言“持久”,几乎没有任何编码和设计上的开销。这可能会发生,但我会等到那时候,而不是现在,当然它需要更成熟。

顺便问一下,你为什么要从零开始创建一个论坛?有大量的开源论坛可以调整以适应大多数需求,除非你真的在创建下一代论坛(我怀疑)。