Я хочу сохранить некоторые книги в базе данных. Меня интересует couchdb, потому что он может обслуживать контент напрямую с html-форматированием.Как хранить книги в couchdb?
Размер книги, который будет храниться, варьируется от 500КБ до 50 МБ или более. В каждой книге также будет указано содержание, автор, издатель и т. Д. Книги будут сгруппированы по их категории. И некоторые большие книги - это , разделенные на несколько томов.
Главной особенностью, которая будет предоставлена, является поиск книг по ключевым словам , которые пользователь может делать со всеми книгами в базе данных или путем фильтрации по категориям или по книгам. Я не против медленной вставки, потому что это будет сделано изредка.
Теперь я сомневаюсь в дизайне. Я придумал два дизайна с это вид карты функция:
магазин каждую книгу в виде единого документа:
Конструкция выглядеть следующим образом:
{ _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 }); } } }
Сплит-книга, auth или содержание в нем собственный документ:
Книга дизайн выглядеть следующим образом:
{ _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 больше подходит для базы данных книг с функциями Я упомянул выше?