2010-09-18 41 views
7

我已经阅读了很多MongoDB。MongoDB作为主数据库?

我喜欢它提供的所有功能,但是我想知道是否有可能将它作为我应用程序的唯一数据库,包括存储敏感信息。

我知道它会影响ACID中的耐久性部分,但我将作为一个解决方案在不同位置拥有1个主设备和2个从设备。

如果我这样做,是否有可能使用它作为主数据库,存储所有内容?

更新:

让我们这样说吧。

我真的需要一个文档存储而不是传统的dbms来创建我的灵活应用程序。但是,如果我有多个数据库复制和主从,MongoDB足够可靠地存储客户敏感信息?因为据我所知,一个主要的缺点是它会损害ACID中的D。所以我用多个数据库解决它。

现在不存在数据丢失等重大问题?

有人告诉我,在MongoDB中,客户可以被计费两次。有人可以启发这个吗?

+3

为什么你想要或需要使用MongoDB?你看到它们有什么好处?为什么说,postgres不适合你的应用程序?有些公司(friendfeed)只是简单地将JSON存储在一个RDBMS中,给出一个灵活的架构以及一个普通DB的ACID好处。 – 2010-09-18 04:06:26

+0

你也可以使用CouchDB,它也是一个文件db。 – TTT 2010-09-18 04:26:44

+0

@Mark。因为我更喜欢使用嵌入对象而不是表,列和行的对象和对象。我更喜欢OOP范式,因为它符合人类思维的方式。 XML/JSON数据类型不能代替它。它只是用于存储小型结构而不是整个数据库结构。 – 2010-09-18 05:34:41

回答

7

是的,MongoDB可以作为应用程序唯一的数据存储。使用复制并确保您知道safe writesw

有人告诉我,在MongoDB上,客户可以支付 两次。有人可以启发这个吗?

我猜谁告诉你说的是最终的一致性。一些NoSQL数据库最终是一致的,这意味着你可能有冲突的写入。然而,MongoDB并不是非常一致的(就像关系数据库一样)。

+0

我很难理解安全写入。 fsync()和getLastError()有什么区别? – 2010-09-19 07:52:59

+1

安全写入返回写入是否成功(数据库已启动,未尝试将非唯一值插入唯一字段等)。 fsync实际上确保将更改写入磁盘,而不仅仅存在于内存中。请参阅http://nosql.mypopescu.com/post/1052759609/mongodb-safe-and-fsync-explained。 – kristina 2010-09-19 14:45:31

3

这可能吗?当然。为什么不?如果您愿意,可以将所有内容作为XML存储在文本文件中。

这是最好的主意吗?这取决于你想要做什么,你的系统架构的其他部分,你的网站想要实现的规模等等。

+0

阅读我的更新。 – 2010-09-18 03:21:02

5

您的应用程序是否灵活与否与您使用“nosql”,“文档数据库”或适当的RDBMS无关。没有人使用你的应用程序将会照顾任何方式。

如果编码时需要灵活性,您应该研究框架,比如ActiveRecord for Ruby,它可以使DB接口更加简单,通用和强大。在那个级别上,你可以获得更多的不仅仅是改变数据库,甚至可以变成数据库不可知的,这意味着你可以更改数据库而不用更改任何代码。事实上,我发现ActiveRecord通过将我从繁琐且容易出错的“与SQL混合的代码”中解放出来,提高了我的工作效率。

事实上,如果您觉得您需要一个无模式数据库,对于关键数据,您做错了什么。你正在为项目的关键需求提供你自己的便利,或者以为你以后不会遇到问题而无知。迟早,缺乏一致性会咬你的屁股,很难!

我觉得你是对hesistant RDBMS,因为你是不是真的所有的术语,语法舒适和良好的CS原则。

相信我,如果你要创造任何价值的应用程序,你百倍更好的学习SQL,首先ACID和良好的数据库的原则。只要阅读基础知识,并从现在的任何位置建立您的知识。对我们每一个人来说都是一样的,这需要时间,但是你从一开始就学会做事。

低层次的工具,如MongoDB的和等价只是为你提供无限更多的弹药,以拍摄自己在脚下。他们看起来很容易。但实际上,他们为编码人员留下了难以处理的工作,而一旦您掌握了基本知识,RDBMS将为您处理更多的问题。

为什么要使用电脑,如果你想要更多的工作,你可以回到纸上。设计将是一件轻而易举的事情,并且实现可以超快。完成。除了它当然不会是正确的。

在现实世界中,我们不能忽视的一致性,数据库设计和多音CS的原则。这就是为什么首先研究它们并继续学习的好主意。

不要购买炒作。你在这里问关于MongoDB的问题,但包括你真的需要其功能。凭借25年的电脑使用经验,我根本不会购买它。如果你有创造性地思考,可以使RDBMS做你想做的任何事情,或者可以利用框架来避免错误和浪费时间。

手工艺ACID属性到MongoDB的好像更多的工作对我来说,和经验,听起来像一种徒劳的锻炼; Tibial,而不是使用什么是已经设计以适应这样的目的。