Question

Quelqu'un connait-il une API (php préférable mais je serais intéressé par n'importe quelle langue) pour créer un stockage de données de type wiki?

Qu'en est-il des ressources pour faire rouler votre propre wiki en texte brut? Comment les autres wikis en texte brut gèrent-ils le format du fichier texte?

Je comprends que je peux utiliser Markdown ou Textile pour le formatage. Mais ce qui m’intéresse surtout, c’est de savoir comment aborder le stockage en texte clair des modifications multi-utilisateurs.

J'écris une application Web principalement basée sur une base de données. Je veux qu'au moins un champ de texte de cette base de données soit dans un format semblable à celui d'un wiki. Plus précisément, ce texte peut être édité par plusieurs utilisateurs avec la possibilité de revenir à n'importe quelle version. Pensez à la section wiki / bio de Last.FM (presque tout le site est strictement structuré base de données, sauf pour cette section par artiste).

Jusqu'ici, mon approche consistant à séparer MediaWiki et à l'insérer dans une base de données me semble exagérée. Je pense qu'il serait beaucoup plus facile de créer mon propre wiki en texte brut et de stocker ce fichier dans le champ de texte approprié de la base de données.

Était-ce utile?

La solution

En résumé, il s'agit d'un "Comment publier des informations textuelles dans ma base de données".

La méthode la plus simple consiste simplement à copier les données.

Créez simplement une " version " table qui contient " anciennes versions " des données et reliez-les à votre table principale.

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
}

Chaque fois que vous mettez à jour votre document d'origine, vous copiez l'ancienne valeur de texte dans cette table, copiez l'utilisateur, modifiez la date et remplacez la version.

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;

Vous pouvez même le faire dans un déclencheur si votre base de données les prend en charge.

Les erreurs avec cette méthode sont qu’il s’agit d’une copie complète des données (ainsi, si vous avez un document volumineux, la version reste volumineuse). Vous pouvez atténuer cela en utilisant quelque chose comme diff (1) et patch (1).

Par exemple:

diff version2.txt version1.txt > difffile

Ensuite, vous pouvez stocker ce fichier en tant que "version 1".

Afin de récupérer la version 1 à partir de la version 2, vous devez récupérer les données de la version 2, y appliquer un correctif à l'aide des données du fichier diff, ce qui vous donne la version 1.

Si vous voulez passer de la v3 à la v1, vous devez le faire deux fois (une fois pour obtenir v2, puis une autre fois pour obtenir v1).

Cela réduit votre charge de stockage, mais augmente votre traitement (évidemment), vous aurez donc à juger comment vous voulez le faire.

Autres conseils

L’énorme réponse de Will est exacte, mais on peut le résumer, je pense: vous devez stocker les versions, puis les métadonnées (qui fait quoi, quand des données).

Mais votre question portait sur les ressources relatives à la gestion des versions de type wiki. J'en ai aucune (bien, une: réponse de Will ci-dessus ). Cependant, à propos du stockage des wikis, j'en ai un. Consultez la la matrice de comparaison de DokuWiki . Je connais. Vous pensez "qu'est-ce que je me soucie de la marque de DB utilisée par différents wikis?" Parce que DokuWiki utilise des fichiers de texte brut. Vous pouvez les ouvrir et ils sont en effet simples. Donc, c'est une approche, et ils ont des arguments intéressants pour expliquer pourquoi les SGBD ne sont pas la meilleure solution. Ils ne contiennent même pas beaucoup de métadonnées: la plupart des tâches sont effectuées à travers les fichiers plats eux-mêmes.

L’intérêt du DokuWiki pour vous est que c’est peut-être un problème relativement simple (selon votre volonté de le résoudre:)

Voici une liste des 12 wikis sur WikiMatrix écrits en PHP et stockés à l'aide de fichiers texte. L’un d’eux aura peut-être une méthode de stockage que vous pourrez adapter à la base de données:

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

Il semble que vous recherchiez essentiellement un contrôle de version. Si tel est le cas, vous pouvez envisager un algorithme de diff.

Voici la page Wikipedia Diff .

J’ai fait une recherche rapide dans le php diff sur google, mais rien n’est vraiment remarquable, car je n’ai que des connaissances de base en PHP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top