什么时候Redis? 什么时候到MongoDB?

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

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

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

那么你怎么看待它们的使用呢? 什么时候选Redis? 什么时候选择MongoDB?


我会说,这取决于你的开发团队和你的应用需求。

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

MongoDB为具有传统数据库和SQL经验的开发人员提供简单性,缩短学习时间。 但是,Redis的非传统方法需要更多努力来学习,但需要更大的灵活性。

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

如果你问我,我个人的选择是Redis的大部分要求。

最后,我希望你现在已经看到http://antirez.com/post/MongoDB-and-Redis.html


我只是注意到这个问题很古老。 不过,我认为以下几个方面值得加以说明:

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

    MongoDB适用于Hackathons,初创公司或每次不知道如何查询插入的数据。 MongoDB不会对您的底层架构做任何假设。 虽然MongoDB是无模式和非关系型的,但这并不意味着根本没有模式。 它只是意味着您的模式需要在您的应用程序中定义(例如使用Mongoose)。 除此之外,MongoDB非常适合原型设计或尝试。 它的表现并不好,不能与Redis相提并论。

  • 使用Redis来加速您的现有应用程序。

    Redis可以轻松集成为LRU缓存。 使用Redis作为独立的数据库系统是非常罕见的(有些人更喜欢将其称为“关键值”存储)。 像Craigslist这样的网站在其主数据库旁边使用Redis。 Antirez(Redis的开发人员)展示了使用Lamernews,确实可以将Redis用作独立数据库系统。

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

    Redis提供了一堆有用的数据结构(例如集合,哈希,列表),但是您必须明确定义您想要如何存储数据。 简而言之,可以使用Redis和MongoDB来实现类似的功能。 Redis速度更快,但不适合原型设计。 这是您通常更喜欢MongoDB的一种用例。 除此之外,Redis 非常灵活。 它提供的基础数据结构是高性能数据库系统的组成部分。

  • 何时使用Redis?

  • 高速缓存

    使用MongoDB缓存根本没有多大意义。 这太慢了。

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

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

  • 如果你需要真正的高性能。

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

  • 如果你不关心缩放。

    缩放Redis并不像以前那么难。 例如,您可以使用一种代理服务器来在多个Redis实例之间分发数据。 主从复制并不复杂,但是在多个Redis实例中分发密钥需要在应用程序站点上完成(例如,使用散列函数,Modulo等)。 通过比较来缩放MongoDB要简单得多。

  • 何时使用MongoDB

  • 原型,初创公司,Hackathons

    MongoDB非常适合快速原型设计。 尽管如此,表现并不好。 另外请记住,您很可能必须在应用程序中定义某种模式。

  • 当你需要快速改变你的模式。

    因为没有模式! 在传统的关系数据库管理系统中改变表格非常昂贵和缓慢。 MongoDB通过不对底层数据做出很多假设来解决这个问题。 尽管如此,它会尽可能地优化,而不需要您定义模式。

  • TL; DR - 如果性能很重要,并且您愿意花时间优化和组织数据,请使用Redis。 - 如果你需要建立一个原型而不用担心你的数据库太多,可以使用MongoDB。

    进一步阅读:

  • 使用Redis作为主要数据存储时需要考虑的有趣方面

  • Redis的。 假设你已经用php编写了一个站点; 无论出于何种原因,它会变得流行起来,并且超过了它的时代或者已经色情。 你意识到这个php太慢了,“我会失去我的粉丝,因为他们根本不会等待一页10秒。” 你突然意识到一个网页有一个不变的URL(它永远不会改变,哇),如果你愿意的话,主键,然后你记得内存很快,而磁盘缓慢,PHP更慢。 :(然后你使用内存和这个URL来调用一个存储机制,你称之为“key”,而网页内容决定称为“value”。这就是你所拥有的 - 关键和内容,你称之为“meme cache”。你喜欢理查德道金斯,因为他很棒,你可以像松鼠一样缓存你的html,这样你就不需要重写你的垃圾代码,你很高兴,然后你看到其他人已经做到了 - 但是你选择了Redis,因为另一个人混淆猫的图像,一些人与f牙。

    蒙戈。 你已经写了一个网站。 哎呀,你写了很多,并用任何语言。 你意识到你的大部分时间都花在写这些臭鼬SQL子句上。 你不是一个dba,但你在那里,写愚蠢的sql语句......不只是一个,而是到处都是。 “选择这个,选择”。 但特别是你记得令人讨厌的WHERE子句。 凡姓氏等于“桑顿”,电影等于“坏圣诞老人”。 Urgh。 你认为,“为什么这些dbas只是做他们的工作,并给我一些存储过程?” 然后你忘记了一些次要的字段,例如middlename,然后你必须删除表格,导出所有10G的大数据,并用这个新字段创建另一个,然后导入数据 - 并且在接下来的14天内会继续执行10次继续记住像称呼,标题的废话,再加上地址的外键。 然后你认为姓氏应该是姓氏。 几乎每天都有一个变化。 然后你说darnit。 我必须开始编写一个网站/系统,而不必介意这个数据模型bs。 所以你谷歌,“我讨厌写SQL,请不要SQL,让它停止”,但弹出'nosql',然后你读了一些东西,它说它只是转储数据没有任何架构。 你还记得上周的惨败,更多的桌子和微笑。 那么你选择mongo是因为一些像'airbud'这样的大公司会使用它。 甜。 没有更多的数据模型发生变化,因为您有一个模型只是不断变化。

    链接地址: http://www.djcxy.com/p/15157.html

    上一篇: When to Redis? When to MongoDB?

    下一篇: MongoDB/NoSQL: Keeping Document Change History