Požadavek na uložení celočíselných hodnot je menší, ale samozřejmě nepříliš významný. Algoritmus řazení/indexování čísla by byl nepatrný rychlejší než struna normálně, ale rozdíl by byl extrémně malý, protože struna je také velmi krátká.
Nečekal bych přesvědčivý rozdíl ve výkonu mezi těmito dvěma. Pokud plánujete ukládání adres IPV6, problém bude v tom, že BSON (http://bsonspec.org/ #/specifikace ) nemá jednoduchý datový typ pro uložení 16bajtového čísla, takže není nezbytně vhodné ukládat pouze jako číslo.
Nakonec bych pravděpodobně použil pouze řetězce, pokud se chcete vyhnout překládání z úložiště na obrazovku nebo pokud chcete, aby psaní dotazů bylo pro většinu z nás přirozenější :) :
db.ips.find({addr: "192.168.1.1"})
Pokud používáte řetězce, doporučuji také zvážit uložení jako řetězec s pevným formátem, například 192.168.001.001
pokud chcete provádět složitější vyhledávání, jako je vyhledávání rozsahu. Vzhledem k tomu, že řetězec uložený v konzistentním pevném formátu se bude řadit přirozeně, můžete jej použít více způsoby, než byste jinak byli schopni. Pokud rozsahy nejsou důležité, není nutné je tímto způsobem ukládat.
S pevným formátem můžete zadat dotaz jako:
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
To by našlo všechny IP adresy mezi (včetně) 192.168.0.0
a 192.168.0.255
.
V ideálním případě budete mít index na poli v obou směrech:
db.ips.ensureIndex({ addr: 1 })