2

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

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

4

2 回答 2

1

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

连接对象中,您可以指定选项来调整写入关注点。比较重要的是:

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

编辑:

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

编辑2:

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

无论如何,如果你需要提高持久性,你应该使用副本集来减少单点故障

于 2013-05-15T00:05:06.850 回答
1

不要使用 Mongo,我们正在远离它……主要是因为我们永远无法确定数据是否实际写入磁盘

嗯,jounalled acked 写?

它仍然使用 JSON

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

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

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

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

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

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

于 2013-05-15T09:53:59.207 回答