PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Why you should never, ever, ever use MongoDB - joepie91's Ramblings

lundi 20 juillet 2015 à 23:36

Pour expliquer le pourquoi, il y a ça :
https://twitter.com/trvrm/status/623135659817971716

En l'occurrence, dans le code de MongoDB, on trouve cette fabuleuse ligne:
" if (!((_ok) ? true : (Math.random() > 0.1))) {"

https://github.com/mongodb/mongo-java-driver/blob/1d2e6faa80aeb5287a26d0348f18f4b51d566759/src/main/com/mongodb/ConnectionStatus.java#L213
(Permalink)



j'ai toujours entendu du mal de mongodb sans l'avoir jamais utilisé.
maintenant j'ai des preuves.

via https://my.shaarli.fr/tsyr2ko/?6EKZFA

EDIT: hehe, éloquent: https://aphyr.com/posts/322-call-me-maybe-mongodb-stale-reads
(Permalink)



Pas mal, les raisons pourquoi il ne faut pas utiliser MongoDB.

J'avais aussi vu qu'il valait mieux priviliéger PostgreSQL et TokuMX.
(Permalink)





Liens 21/07/2015




Pour cette ligne, j'en parlais ici (depuis, le lien d'origine a changé) : http://mypersonnaldata.eu/shaarli/?v45HWA

L'idée est de loguer uniquement environ 10% des erreurs sur cette opération, qui, en cas d'erreur, crache souvent la même ligne trouzmille fois.

Explication plus complète ici : https://utcc.utoronto.ca/~cks/space/blog/programming/UnderstandingMongoDBRandom

En gros, en fait, c'est loin d'être con.
(Permalink)



D'accord sur le principe de vouloir logger une erreur que 10% du temps (et encore, Math.random pourrait très bien sortir sur du 25% s'il est tout buggué)

Mais il y a quand même un gros code spaghetti ignoble.

function() {
   try {
       [...]

       if (res == null) {
           throw new MongoInternalException("Invalid null value returned from isMaster");
       }

       [...]
   } catch (Exception e) {
       if (!((_ok) ? true : (Math.random() > 0.1))) {
           return res;
       }

       [...]
   }

   return res;
}

Si res vaut null, dans 90% des cas, tout ça n'est rien d'autre qu'un "return null" >.<
C'est plutôt à ton logger de gérer l'enregistrement ou non dans ton système de log,
pas le rôle du code applicatif.

Une erreur => un appel au logger
Après, à l'intérieur du logger, il peut faire du traitement pour n'enregistrer qu'une fractions des erreurs.
(Permalink)