【问题标题】:The Current State of Mongo DB 2013 [closed]Mongodb 2013 的现状 [关闭]
【发布时间】:2013-05-09 09:13:27
【问题描述】:

我一直在使用 MongoDB(通过 MongoLab)进行我的所有 Web 应用程序开发,并且一直喜欢它的易用性和与 AngularJS 的集成。然而,最近,与我一起工作的很多曾经是 MongoDB 传道者的人开始退缩。我的一位 SYSADMINS 明确表示,“不要使用 Mongo,我们正在放弃使用它……主要是因为我们永远无法确定数据是否真正写入磁盘”。

我发现这很糟糕。从那以后,我检查了 CouchDB,我觉得这很酷。它仍然使用 JSON,并且还提供了一个 GUI(被褥)和一个基本的 CLI。这让我感到困惑,因为 Mongo 似乎拥有强大的追随者、用户群和社区。在我真正开始开发并将我的项目从 Mongo 迁移到 Couch 之前,我想了解开发人员正在使用什么来了解这只是 FUD 还是实际问题。

【问题讨论】:

  • 而不是想知道它何时写入磁盘,why not specify it
  • CouchDB 在这方面没有什么不同 - 它接受写入,它 fsyncs。如果系统在两者之间崩溃,则数据可能无法写入磁盘。如果您的系统管理员是 RDBMS 类型,他们可能不喜欢您使用任何非事务性 noSQL 类型系统。
  • CoreyOgbun & @AsyaKamsky 很高兴知道,这正是我发布这个问题的原因。
  • @user2365841 整个白痴。

标签: mongodb couchdb nosql


【解决方案1】:

MongoDB 专注于速度,但这并不意味着您永远无法确定数据是否已写入磁盘。

connection object 中,您可以指定选项来调整写入问题。比较重要的是:

  • w:表示 mongo 客户端应该等待多少台机器。如果将此设置为 N,mongo 客户端将等待 N 台机器将此数据写入磁盘。如果您有 replica sets,此选项很有用。
  • j:表示 mongo 客户端是否应该等待操作被放到日志上。

编辑:

我放了 Python 驱动的链接,因为 Python 是一种非常高级的语言,但是这些选项应该在每个 MongoDB 驱动中都可用。

编辑2:

正如@asya-kamsky 所说,即使您选择w > 0,MongoDB 也只会更新mmapped file,并且更改只会在syncDelay 之后fsync 到磁盘.

无论如何,如果你需要改进durability,你应该使用副本集来减少single point of failure

【讨论】:

  • 这在技术上并不准确。如果您使用 w:N,那么它将等待 N 个服务器将其写入 mmapped 文件(在 RAM 中),因此它可能不会在 100 毫秒内被 fsync 到磁盘。如果您指定 j:1 那么它将等到日志刷新到磁盘。请注意,您可以同时使用 w:N 和 j:1 - j 将应用于主节点。
  • @asya-kamsky:你说得对,我忘记了 mmap 功能。
【解决方案2】:

不要使用 Mongo,我们正在放弃它...主要是因为我们永远无法确定数据是否真正写入磁盘

嗯,jounalled acked writes?

它仍然使用 JSON

JSON 不是很好,BSON 也是 JSON 的更高级别版本,具有更具代表性的表示法,允许存储和表示 JSON 不能的对象。

并且还提供了一个 GUI(被褥)和一个基本的 CLI。

有一个基本的 CLI,如果您喜欢的话,您可以获得非常多的 MongoDB 图形用户界面。

在我真正开始开发并将我的项目从 Mongo 迁移到 Couch 之前,我想了解开发人员正在使用什么来了解这只是 FUD 还是实际问题。

我在使用 CouchDB 时发现的一个注释,你会发现它使用了更多的空间来维护 JSON 以及它现有的版本控制机制。不仅如此,它的 Map Reduce 还不如 MongoDBs 聚合框架(坦率地说)。

不过,我应该强调的是,在我放弃它之前,我只使用了少量。

【讨论】:

  • @Sammayae 感谢您的意见!发布此消息后,我意识到向我提出的许多问题都是非常固执的。我将坚持使用 MongoDB,因为事实证明它有很多 FUD。谢谢。
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 2017-05-16
  • 2014-01-04
  • 2018-08-25
相关资源
最近更新 更多