2016-06-03 7 views
0

Ich möchte einige Bücher in der Datenbank speichern. Ich bin an Couchdb interessiert, weil es den Inhalt direkt mit html formatieren kann.Wie Bücher in Couchdb speichern?

Die zu speichernde Buchgröße variiert zwischen 500 KB und 50 MB oder mehr. Jedes Buch speichert auch das Inhaltsverzeichnis, den Autor, den Herausgeber usw. Die Bücher werden nach ihrer Kategorie gruppiert. Und einige große Bücher sind in mehrere Bände unterteilt.

Das Hauptmerkmal, das zur Verfügung gestellt wird, ist Buchseiten nach Stichwort finden, die der Benutzer für alle Bücher in der Datenbank oder durch Filterung tun kann, indem sie sie Kategorie ist oder Buch. Ich habe nichts dagegen, langsam einfügen, denn es wird gelegentlich getan werden.

Jetzt bin ich im Zweifel über das Design. Ich kam mit mit zwei Design bis es Karte ansehen Funktion ist:

  1. Shop jedes Buch als ein einziges Dokument:

    Der Entwurf sieht wie folgt aus:

    { 
        _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" 
    } 
    

    Und die Aussicht map-Funktion sieht wie folgt aus:

    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. Split Buch, auth oder, Inhalte zu seinem eigenen Dokument:

    Das Buch Design sieht wie folgt aus:

    { 
        _id: "book:book's name", 
        type: "book", 
        publisher: "some information about publisher" 
    } 
    

    Autor Design:

    { 
        _id: "author:author's name", 
        type: "author", 
        name: "author name", 
        bio: "author biography", 
        book_id: "book:book's name" 
    } 
    

    Inhalt Design:

    { 
        _id: "page: unique id", 
        type: "page", 
        page: 1231, 
        text: "the contents", 
        book_id: "book:book's name" 
    } 
    

    Und die Karte ansehen Funktion sieht so aus:

    function (doc) { 
        if (doc.type === "page") { 
        emit([doc.book_id, doc._id], { 
         book_id: doc.book_id, 
         content: doc.text, 
         page_number: doc.page 
        }); 
        } 
    } 
    

Also, welche ist besser? Oder vielleicht können Sie einen besseren Weg vorschlagen, dies zu tun? Oder vielleicht SQL-Datenbank ist besser geeignet für Bücher Datenbank mit Funktionen Ich oben erwähnt?

Antwort

0

ich denke beide sind verwendbar .. wenn Sie nicht einzelne Wörter von einer Seite ausstrahlen. ich lief in Schwierigkeiten, eine riesige Menge von Werten (100.000+) innerhalb eines Dokuments emittierenden ..

Ich persönlich mag die Möglichkeit, alle Informationen in einem Dokument zu haben .. so gibt es keine Notwendigkeit mehr als eine Abfrage zu machen zB Aber denken Sie daran: Wenn Sie die Seite im Ergebnis anzeigen möchten, werden die Schlüssel (Werte) ziemlich groß. Wenn Sie im regulären Anwendungsfall nur einzelne Seiten anzeigen, ist der zweite besser. und verwende include_docs = true für die Seitendokumente. (kleiner Suchbaum)

ist "ein langer Text" der Seitentext, oder sind das die Schlüsselwörter, die abgefragt werden sollen?

Es gibt einige andere Dinge zu verbessern, aber vielleicht Sie die durchsuchbaren Schlüsselwörter zuerst ..