我们为视频和音频剪辑,照片和矢量流程提供了一个平台。我们从MySQL作为数据库后端开始,最近包括 mongodb 为了存储文件的所有元信息,因为MongoDB更好地满足了要求。例如:照片可能有 exif 信息,视频可能具有音频轨道,我们也需要在其中存储元信息。视频和矢量图不会共享任何常见的元信息等。因此,我知道,MongoDB非常适合存储此非结构化数据并保持其可搜索。

但是,我们继续开发平台并添加功能。现在,下一步将为我们的用户提供论坛。现在出现的问题是:使用MySQL数据库,这将是存储论坛和论坛库等的好选择,或者也使用MongoDB?

因此,问题是:何时使用MongoDB以及何时使用RDBMS。如果您有选择的话,您会采取什么措施,MongoDB或Mysql,为什么要选择它?

有帮助吗?

解决方案

NOSQL:如果只是那么简单, ,作者写了关于Mongodb的文章:

MongoDB不是关键/值商店,它更多。绝对不是RDBMS。我没有在生产中使用MongoDB,但是我已经使用了一个构建测试应用程序的少量,这是一个非常酷的套件。它似乎非常表现,要么具有或很快就会具有容忍度和自动脱落(也将扩展)。我认为Mongo可能是我到目前为止见过的RDBMS替代品最近的事。它不能适用于所有数据集和访问模式,但它是为您的典型Crud东西而构建的。大多数人使用关系数据库的目的是存储本质上是一个巨大的哈希,并能够选择任何这些键。 如果您的数据库是3NF,并且您不进行任何连接(您只是选择一堆表并将所有对象放在一起,又称大多数人在Web应用程序中所做的事情),MongoDB可能会为您踢屁股。

然后,总结:

要指出的真正的事情是,如果您无法选择数据库,那么您就无法制作超棒的东西,那就做错了。 如果您知道MySQL,请使用它。优化您何时需要。像AK/V商店一样使用它,像RDBM一样使用它,但是为了上帝的缘故,请构建您的杀手级应用程序!这些对大多数应用都不重要。 Facebook仍然使用MySQL很多。 Wikipedia经常使用MySQL。 Friendfeed经常使用MySQL。 NOSQL是一个很棒的工具,但这肯定不会成为您的竞争优势,它不会使您的应用程序变得热,最重要的是,您的用户不会关心任何一个。

我要在下一个应用程序上构建什么?可能是Postgres。我会使用nosql吗?也许。我也可能会使用Hadoop和Hive。我可能会将所有内容保留在平面文件中。也许我会开始在Maglev上黑客入侵。 我将使用最适合这份工作的一切。 如果我需要报告,我将不会使用任何NOSQL。 如果我需要缓存,我可能会使用东京暴君。 如果我需要酸度,我将不会使用NOSQL。 如果我需要大量的计数器,我将使用redis。 如果我需要交易,我将使用Postgres。 如果我有大量的单一文档,我可能会使用Mongo。 如果我每天需要写10亿个对象,我可能会使用伏地魔。如果我需要全文搜索,我可能会使用Solr。如果我需要全文搜索挥发性数据,我可能会使用sphinx。

我喜欢这篇文章,我发现它非常有用,它很好地概述了NOSQL景观和炒作。但是,这是最重要的部分,在RDBMS和NOSQL之间进行选择时,确实有助于问自己正确的问题。值得阅读的恕我直言。

与文章的替代链接

其他提示

在使用MongoDB进行社交应用程序的两年后,我目睹了没有SQL RDBM的生活的真正含义。

  1. 您最终要写工作来做一些事情,例如加入不同表/集合的数据,这是RDBMS会自动为您做的事情。
  2. 您使用NOSQL的查询功能严重残废。 MongoDB可能是SQL最接近的东西,但它仍然远远落后。相信我。 SQL查询是超级直观的,灵活的和功能强大的。 MongoDB查询不是。
  3. MongoDB查询只能从一个集合中检索数据,并仅利用一个索引。 MongoDB可能是最灵活的NOSQL数据库之一。在许多情况下,这意味着更多的往返服务器以查找相关记录。然后,您开始脱颖而出数据 - 这意味着后台作业。
  4. 这不是关系数据库这一事实意味着您将不会(某些人认为表现不佳)外键的约束以确保您的数据一致。我向您保证,这最终将在数据库中创建数据不一致。做好准备。您很可能会开始编写过程或检查以保持数据库一致,这可能不会比让RDBMS为您做得更好。
  5. 忘了冬眠等成熟的框架。

