Suivi — Administration site Nettoyage des 22 ans

#1937 Posté par  (site web personnel) . État de l’entrée : corrigée. Assigné à Benoît Sibaud. Licence CC By‑SA.
Étiquettes : aucune
2
14
juin
2020

(ça n'a aucun rapport avec les 22 ans, mais bon d'ici qu'on le fasse, « nettoyage de printemps » sera hors saison)

Un peu de ménage en base de données ne ferait pas de mal, pour diverses raisons (ça prendrait moins de place, on stocke des choses inutiles, on stocke des données personnelles obsolètes pour rien, etc.).

Commençons par un nettoyage suite au Un an après la mise à jour majeure du site, grand nettoyage dans les comptes utilisateur, qui nous définit une date cible au 31 mars 2012.

  • supprimer les étiquettes posées sur les contenus non publics antérieurs à la date ciblée (de fait invisibles, mais a priori il n'y en a pas avant RoR)
  • supprimer les commentaires sur les contenus non publics antérieurs à la date ciblée (de fait invisibles)
  • supprimer les contenus non publics antérieurs à la date ciblée (de fait invisibles)
  • purger les comptes (accounts+users) créés avant la date ciblée et toujours fermés (dont personne n'a demandé leur réouverture) et qui ne sont associés à aucun commentaire, aucun contenu ou aucune étiquette (aucun intérêt à les garder)
  • purger les comptes (accounts) créés avant la date ciblée et toujours fermés (dont personne n'a demandé leur réouverture) et qui sont associés à un commentaire ou un contenu ou une étiquette (plus délicat si on doit confirmer plus tard l'auteur pour savoir si on peut anonymiser par exemple…)
  • globalement relancer les scripts de vérification des bases SQL et Redis
  • probablement un peu de optimize à faire côté MariaDB
  • # Brouillon

    Posté par  (site web personnel) . Évalué à 3 (+0/-0).

    supprimer les étiquettes posées sur les contenus non publics antérieurs à la date ciblée (de fait invisibles, mais a priori il n'y en a pas avant RoR)

    SELECT COUNT(*) AS cnt FROM taggings,nodes WHERE taggings.node_id=nodes.id AND nodes.public=0 AND date(nodes.created_at)<='2012-03-31';
    +------+
    | cnt  |
    +------+
    | 4656 |
    +------+

    (pour 103k étiquettes actuellement)

    supprimer les commentaires sur les contenus non publics antérieurs à la date ciblée (de fait invisibles)

    SELECT COUNT(*) AS cnt FROM comments,nodes WHERE comments.node_id=nodes.id AND nodes.public=0 AND date(nodes.created_at)<='2012-03-31';
    +-----+
    | cnt |
    +-----+
    | 947 |
    +-----+

    (pour 1,8M de commentaires actuellement)

    supprimer les contenus non publics antérieurs à la date ciblée (de fait invisibles)

    SELECT content_type, COUNT(*) AS cnt FROM nodes WHERE nodes.public=0 AND date(nodes.created_at)<='2012-03-31' GROUP BY content_type;
    +--------------+-------+
    | content_type | cnt   |
    +--------------+-------+
    | Diary        |    30 |
    | News         | 11203 |
    | Poll         |    34 |
    | Post         |    38 |
    | Tracker      |     2 |
    | WikiPage     |   100 |
    +--------------+-------+

    (pour 106k contenus actuellement)

    purger les comptes (accounts+users) créés avant la date ciblée et toujours fermés (dont personne n'a demandé leur réouverture) et qui ne sont associés à aucun commentaire, aucun contenu ou aucune étiquette (aucun intérêt à les garder)

    SELECT COUNT(*) AS cnt FROM users LEFT JOIN accounts ON accounts.user_id=users.id LEFT JOIN comments ON comments.user_id=users.id LEFT JOIN nodes ON nodes.user_id=users.id AND nodes.public=1 LEFT JOIN taggings ON taggings.user_id=users.id LEFT JOIN tags ON tags.id=taggings.user_id AND tags.public=1 WHERE (accounts.id IS NULL OR accounts.role='inactive') AND date(users.created_at) < '2012-03-31' AND comments.id IS NULL AND nodes.id IS NULL AND taggings.id IS NULL;
    +------+
    | cnt  |
    +------+
    | 1878 |
    +------+

    (pour 45k comptes actuellement)

    purger les comptes (accounts) créés avant la date ciblée et toujours fermés (dont personne n'a demandé leur réouverture) et qui sont associés à un commentaire ou un contenu ou une étiquette (plus délicat si on doit confirmer plus tard l'auteur pour savoir si on peut anonymiser par exemple…)

    on parle globalement de l'ensemble des comptes concernés moins ceux précédemment trouvés soit :

    SELECT (COUNT(*)-1878) AS cnt FROM users LEFT JOIN accounts ON accounts.user_id=users.id WHERE (accounts.id IS NULL OR accounts.role='inactive') AND date(users.created_at) < '2012-03-31';
    +-------+
    | cnt   |
    +-------+
    | 16263 |
    +-------+

    (pour 45k comptes actuellement)

    • [^] # Re: Brouillon

      Posté par  (site web personnel) . Évalué à 4 (+0/-0).

      Il faut aussi prendre en compte les comptes qui ont été modérateurs (news.moderator_id) et ceux qui ont modifié des dépêches (news_versions.user_id).

      SELECT * FROM users LEFT JOIN accounts ON accounts.user_id=users.id LEFT JOIN comments ON comments.user_id=users.id LEFT JOIN nodes ON nodes.user_id=users.id AND nodes.public=1 LEFT JOIN taggings ON taggings.user_id=users.id LEFT JOIN tags ON tags.id=taggings.user_id AND tags.public=1 LEFT JOIN news ON news.moderator_id=users.id LEFT JOIN news_versions ON news_versions.user_id=users.id WHERE (accounts.id IS NULL OR accounts.role='inactive') AND date(users.created_at) < '2012-03-31' AND comments.id IS NULL AND nodes.id IS NULL AND taggings.id IS NULL AND news.id IS NULL AND news_versions.id IS NULL;
  • # Résultats

    Posté par  (site web personnel) . Évalué à 4 (+0/-0).

    • 1798290 commentaires avant à 1797358 après (sachant qu'il s'agit d'une suppression de commentaires inaccessibles, et que potentiellement quelques uns ont été postés durant l'opération).
    • 12091 dépêches refusées en base avant, 905 après
    • ça change légèrement les temps de modération des années 2011 et 2012 (on s'en remettra). On a perdu quelques interdictions temporaires mises sur des vieux comptes supprimés. Plus embêtant on a perdu l'affichage d'anciens modérateurs (il faut revoir la requête en base).
    • 103294 étiquetages avant contre 98639 après.
    • 45000 comptes avant contre 29171 après.
    • [^] # Re: Résultats

      Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

      Chapeau et merci !

      Il reste encore beaucoup de ménage à faire ? Pour ma curiosité personnelle, ça prend beaucoup de temps de faire le ménage comme ça ?

      « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

      • [^] # Re: Résultats

        Posté par  (site web personnel) . Évalué à 4 (+0/-0).

        Aux alentours d'une heure pour l'instant à cause des surprises. Et il reste deux actions à finir : corriger les stats de modération, refaire une vérification en base (j'ai notamment oublier de nettoyer des slugs), et pourquoi pas lancer un OPTIMIZE en base de données mais ça ne coûte rien. Ah oui, optimiser le comptage jusqu'à deux aussi.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.