Um requisito de armazenamento de valor inteiro é menor, mas é claro, não muito significativo. O algoritmo de classificação/indexação de um número seria ligeiramente mais rápido que uma corda normalmente, mas a diferença seria extremamente pequena, pois a corda também é muito curta.
Eu não esperaria uma diferença de desempenho convincente entre os dois. Se você planeja armazenar endereços IPV6, o problema será que o BSON (http://bsonspec.org/ #/especificação ) não tem um tipo de dados simples para armazenar um número de 16 bytes, portanto, não é necessariamente um ajuste natural armazenar apenas como um número.
No final, eu provavelmente usaria apenas strings se você quiser evitar a tradução do armazenamento para a tela ou se quiser tornar as consultas mais naturais para escrever para a maioria de nós :) :
db.ips.find({addr: "192.168.1.1"})
Se estiver usando strings, também sugiro que você considere armazenar como uma string de formato fixo, como
192.168.001.001
se você quiser fazer pesquisas mais complexas, como uma pesquisa de intervalo. Como uma string armazenada com um formato fixo consistente será classificada naturalmente, você pode usá-la de mais maneiras do que seria capaz de outra forma. Se os intervalos não forem importantes, não é necessário armazenar dessa maneira. Com um formato fixo, você pode fazer uma consulta como:
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
Isso encontraria todos os endereços IP entre (inclusive)
192.168.0.0
e 192.168.0.255
. Idealmente, você terá um índice no campo de qualquer maneira:
db.ips.ensureIndex({ addr: 1 })