博客数据的NoSql解决方案

博客数据的NoSql解决方案,nosql,Nosql,我计划写一个博客风格的应用程序,想知道我应该用什么来存储 我打算使用NoSql解决方案,因为使用db模式很无聊。我相信我可以用json结构化数据实现大部分功能 在设计时,有哪些考虑因素?哪种NoSql技术更适合这一目的 大致看一下mongo/couchdb就可以了,我希望能得到一些基于经验的建议 谢谢你的帮助 MongoDB/CouchDB 我想两者中最容易开始的是MongoDB。它更像是一个好的旧关系数据库,因为您可以向列添加索引或调用count之类的操作。就我所知,在CouchDB中,对于所

我计划写一个博客风格的应用程序,想知道我应该用什么来存储

我打算使用NoSql解决方案,因为使用db模式很无聊。我相信我可以用json结构化数据实现大部分功能

在设计时,有哪些考虑因素?哪种NoSql技术更适合这一目的

大致看一下mongo/couchdb就可以了,我希望能得到一些基于经验的建议

谢谢你的帮助

MongoDB/CouchDB 我想两者中最容易开始的是MongoDB。它更像是一个好的旧关系数据库,因为您可以向列添加索引或调用count之类的操作。就我所知,在CouchDB中,对于所有此类函数,您宁愿使用Map Reduce。在CouchDB中,由所谓的

此外,MongoDB将数据库、表概念大致映射到NoSQL(两级数据访问),而CouchDB只知道一级(数据库)

因此,我猜CouchDB在一开始可能有点难以理解,因为您必须按某种类型选择文档(或者使用多个dbs),但我认为人们使用的是另一个属性
type
,请参见此

MongoDB通常使用可以包含在编程语言中的API(如果存在库,但大多数语言都存在库)。然后这些调用以二进制格式发送到服务器。另一方面,CouchDB使用REST-API

数据结构 你可以在网上找一些教程,它们经常会解释一些关于博客的内容,因为博客是面向文档数据的一个很好的例子

让我们自己看一看:您的帖子将有一个表(或
type
,如果您使用CouchDB)。每个帖子可以有一个文本、一些标记、一个日期、注释。文档数据库的要点是,您可以将所有内容存储在文档之外,并保存关系数据库所具有的所有关系

这意味着,我们可以像这样对我们的帖子进行建模:

{type: post,
 date: 2012-06-19 22:14:23,
 author: user1462192,
 text: Welcome to my blog,
 comments: [
    {author: Aufziehvogel,
     date: 2012-06-19 22:14:45,
     text: Hello!
    },
    {author: user1462192,
     date: 2012-06-19 22:14:45,
     text: Hello, too!
    }
 ],
 tags: [welcome, new, interesting]
}
{name: Aufziehvogel,
 age: 21,
 registration: 2012-06-19,
 interests: [php, nosql, data-mining, foreign-languages]
}
所以这就是一个帖子的样子

在开发软件时,您必须经常做些什么。考虑您将保存哪些数据。考虑数据之间的关系。然后,对于面向文档的数据库,您还必须考虑您需要如何访问它

有时,您可能有一些数据不应保存为文章本身的子元素,因为它太大。您可能不仅有作者的姓名,而且还有年龄、注册日期等更多信息

然后,用户可能如下所示:

{type: post,
 date: 2012-06-19 22:14:23,
 author: user1462192,
 text: Welcome to my blog,
 comments: [
    {author: Aufziehvogel,
     date: 2012-06-19 22:14:45,
     text: Hello!
    },
    {author: user1462192,
     date: 2012-06-19 22:14:45,
     text: Hello, too!
    }
 ],
 tags: [welcome, new, interesting]
}
{name: Aufziehvogel,
 age: 21,
 registration: 2012-06-19,
 interests: [php, nosql, data-mining, foreign-languages]
}
您不希望将此数据附加到每个博客文章中,因为其中一些可能会发生变化,并且因为它非常大。相反,您(就像使用关系数据库一样)会在您的文章数据中存储对用户的引用。然后您必须合并作者和博客文章,如上面链接的演示文稿中所示(第40-42页)。这会将所需作者与博客文章合并

您还可以做的是,将authorname和ID保存在那里,以便能够显示名称并生成HTML链接,而不必从数据库中获取“真实”的作者

mytable = Connection().mydatabase.mytable # MongoDB
mytable.save(document)

mydb = couchdb.Server()['mydatabase'] # CouchDB
mydb.save(doc)
验证 Zuelke还指出,对于面向文档的dbs,应用程序的任务是检查数据是否格式正确。在MySQL中,许多任务可以由数据库执行(列、数据类型、长度、唯一键),但当使用面向文档的dbs时,您必须在应用程序中自己执行(除此之外,我认为MongoDB具有一些特性,比如独特的键)

这使得良好的代码结构也很重要,这样您就不必担心太多地方的数据格式


我想还有更多的话要说,但我希望这是第一个开始。

使用app42提供的NoSQL数据库。以下是如何使用app42 NoSQL。