NoSQL最佳实践

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

例如,我经常看到一个字段“type”用于决定数据库文档(以couchDB / mongoDB术语)如何由客户端应用程序来解释。

在适用的情况下,使用PHP作为参考语言。 阅读:我也感兴趣的是如何在客户端最好地处理这些数据,而不仅仅是严格的数据库结构。 这实际上意味着我也在寻找像SQL数据库(活动logging,数据映射器等)的“ORM”模式。

不要犹豫,就如何这样一个数据库和PHP 5.3的新function可以最好地协同工作。

我认为,目前,NoSQL数据存储的概念和文档数据库的概念是如此新颖,不同于驱动关系存储的既定思路,目前很less有(如果有的话)最佳实践。

在这一点上,我们知道在CouchDB(或任何其他文档数据库)中存储数据的规则与关系数据的规则相当不同。 例如,3NF的标准化和瞄准不是一个应该争取的事实。 其中一个常见的例子就是一个简单的博客。

在关系商店中,每个表格都有“Posts”,“Comments”和“Authors”。 每个作者都有很多post,每个post都会有很多评论。 这是一个工作得很好的模型,可以很好地映射到任何关系数据库。 但是,在docDB中存储相同的数据很可能是相当不同的。 你可能有一些类似Post文档的集合,每个文档都有自己的作者和评论集合。当然,这可能不是唯一的方法,你可以做到这一点,这是一个妥协(现在查询单个post是很快的 – 你只做一个操作,把所有的东西都拿回来),但是你没有办法保持作者和post之间的关系(因为它全部成为post文档的一部分)。

我也看过使用“type”属性的例子(在CouchDB的例子中)。 当然,这听起来像一个可行的方法。 这是最好的吗? 我没有任何线索。 当然,在MongoDB中,你会在数据库中使用单独的集合,使得types属性完全废话。 在CouchDB虽然…也许这最好的。 其他的select? 为每种types的文件分开数据库? 这似乎有点糊涂,所以我自己倾向于“types”的解决scheme。 但那只是我。 也许有更好的东西。

我意识到我已经在这里漫步了很多,很less说,很可能没有你不知道的东西。 我的观点是,尽pipe我认为它取决于我们尝试使用的工具和我们正在使用的数据,随着时间的推移,好的想法将被传播并成为最佳实践。 我只是觉得你在比赛中问得太早了。

“NoSQL”应该更多地关注构build数据存储以满足您的应用程序需求,而不是构build遵循特定结构的应用程序 – 这更像是一种传统的SQL方法

不要因为“放弃关系数据库”; 只有当你的应用程序真的需要时才会这样做。