Front matter, postgresql, markdown, yaml, toml, json, hugo

Et tekstformat og en database på samme tid

Kilde 06-03-17 ~2 minutters læsning · 325 ord

Det har sine fordele at gemme alle dokumenter og øvrige data fra et websted i en relationel database som f.eks. Postgres (PostgreSQL som en service):

  1. Alle data ligger fint adskilt i kolonner
  2. Data kan hentes ind på webstedet hvorsomhelst, du måtte ønske det
  3. Du kan opdatere dataene uden at skulle generere webstedet påny.

Men der er også ulemper:

  1. Den begvedliggende kode bliver mere kompliceret, og renderingen af sitet kræver flere trin
  2. Der skal mere computerkraft til for at køre webstedet, og der kan optå problemer ved stor belastning
  3. Database-baserede websteder er dyrere at hoste.

På den baggrund foreslår skribenten, at markdown filer kan overtage rollen som datalager for et websted fra en database. Markdown filer er måske mest kendt som en enkel måde at gemme formateret tekst på. Men den øverste del af et markdown-dokument, også kaldet front matter, har plads til felter og værdier - fuldstændig som en database.

I front matter gemmes meta-data om det pågældende dokument, mens selve dokument-teksten normalt fylder det meste. Men der er ingen grænser for, hvor stor front matter kan være. Den kan ifølge forfatteren bruges som en slags key-value store til opbevaring af betydelige mængder data. Og disse data kan i øvrigt vises sammen med selve dokument-teksten ved hjælp af webskabeloner, som f.eks. findes i den statiske side generator Hugo, fremhæver han.

Derpå viser forfatteren et konkret eksempel på, hvordan data kan trækkes ud af en postgres-database og gemmes i front-matter i formatet YAML, som forfatteren foretrækker frem for de to alternativer - JSON og TOML.

Skribentens konklusion er, at:

  • front matter klarer at holde dataene adskilt
  • dit websted får en enkel opsætning, som tåler heftig trafik
  • løsningen er billig.

Bagsiden af medaljen er efter forfatterens mening, at:

  • Webstedet skal re-genereres, før det viser dine opdateringer. Det kan være et problem, hvis der er mange opdateringer.
  • Det er svært at opdatere mange sammenhængende informationer.
  • Det er ikke muligt at joine data (dvs. sammenkoble data fra forskellige kilder).