我相信,与NOSQL相比,典型的SQL RDBM的所有项目中有98%的速度可能要好得多。

存储此非结构化数据

正如您所说,MongoDB最适合存储非结构化数据。这可以将您的数据组织为文档格式。这些rdbms altenatives称 nosql 数据存储(mongodb, couchdb, 伏地魔)对于大规模扩展并需要从这些大数据存储中更快的数据访问的应用程序非常有用。

这些数据库的实现比常规RDBMS更简单。由于这些是简单的键值或文档样式二进制对象,直接序列化为磁盘。这些数据存储不会强制执行 酸性, ,任何 模式. 。这不提供任何 交易 能力。因此,这可以扩大规模,我们可以实现更快的访问(读写)。

但是相反,RDBM在数据上强制执行酸和模式。如果您想使用结构化数据,则可以继续使用RDBM。

我会选 mysql 用于创建 论坛 对于这种东西。因为这不会扩大规模。这是一个非常简单的(常见)应用程序,它在数据之间具有结构关系。

请注意,Mongo基本上是Stores Json。如果您的应用程序正在处理许多JS对象(带有嵌套),并且您想持续这些对象,那么使用Mongo有一个非常有力的论点。它使您的DAL和MVC层超薄,因为它们并没有包装所有JS对象的属性,并试图将它们拟合到它们自然不适合的结构(架构)中。

我们有一个系统,它具有几个复杂的JS对象,我们喜欢Mongo,因为我们可以真正非常轻松地坚持一切。我们的物体也相当无定形和无组织,蒙戈(Mongo)浸透了这种复杂性而不会闪烁。我们有一个自定义报告层,可以解释非晶态数据以供人类消费,这并不难开发。

我会说如果您需要复杂的交易,请使用RDBMS。否则,我会选择MongoDB-更灵活地使用,并且您知道它可以在需要时扩展。 (虽然我有偏见 - 我从事MongoDB项目)

谁需要分发,碎片论坛?也许是Facebook,但是除非您创建一个Facebook-Competitor,否则只需使用MySQL,Postgres或您最适合的任何东西即可。如果您想尝试MongoDB,好的,但不要指望它会为您做魔术。就像其他所有事物一样,它将具有其怪癖和一般性的态度,就像您已经发现您是否确实已经在研究它一样。

当然,MongoDB可能会被大肆宣传,并且看起来很容易,但是您会遇到更多成熟产品已经克服的问题。不要这么容易引诱,而要等到“ nosql”成熟或死亡。

就我个人而言,我认为“ nosql”将枯萎并因碎裂而死亡,因为没有设定的标准(几乎按照定义)。因此,我不会亲自为任何长期项目下注。

唯一可以在我的书中保存“ nosql”的东西是,它是否可以无缝地集成到红宝石或类似语言中,并使语言“持久”,几乎没有编码和设计中的开销。这可能会通过,但是我会等到那时,现在不现在,当然需要更加成熟。

顺便说一句,您为什么要从头开始创建一个论坛?有很多开源论坛可以调整以符合大多数要求,除非您真的在创建下一代论坛(我怀疑)。

我在很多公司看到MongoDB从应用程序日志中使用MongoDB进行实时分析。它的模式柔性确实适合应用日志,其中记录模式倾向于每次更改。另外,它 封顶收藏 功能很有用,因为它会自动清除旧数据以使数据拟合到内存中。

我真的认为这是MongoDB适合的领域,但通常建议使用MySQL/PostgreSQL。网络上有很多文档和开发人员资源,以及它们的功能和鲁棒性。

您可能想喜欢Mongo的两个主要原因是

  • 模式设计中的灵活性(JSON类型文档商店)。
  • 可伸缩性 - 只需添加节点即可水平扩展。

它适用于大数据应用程序。 RDBM不适合大数据。

您知道,所有有关连接和“复杂交易”的东西 - 但是多年前,蒙蒂本人都解释了对提交 /回滚的“需求”,说'在逻辑类中所做的一切(而不是数据库)无论如何' - 所以这是同一件事。需要的是一个愚蠢但又令人难以置信的整洁,快速的数据存储/检索引擎,其中99%的Web应用程序要做的事情。

就像之前说的那样,您可以在许多选择之间进行选择,看看所有这些选择:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

我建议找到最好的组合:如果您需要酸并且想加入一些桌子MongoDB + redis,MySQL + memcache真的很棒

我要做的是:我从MySQL + memcache开始,因为我已经使用了,然后开始使用其他数据库框架。在一个项目中,您可以将MySQL和MongoDB组合在一起!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top