• #database-antipattern - IndieWebCamp
    http://indiewebcamp.com/database-antipattern

    Using databases for the primary storage of content on your personal site is considered by some in the community to be an antipattern.
    Common #CMS (e.g. WordPress, Drupal, MediaWiki, etc.) use databases for primary storage of content. Most often MySQL, sometimes others like MongoDB.
    Databases are all a pain to maintain (i.e. highly human-time inefficient - see DBA tax below), and more fragile[1] than the file system.
    For any content you care about, don’t put the primary copy in a #database.

    cc: #SPIP

    • flat files first, database for cache and search

      Databases are useful for caching/performance needs for high volume sites. Examples:

      – aggregations (e.g. all of your posts with a specific tag) can be cached.
      – full-text search index
      – geo-search index

      In both search use-cases the DBs should be a cache/query store, the real data should still be in flat files (e.g. .md, HTML, etc.) to ensure long-term durability.

    • comme tu sais je partage ce point de vue, mais je suis sûr qu’il existe des gens qui y sont très hostiles et sans doute pour de bonnes raisons

    • Je suis relativement d’accord aussi, mais je me pose toujours la question de ce qui doit être mis dans le fichier plat lorsqu’il s’agit de liens de contenus qui ont eux-même plein d’autres attributs possibles.

      Par exemple pour les cas courants des auteurs ou des mots-clés, est-ce que le fichier plat d’un article ne doit contenir que le nom/titre, ou bien aussi inclure tous les attributs des objets liés en plus ?

      La solution est peut-être de suivre comme dans les liens Atom (principe repris dans plusieurs normes JSON aussi comme « Collection+JSON ») : que lorsqu’on indique un lien, on donne l’identifiant URI de l’objet lié ET un titre (et le typage du lien évidemment). Ce qui permet dans la majorité des cas d’afficher directement quelque chose sans autre requête (afficher en bas la liste des auteurs par ex). Mais SI on veut plus, on à l’URI des auteurs pour aller requêter leur fiche complète.

      Par exemple on ne mettra pas :

      titre: 'Mon article',
      texte: 'Mon texte',
      auteurs: ['Machine', 'Machin']

      Mais plutôt :

      titre: 'Mon article',
      texte: 'Mon texte',
      links: [
         {rel: 'auteur', title: 'Machine', href: 'URI'},
         {rel: 'auteur', title: 'Machin', href: 'URI'},
      ]