2012-03-02 42 views
1

我过去一直在使用MySQL和MsSQL。现在我也在使用MongoDB,并且我发现它在处理文档时非常灵活,哪些字段不断变化 - 对于敏捷开发非常有用。面向文档的数据库或关系数据库,我该如何选择?

由于面向文档的数据库似乎对开发人员来说使用起来更方便,而且在读取访问方面速度也更快,所以我可以举一些例子,说明哪种情况适用于哪种情况比其他情况更好?

+0

这是一个非常好的问题要注意! –

+0

但是,似乎没有人知道答案! – hllau

+0

这是几天前在[dba.stackexchange.com]上提出的(http://dba.stackexchange.com/questions/13744/database-suggestion-for-a-social-network-knowledge-base-community/14107 )。 –

回答

1

我是一名数据工程师,我必须处理文档数据库和经典的RDBMS;我必须执行应用程序代码,ETL,并且我编写了自定义包装器,用于从文档数据库中提取json,并构建完整的关系架构以加载用于报告目的的数据。

首先,文档数据库确实为某些活动提供了很好的东西,而RDBMS提供了某些在文档数据库中缺少的功能。

RDBMS提供了使用规则,触发器等非常清晰地控制数据的功能。大多数文档数据库不提供此功能,它们是否应该这样做是值得怀疑的。他们遵循的规则越多,失去的灵活性就越大,这是他们的主要收获。

您将遇到的文档数据存储问题之一是您必须谨慎选择顶级入口点,否则您将不得不创建多个数据存储区,并且记住大多数情况下都没有联接语句(忽略Google最近撰写论文的工具)。

我认为数据控制应该发生在数据库层,以防止数据损坏。然后,我又是一个数据家伙。应用程序,搜索引擎优化和商务人士经常会不同意这一点。因此,当接受报告的人告诉我他们需要什么时,我接受并继续努力,让所有事情一起工作。

+0

你是否有任何可以演示的用例? –

+0

我可以描述用例。请耐心等待,因为我今晚喝了几杯酒(可能不止一些),但我会尽力描述而不是直接详细说明 - 而且我对此很少有人物。首先,设计良好的约束条件良好的数据库可以覆盖几乎所有的用例。另外,触发器为您提供标准文档数据库中缺少的各种功能。如果要使用该功能,则必须将该功能编码到您的应用程序中,例如,触发器不在MongoDB中。 PostgreSQL有NOTIFY和触发器。这需要考虑。 – Horus

+0

我可以进入更多细节,但不幸的是,这些决定需要独立完成。如果你想拥有无模式数据库(因此你不需要事先考虑数据结构)使用文档数据库。另一方面,在我编写任何应用程序之前,我倾向于先考虑我的数据结构:我的用户数据的外观如何等等。我个人认为这是一种更好的方式,但实际上,这只适用于我。有些人首先想到路径和行动。你怎么想?之后,决定你会做什么。我将首先关注RDBMS。 – Horus