使用 Java 将 IPv4 存储在数据库中的最佳方法

Posted

技术标签:

【中文标题】使用 Java 将 IPv4 存储在数据库中的最佳方法【英文标题】:Best way to store IPv4 in db using Java 【发布时间】:2018-07-25 12:13:05 【问题描述】:

我需要用 Java 制作一个可以管理 IPv4(或未来的 IPv6)的应用程序。用户将在该应用程序中管理他们的 IP 地址范围、超网和子网(创建/删除等)。我有几个关于架构的问题。

    在 DB2 中存储/搜索 IPv4 及其前缀的最佳格式是什么(考虑到我将通过 Java 访问它们)?

    他们也将使用私有 IP 地址范围,例如10.0.0.0/8,创建 16777214 个 IP 地址。其中,他们在尝试创建此网络时将仅使用 0.1% 的 IP。我应该如何在数据库中定义它?我应该创建代表每个 IP 的 1600 万行,还是应该只在 DB 中创建使用过的 IP?

我将使用 DB2 10.5 和 Java 1.6。

【问题讨论】:

对于 1),“最好”的做法是创建一个可以解析/显示相关文本格式的自定义类型,但实际上将其存储为整数或 4。对于 2),您想要某种方式来存储范围的开始/结束,但我对子网划分的工作方式还不够了解这是明确的结束/开始还是其他。 1) 我正在寻找这样的东西。你有什么例子吗。谢谢顺便说一句 不是临时的,这不是我在数据库上尝试过的东西——你必须阅读相关文档和这里的任何问题。 【参考方案1】:

简单地使用文本格式,在java中他们使用字符串格式,如果你想处理子网,,,等只是一些字符串函数来提取你需要的文件

【讨论】:

【参考方案2】:

根据这个答案Maximum length of the textual representation of an IPv6 address?,您可以使用 45 作为列的长度来存储 IPv6 地址,该地址也可以容纳 IPv4,因为它只有 39 个字符。

要回答你的第二个问题,你只能存储那些使用过的IP地址并通过IP列本身对其进行索引,以便检索更快。

这是一个一般性建议,并不针对任何数据库。

【讨论】:

以上是关于使用 Java 将 IPv4 存储在数据库中的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在 UNKNOWN DB 中存储 IPv6 的最佳方式?

将IP存储在数据库中的最佳方法?

将 IPv6 存储在数据库中

将 Blob 数据类型存储在 Hive 表中的最佳方式是字符串还是二进制?

将图像存储在 android 中的 SD 卡或 SQL lite DB 中的最佳做法是啥?

最佳数据存储内存使用?