我打算写一个博客风格的应用程序,想知道我应该用什么来存储。
我打算使用NoSql解决方案,因为做数据库架构很无聊。而且我相信我可以使用json结构化数据完成大部分功能。
设计时需要考虑哪些因素?哪种NoSql技术更适合这个目的?
粗略地看mongo / couchdb会做什么,我希望得到一些基于经验的建议。
感谢您的帮助!
答案 0 :(得分:1)
我想两者中较容易开始的是MongoDB。它有点像旧的关系数据库,因为你可以添加索引到列或调用像count这样的操作。在CouchDB中,据我所知,你宁愿使用Map-Reduce来实现所有这些功能。 CouchDB中的索引由所谓的views生成。
MongoDB也将数据库,表概念大致映射到NoSQL(数据的两级访问),而CouchDB只知道一个级别(数据库)。
mytable = Connection().mydatabase.mytable # MongoDB
mytable.save(document)
mydb = couchdb.Server()['mydatabase'] # CouchDB
mydb.save(doc)
所以我认为CouchDB在开始时可能有点难以理解,因为你必须通过某种类型选择文档(或使用多个dbs,但我认为另外一个属性type
就是人们使用,请参阅此presentation by David Zuelke page 41。
MongoDB通常使用您可以包含在编程语言中的API(如果存在库,但它们适用于大多数语言)。然后,这些调用以二进制格式发送到服务器。另一方面,CouchDB使用REST-API。
您可以浏览网络上的一些教程。他们经常解释有关博客的事情,因为博客是面向文档的数据的一个很好的例子。
让我们自己看一下:你的帖子会有一张桌子(或type
,如果你使用CouchDB)。每个帖子都可以有文字,一些标签,日期,评论。关于文档dbs的一点是,您可以将所有内容存储在文档旁边并保存关系dbs所具有的所有关系。
这意味着,我们可能会像这样对我们的帖子进行建模:
{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链接,而无需从数据库中抓取“真正的”作者。
Zuelke还表明,对于面向文档的dbs,应用程序的任务是检查数据是否格式正确。在MySQL中,许多任务可以由数据库执行(列,数据类型,长度,UNIQUE键),但是当使用面向文档的dbs时,你必须在应用程序中自己完成(除了我认为MongoDB具有像唯一键之类的东西) )。
这使得良好的代码结构也很重要,因此您不必担心太多地方的数据格式。
我想可能会说得更多,但我希望这是第一次开始。
答案 1 :(得分:0)
使用app42提供的NoSQL数据库。这是如何使用app42 NoSQL。 http://api.shephertz.com/apis/storage.php