Mongodb - 可靠性问题仍然很重要吗?

时间:2010-08-15 13:00:30

标签: python sqlite mongodb

我有几个sqlite dbs(我说约15GB),总共约有1m行 - 所以不是超级大。我在看mongodb,它看起来很容易使用,特别是如果我想尝试对构成数据库的文档进行一些基本的自然语言处理。

我过去从未与Mongo合作过,没有必要从头开始学习(将在python中工作)。在谷歌搜索了一下后,我偶然发现了一些关于Mongodb re的恐怖故事。可靠性。这仍然是一个主要问题吗?在紧急情况下,我当然会保留sqlite备份,但我不必经常重建我的mongo数据库。

想知道人们最近与Mongo实际面临的数据腐败问题是什么?这是一个大问题吗?

谢谢!

5 个答案:

答案 0 :(得分:10)

正如其他人所说,MongoDB目前没有单服务器持久性。幸运的是,设置多节点复制是 dead easy 。您甚至可以在另一个数据中心设置第二台计算机,并将数据自动复制到其中!

如果写必须成功,则可以使Mongo不会从插入/更新返回,直到该数据已复制到 n 从属。这可确保您至少拥有 n 个数据副本。副本集允许您即时添加和删除群集中的节点,而无需任何重要工作;只需添加一个新节点,它就会自动同步数据副本。删除节点,群集重新平衡自身。它设计用于跨多台机器,多个节点并行运行;这是首选的默认设置,与MySQL相比,它需要一台巨型机器来完成它的工作,然后你可以在需要扩展时对抗奴隶。这是一种不同的数据存储和扩展方法,但如果您花时间了解它在假设方面的差异,以及如何构建利用其优势的架构,那么这是一种非常舒适的方法。

答案 1 :(得分:9)

是的,耐用性是mongo的一个大问题。您必须在mongodb中使用复制集以获得持久性(您需要至少2台计算机),否则您可能会因电源故障而在最后1分钟内松动。在mongo中没有单一的服务器耐用性,但据我所知,它将被开发为1.7-1.8。崩溃后你必须手动修复db,如果你的数据很大,rapair操作可能需要几个小时。没有交易或酸,因此它不适合电子商务或银行应用程序。

您不应该使用mongo的开发版本(奇数版本号,如1.3.x,1.5.x,1.7.x是开发版本),您更喜欢使用64位操作系统。如果你在网上挖掘关于mongo的灾难文章,问题的根源在大多数情况下都是这两个。

CouchDB,Cassandra和postgresql都具有很强的耐用性(默认情况下,fsync在cassandra和postgresql中为10毫秒),因此它们都具有单一服务器持久性。

如果您需要简单的可扩展性,容错和负载平衡; cassandra是最好的,但查询选项很差。失败的节点可能会消失并在一段时间后返回,没问题,系统自动修复。

编辑: mongo 1.8带有日记功能(允许持久性),但它不是默认设置。另请查看此http://news.ycombinator.com/item?id=2684423

此致

Serdar Irmak

答案 2 :(得分:4)

“MongoDB支持自动分片架构,支持跨多个节点进行水平扩展。” - source因此,您需要运行多个节点以实现平衡和故障转移支持。如果您想要运行单个实例,如果电源突然丢失则不会失败,您需要支持{DB}等ACID的东西。话虽如此,我已经在工作了一个月使用mongo并且它没有崩溃,但我们很快就会转向6节点集群。

  

<强>耐久性

     

产品采用不同的方法   耐用性。 CouchDB是一个   db只能“崩溃”设计   随时终止并留下来   是一致的。 MongoDB采用了不同的方式   耐久性的方法。在一台机器上   崩溃,然后会运行一个   repairDatabase()操作时   再次启动(类似于MyISAM)。   MongoDB建议使用复制    - LAN或WAN - 为给定服务器提供真正的持久性   永远死了。总结一下:   CouchDB在耐用性方面更好   使用没有的单个服务器   复制。

来自mongodb.org的官方网站。

答案 3 :(得分:3)

Mongo没有ACID属性,特别是持久性。因此,如果过程没有干净地关闭或机器断电,您可能会遇到问题。您应该实现备份和冗余来处理它。

答案 4 :(得分:2)

如果在sqlite备份中也有相同的数据,我没有看到问题。您可以随时重新填充MongoDb数据库。重新灌装只需几分钟。