Un requisito di archiviazione di valori interi è minore, ma ovviamente non molto significativo. L'algoritmo di ordinamento/indicizzazione per un numero sarebbe leggermente più veloce di una stringa normalmente, ma la differenza sarebbe estremamente piccola poiché anche la stringa è molto corta.
Non mi aspetterei una differenza di prestazioni convincente tra i due. Se hai intenzione di archiviare indirizzi IPV6, il problema sarà che BSON (http://bsonspec.org/ #/specifica ) non dispone di un tipo di dati semplice per l'archiviazione di un numero a 16 byte, quindi non è necessariamente un adattamento naturale per l'archiviazione solo come numero.
Alla fine, probabilmente userei le stringhe se vuoi evitare di eseguire la traduzione dall'archiviazione allo schermo o se vuoi rendere le query più naturali da scrivere per la maggior parte di noi :) :
db.ips.find({addr: "192.168.1.1"})
Se utilizzi le stringhe, ti suggerisco anche di considerare l'archiviazione come stringa di formato fisso come 192.168.001.001
se vuoi fare ricerche più complesse, come una ricerca per intervallo. Poiché una stringa archiviata con un formato fisso coerente verrà ordinata in modo naturale, puoi usarla in più modi di quanto potresti altrimenti. Se gli intervalli non sono importanti, non è necessario archiviarli in questo modo.
Con un formato fisso, potresti eseguire una query come:
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
Ciò troverebbe tutti gli indirizzi IP compresi tra (incluso) 192.168.0.0
e 192.168.0.255
.
Idealmente, avrai un indice sul campo in entrambi i modi:
db.ips.ensureIndex({ addr: 1 })