Architecture 什么时候去Redis?什么时候去MongoDB?

Architecture 什么时候去Redis?什么时候去MongoDB?,architecture,mongodb,nosql,redis,Architecture,Mongodb,Nosql,Redis,我想要的不是Redis和MongoDB之间的比较。我知道他们是不同的;性能和API完全不同 Redis非常快,但API非常“原子化”。MongoDB将消耗更多的资源,但API非常易于使用,我对此非常满意 它们都很棒,我想在部署中尽可能多地使用Redis,但很难编写代码。我想在开发中尽可能多地使用MongoDB,但它需要一台昂贵的机器 那么,你觉得这两种方法都有什么用呢?何时选择Redis?什么时候选择MongoDB?很难回答的问题-与大多数技术解决方案一样,这实际上取决于您的情况,而且由于您没有

我想要的不是Redis和MongoDB之间的比较。我知道他们是不同的;性能和API完全不同

Redis非常快,但API非常“原子化”。MongoDB将消耗更多的资源,但API非常易于使用,我对此非常满意

它们都很棒,我想在部署中尽可能多地使用Redis,但很难编写代码。我想在开发中尽可能多地使用MongoDB,但它需要一台昂贵的机器


那么,你觉得这两种方法都有什么用呢?何时选择Redis?什么时候选择MongoDB?

很难回答的问题-与大多数技术解决方案一样,这实际上取决于您的情况,而且由于您没有描述您试图解决的问题,如何提出解决方案

您需要对它们进行测试,看看哪一个满足了您的需求


话虽如此,MongoDB不需要任何昂贵的硬件。与任何其他数据库解决方案一样,使用更多的CPU和内存,它会工作得更好,但这肯定不是一项要求,尤其是对于早期开发目的而言。

我想说,这取决于您的开发团队类型和您的应用程序需要

例如,如果您需要大量的查询,这主要意味着您的开发人员将需要更多的工作来使用Redis,在Redis中,您的数据可能存储在各种专门的数据结构中,并针对每种类型的对象进行定制以提高效率。在MongoDB中,同样的查询可能更容易,因为数据的结构更加一致。另一方面,在Redis中,对这些查询的快速响应是处理数据可能存储的各种结构的额外工作的回报

MongoDB为具有传统DB和SQL经验的开发人员提供了简单、短得多的学习曲线。然而,Redis的非传统方法需要更多的努力学习,但需要更大的灵活性

例如,缓存层可能在Redis中实现得更好。对于更多可用于模式的数据,MongoDB更好。[注:MongoDB和Redis在技术上都是无模式的]

如果你问我,我个人的选择是Redis来满足大多数需求


最后,我希望到现在为止您已经看到了

也许这个资源有助于在两者之间做出选择。 它还讨论了其他几个NoSQL数据库,并提供了一个简短的特征列表,以及对每个数据库的解释


我刚刚注意到这个问题已经很老了。然而,我认为以下几个方面值得补充:

  • 如果您还不知道如何查询数据,请使用MongoDB

    MongoDB适用于黑客大会、初创企业或每次您不知道如何查询插入的数据时。MongoDB不会对您的基础架构做出任何假设。虽然MongoDB是无模式和非关系的,但这并不意味着根本没有模式。这仅仅意味着需要在应用程序中定义模式(例如使用Mongoose)。除此之外,MongoDB非常适合原型设计或试用。它的性能不是很好,无法与Redis相比

  • 使用Redis可以加快现有应用程序的速度

    Redis可以轻松集成为一个应用程序。将Redis用作独立数据库系统是非常少见的(有些人更喜欢将其称为“键值”存储)。像Craigslist这样的网站使用。Antirez(Redis的开发者)使用Lamernews演示了将Redis用作独立数据库系统的可能性

  • Redis不会根据您的数据做出任何假设

    Redis提供了一系列有用的数据结构(例如集合、散列、列表),但您必须明确定义存储数据的方式。简而言之,可以使用Redis和MongoDB来实现类似的功能。Redis只是速度更快,但不适合原型制作。这是一个您通常更喜欢MongoDB的用例。除此之外,Redis非常灵活。它提供的底层数据结构是高性能数据库系统的构建块

何时使用Redis?
  • 缓存

    使用MongoDB进行缓存根本没有什么意义。那太慢了

  • 如果你有足够的时间考虑你的数据库设计

    您不能简单地将文档放入Redis。您必须考虑存储和组织数据的方式。Redis中的哈希就是一个例子。它们与“传统”嵌套对象截然不同,这意味着您必须重新考虑存储嵌套文档的方式。一种解决方案是在散列中存储对另一个散列的引用(类似于key:[id of second hash])。另一个想法是将其存储为JSON,这对大多数具有*SQL背景的人来说似乎是违反直觉的

  • 如果您需要真正的高性能

    击败Redis提供的性能几乎是不可能的。想象一下,您的数据库和缓存一样快。这就是使用Redis作为真实数据库的感觉

  • 如果你不太在乎缩放

    缩放Redis不像以前那么难了。例如,您可以使用一种代理服务器在多个Redis实例之间分发数据。主从复制没有那么复杂,但是在多个Redis实例之间分配密钥需要在应用程序站点上完成(例如,使用哈希函数、模等)。相比之下,扩展MongoDB要简单得多

何时使用MongoDB
  • 原型设计、初创企业、黑客竞赛

    MongoDB非常适合快速成型。然而,性能并没有那么好。还要记住,你很可能会
    {
      _id:  0x194f38dc491a,
      Name:  "John Smith",
      PhoneNumber:
        Home: "555 999-1234",
        Work: "555 999-9876",
        Mobile: "555 634-5789"
      Accounts:
        - "379-1111"
        - "379-2574"
        - "414-6731"
    }
    
    $t = GetStringFromRedis("templates:StatsBox:" + $playerName);
    if ($t == null) {
      $t = BuildTemplate("StatsBox.tmpl",
                         GetStatsFromDatabase($playerName));
      SetStringInRedis("Templates:StatsBox:" + $playerName, $t);
    }
    print $t;