我想在数据库中保存一些书籍。我对couchdb感兴趣,因为它 可以使用html格式直接提供内容。
将要存储的图书大小在500Kb到50Mb之间变化。 每本书还会存储它的目录,作者,出版商等。 这些书将按其类别分组。还有一些大书 分为几卷。
将提供的主要功能是按关键字查找书页 用户可以对数据库中的所有书籍进行处理,也可以通过它进行过滤 类别或书籍。我不介意慢插入,因为它会完成 偶尔
现在,我对设计有疑问。我想出了两个设计 它的视图功能:
将每本书存储为单个文档:
设计看起来像这样:
{
_id: "book name because it's unique",
author: {
name: "Some name",
bio: "Author's biography if available"
},
contents: [
{
text: "some long text",
page: 14
}
]
publisher: "Some information about publisher"
}
视图映射功能如下所示:
function (doc) {
if (doc._id && doc.contents) {
for (var i = 0; i < doc.contents.length; ++i) {
var page = doc.contents[i];
emit([doc._id, page.page], {
title: doc.title,
content: page.text,
page_number: page.page,
author: doc.author
});
}
}
}
将书籍,作者,内容拆分为自己的文件:
书籍设计如下:
{
_id: "book:book's name",
type: "book",
publisher: "some information about publisher"
}
作者设计:
{
_id: "author:author's name",
type: "author",
name: "author name",
bio: "author biography",
book_id: "book:book's name"
}
内容设计:
{
_id: "page: unique id",
type: "page",
page: 1231,
text: "the contents",
book_id: "book:book's name"
}
视图映射功能如下所示:
function (doc) {
if (doc.type === "page") {
emit([doc.book_id, doc._id], {
book_id: doc.book_id,
content: doc.text,
page_number: doc.page
});
}
}
那么哪一个更好?或者你可以建议一个更好的方法来做到这一点? 或许SQL数据库更适合具有功能的书籍数据库 我上面提到过?
答案 0 :(得分:0)
我认为两者都可用..如果你没有从页面中发出单个单词。 我遇到了麻烦,在一个文档中发出了大量的值(100.000+)..
我个人喜欢在一个文档中包含所有信息的可能性..所以不需要进行多个查询f.e. 但请记住:如果要在结果中显示页面,它们的键(值)会变得非常大。 如果你的常规用例只显示单个页面..第二个是更好的。并对页面文档使用include_docs = true。 (较小的搜索树)
是“一个长文本”的页面文本,还是要查询的关键字?
还有其他一些需要改进的地方,但也许您首先会对可搜索的关键字进行分类..