Une exigence de stockage de valeur entière est plus petite, mais bien sûr, pas très significative. L'algorithme de tri/indexation pour un nombre serait légèrement plus rapide qu'une chaîne normalement, mais la différence serait extrêmement petite car la chaîne est également très courte.
Je ne m'attendrais pas à une différence de performances convaincante entre les deux. Si vous prévoyez de stocker des adresses IPV6, le problème sera que BSON (http://bsonspec.org/ #/spécification ) n'a pas de type de données simple pour stocker un nombre de 16 octets, il n'est donc pas nécessairement naturel de le stocker uniquement sous forme de nombre.
En fin de compte, j'utiliserais probablement simplement des chaînes si vous voulez éviter de faire la traduction du stockage à l'écran, ou si vous voulez rendre les requêtes plus naturelles à écrire pour la plupart d'entre nous :) :
db.ips.find({addr: "192.168.1.1"})
Si vous utilisez des chaînes, je vous suggère également d'envisager de stocker une chaîne de format fixe telle que 192.168.001.001
si vous souhaitez effectuer des recherches plus complexes, telles qu'une recherche par plage. Puisqu'une chaîne stockée avec un format fixe cohérent sera triée naturellement, vous pouvez l'utiliser de plus de façons que vous ne le pourriez autrement. Si les plages ne sont pas importantes, il n'est pas nécessaire de stocker de cette façon.
Avec un format fixe, vous pourriez faire une requête comme :
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
Cela trouverait toutes les adresses IP entre (inclus) 192.168.0.0
et 192.168.0.255
.
Idéalement, vous aurez un index sur le champ dans les deux sens :
db.ips.ensureIndex({ addr: 1 })