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一般更推荐。网络上有很多文档和开发人员资源,以及它们的功能和健壮性。

其他回答

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

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

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

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

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

来存储这些非结构化数据

正如你所说,MongoDB最适合存储非结构化数据。这可以将数据组织成文档格式。这些被称为NoSQL数据存储(MongoDB、CouchDB、Voldemort)的RDBMS替代品对于大规模扩展的应用程序非常有用,并且需要从这些大数据存储中更快地访问数据。

而且这些数据库的实现比常规的RDBMS简单。由于这些是简单的键值或文档样式二进制对象,直接序列化到磁盘中。 这些数据存储不强制ACID属性和任何模式。这没有提供任何事务处理功能。因此,这可以扩大规模,我们可以实现更快的访问(读和写)。

但与之相反,RDBM在数据上强制执行ACID和模式。如果想要处理结构化数据,可以使用RDBM。

我会选择MySQL来创建这类论坛。因为这个规模不会很大。这是一个非常简单(常见)的应用程序,它具有数据之间的结构化关系。

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

注意,Mongo本质上存储的是JSON。如果你的应用程序正在处理大量的JS对象(嵌套),你想要持久化这些对象,那么使用Mongo是一个非常有力的理由。它使你的DAL和MVC层变得非常薄,因为它们没有将所有的JS对象属性拆开包装,并试图将它们强行放入一个它们不自然适合的结构(模式)中。

我们有一个系统,它的核心有几个复杂的JS对象,我们喜欢Mongo,因为我们可以很容易地持久化所有东西。我们的对象也相当无定形和无结构,Mongo毫不眨眼地吸收了这种复杂性。我们有一个自定义的报告层,它可以为人类消费破译无定形的数据,这并不难开发。