Frage

Wer weiß, einen API (php vorzuziehen, aber ich würde in jeder Sprache interessiert sein) für die Erstellung von Wiki-ähnlicher Datenspeicherung?

Wie wäre es alle Ressourcen auf Ihrem eigenen Wiki-Text rollen? Wie andere Klartext Wikis das Format der Textdatei behandeln?

Ich verstehe ich Markdown oder Textile für die Formatierung verwenden kann. Aber was mich am meisten interessiert, ist, wie die Klar Speicherung von Multi-User-Bearbeitungen zu nähern.

Ich schreibe eine Web-Anwendung, die in erster Linie Datenbank angetrieben wird. Ich möchte mindestens ein Textfeld dieser Datenbank in einem Wiki-ähnlichen Format. Insbesondere kann dieser Text durch mehrere Benutzer mit der Fähigkeit, bearbeitet werden zu jeder Version eines Rollback. Denken Sie das wiki / bio Abschnitt Last.FM (fast die gesamte Website ist streng strukturiert durch eine Datenbank mit Ausnahme dieses einen Abschnitt pro Künstler).

Bisher mein Ansatz auseinander MediaWiki zu nehmen und es in eine Datenbank Verkeilen scheint übertrieben. Ich denke, es wäre viel einfacher, zu meinem eigenen Wiki-Text zu rollen, und speichern Sie diese Datei in der entsprechenden Textfeld einer Datenbank.

War es hilfreich?

Lösung

Also, im Grunde ist dies ein "wie kann ich Version von Textinformationen in meiner DB".

Nun, die einfachste Art und Weise einfach ist das Kopieren der Daten.

Einfach, erstellen Sie eine „Version“ Tabelle, die „alte Versionen“ der Daten und verknüpfen Sie zurück zu Ihrer Haupt-Tabelle enthält.

create table docs {
    id integer primary key not null,
    version integer not null,
    create_date date,
    change_date date,
    create_user_id integer not null references users(id),
    change_user_id integer references users(id),
    text_data text
}

create table versions {
    id integer primary key not null,
    doc_id integer not null references docs(id),
    version integer,
    change_date date,
    change_user integer not null references users(id),
    text_data text
}

Wenn Sie Ihr Originaldokument aktualisieren, kopieren Sie den alten Text-Wert in dieser Tabelle den Benutzer und Änderungsdatum kopieren und die Version stoßen.

select version, change_date, change_user, text_data 
    into l_version, l_change_data, l_change_user, l_text_data 
from docs where id = l_doc_id;

insert into versions values (newid, l_doc_id, l_version, 
    l_change_date, l_change_user, l_text_data);

update docs set version = version + 1, change_date = now, 
    change_user = cur_user, text_data = l_new_text where id = l_doc_id;

Sie können sogar in einem Trigger dies tun, wenn Ihre DB diejenigen unterstützt.

Störungen mit dieser Methode sind, dass es eine vollständige Kopie der Daten (also, wenn Sie ein großes Dokument haben, die Version bleibt groß). Sie können, dass mildern durch so etwas wie diff (1) und Patch (1) verwendet wird.

Zum Beispiel:

diff version2.txt version1.txt > difffile

Dann können Sie speichern, dass difffile als "Version 1".

Um Version wiederherstellen 1 von Version 2, greifen Sie die Version 2-Daten, führen Patch auf sie die Diff-Datei Daten verwenden, und das gibt Ihnen v1.

Wenn Sie von v3 v1 gehen möchten, müssen Sie dies zweimal tun (einmal v2 zu bekommen, und dann wieder v1 zu bekommen).

Das senkt Ihre Speicherbelastung, erhöht aber die Verarbeitung (natürlich), so dass Sie haben, um zu beurteilen, wie Sie dies tun wollen.

Andere Tipps

Wills große Antwort richtig auf, kann aber aufsummiert werden, denke ich: Sie die Versionen speichern müssen, und dann müssen Sie die Metadaten speichern (wer, was, wenn die Daten)

.

Aber Ihre Frage war über Ressourcen auf Wiki-ähnliche Versionierung. Ich keine haben (na ja, ein: Wills Antwort oben). Doch über die Speicherung von Wikis, ich habe ein. Schauen Sie sich der Vergleichsmatrix von DokuWiki . Ich weiß. Sie denken: „Was ist es mir, welche Marke von DB verschiedenen Wikis verwenden?“ Da DokuWiki verwendet einfache Textdateien. Sie können sie öffnen und sie sind in der Tat klar. Also das ist ein Ansatz, und sie haben einige interessante Argumente habe, warum DBMS sind nicht der beste Weg zu gehen. Sie halten nicht einmal viel Metadaten: die meisten Sachen, wird durch die flachen Dateien selbst getan.

Der Punkt des DokuWiki für Dich ist, dass vielleicht ist es ein relativ einfaches Problem (je nachdem, wie gut Sie es lösen:)

Hier ist eine Liste aller 12 Wikis auf WikiMatrix, die in PHP und tun ihre Speicher mit Textdateien geschrieben werden. Vielleicht ist einer von ihnen wird eine Speichermethode haben Sie in die Datenbank anpassen können:

http://www.wikimatrix.org/search.php?sid=1760

Es klingt wie Sie sind im Wesentlichen nur für die Versionskontrolle suchen. Wenn das der Fall ist, können Sie in einen Diff-Algorithmus suchen.

Hier ist die Wikipedia Diff Seite.

habe ich eine schnelle PHP-diff Google-Suche, aber nichts wirklich stand als ein anständiges Beispiel aus, da ich nur grundlegende PHP-Kenntnisse haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top