【发布时间】:2013-03-13 13:01:41
【问题描述】:
目前为了保存 IP 地址,我将其转换为数字并将其存储在集合中。基本上我这样做是为了记录目的。这意味着我希望尽可能快地以最小的空间存储信息。
我很少用它来查询。
我的想法
- 存储为字符串肯定是低效的。
- 存储为 4 位数字会更慢并且会占用更多空间。
尽管如此,我认为这是一种足够的方法,但是否有更好的方法适合我的目的?
【问题讨论】:
-
4 个整数不适用于 IPv6 地址。 4 位数字不会比字符串占用更多空间。老实说,您必须决定是从源字符串进行转换还是空间损失更重要,并据此做出决定。
-
是否需要查询生成的结构?如果 MongoDB 与其他数据库写入操作竞争,它可能不是日志记录的最佳选择。尝试选项,看看它们的表现如何。查看集合的
stats(docs.mongodb.org/manual/reference/collection-statistics) 以了解平均文档的大小。您可能还想在内存缓冲中做一些事情,而不是编写许多微小的单个文档。 -
你应该转换成字符串并存储它。
-
我将它们存储为字符串。请记住,很快您将只有 IPv6,而且这些都是字符串和数字。
-
如果可能,您应该将其存储为 4 字节整数。如果您有
[o1, o2, o3, o4],则整数表示计算为o1<<24 + o2<<16 + o3<<8 + o4。这将使用比 4 元素列表更少的空间。
标签: mongodb ip-address