如何在couchdb中存储书籍?

时间:2016-06-03 11:36:18

标签: database-design

我想在数据库中保存一些书籍。我对couchdb感兴趣,因为它 可以使用html格式直接提供内容。

将要存储的图书大小在500Kb到50Mb之间变化。 每本书还会存储它的目录,作者,出版商等。 这些书将按其类别分组。还有一些大书 分为几卷。

将提供的主要功能是按关键字查找书页 用户可以对数据库中的所有书籍进行处理,也可以通过它进行过滤 类别或书籍。我不介意慢插入,因为它会完成 偶尔

现在,我对设计有疑问。我想出了两个设计 它的视图功能:

  1. 将每本书存储为单个文档:

    设计看起来像这样:

    {
      _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
          });
        }
      }
    }
    
  2. 将书籍,作者,内容拆分为自己的文件:

    书籍设计如下:

    {
      _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
        });
      }
    }
    
  3. 那么哪一个更好?或者你可以建议一个更好的方法来做到这一点? 或许SQL数据库更适合具有功能的书籍数据库 我上面提到过?

1 个答案:

答案 0 :(得分:0)

我认为两者都可用..如果你没有从页面中发出单个单词。 我遇到了麻烦,在一个文档中发出了大量的值(100.000+)..

我个人喜欢在一个文档中包含所有信息的可能性..所以不需要进行多个查询f.e. 但请记住:如果要在结果中显示页面,它们的键(值)会变得非常大。 如果你的常规用例只显示单个页面..第二个是更好的。并对页面文档使用include_docs = true。 (较小的搜索树)

是“一个长文本”的页面文本,还是要查询的关键字?

还有其他一些需要改进的地方,但也许您首先会对可搜索的关键字进行分类..