NoSQL最佳实践

53

什么是NoSQL数据库、OODB或其他可能存在的缩写的最佳实践?

例如,我经常看到一个字段“type”用于决定客户端应该如何解释DB文档(按couchDB/mongoDB术语),也就是应用程序。

如果适用的话,请使用PHP作为参考语言。阅读:我也对如何在客户端最好地处理此类数据感兴趣,不仅仅限于严格的DB结构。这实际上意味着我还在寻找像SQL DB的“ORM”模式(活动记录,数据映射器等)。

请毫不犹豫地提出关于这样的DB和PHP 5.3新功能如何最好地协同工作的陈述。

2个回答

39

我认为当前NoSQL数据存储和文档数据库的整体理念与传统关系型存储驱动的想法相比,是如此新颖和不同,以至于目前几乎没有(如果有)最佳实践。

我们现在知道,在CouchDB(或任何其他文档数据库)中存储数据的规则与关系型数据库非常不同。例如,基本可以确定的是,规范化和追求第三范式并不是应该努力的目标。一个普遍的例子是一个简单的博客。

在关系型存储中,你会为“文章”、“评论”和“作者”各自创建一张表。每个作者都有很多篇文章,每篇文章都有很多评论。这是一个足够好的模型,并且可以映射到任何关系型数据库上。但是,在文档数据库中存储相同的数据可能会有所不同。你可能会有一组帖子文档,每个文档都有自己的作者和评论集合。当然这可能不是唯一的方法,它也是一种妥协(现在查询单个帖子很快——只需执行一个操作并获取所有内容),但你无法维护作者和帖子之间的关系(因为它们都成为了帖子文档的一部分)。

我也看到过使用“type”属性的示例(在CouchDB示例中)。当然,这听起来是一个可行的方法。它是最好的方法吗?我不知道。当然,在MongoDB中,你会在数据库中使用不同的集合,使得type属性变得毫无意义。但在CouchDB中...也许那是最好的。其他选择?为每种类型的文档单独创建数据库?这似乎有点疯狂,所以我会倾向于自己选择“type”解决方案。但这只是我的想法。也许有更好的解决方案。

我意识到我在这里唠叨了很多,但实际上并没有说什么你不知道的东西。我的观点是 - 我认为我们需要用手头的工具和正在处理的数据进行实验,随着时间的推移,好的想法将会传播并成为最佳实践。我只是觉得你在游戏开始时就过早地问了一些问题。


2
你说得对:现在还为时过早,正如我也所想的一样。虽然我同意你的观点,但我会等待一段时间以获取其他意见。 - Flavius
1
就我目前看来,这强烈取决于您打算对数据执行哪些操作以及应用程序在正常情况下会多频繁地执行这些操作。例如,如果应用程序设置了“跟踪”特定人员(如“推文”)的功能,则将注释嵌入“帖子”中并不是最好的选择。 - Flavius
1
当然。我认为任何出现的最佳实践都将基于数据使用方式。为了最好地满足这些要求,应该做出不同的决策和妥协。 - Mark Embling

7
"NoSQL"更多地应该是关于构建数据存储以符合应用程序要求,而不是构建应用程序以遵循特定结构——这更像是传统的SQL方法。不要仅仅因为一时冲动而放弃关系型数据库,只有在真正需要时才这样做。

我从未说过我想要构建一个跟随其他东西的东西。我在寻找您成功使用的最佳模式,以使事物之间的协作最佳。最好是使用PHP 5.3的功能。此外,我不需要关于使用关系型数据库还是面向文档的数据库的建议。 - Flavius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接