【问题标题】:How to store books in couchdb?如何在couchdb中存储书籍?
【发布时间】:2016-06-10 19:27:13
【问题描述】:

我想在数据库中保存一些书籍。我对 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
        });
      }
    }
    

那么,哪个更好?或者,也许您可​​以提出一个更好的方法来做到这一点? 或者也许 SQL 数据库更适合具有功能的书籍数据库 我上面提到过?

【问题讨论】:

    标签: database-design


    【解决方案1】:

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

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

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

    还有一些其他的地方需要改进,但也许你先把可搜索的关键字分开..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 2014-04-04
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2019-02-24
      • 1970-01-01
      相关资源
      最近更新 更多