IP 如何存储?

TensorFlow实战:5步搞定因果推断模型TARNet(附完整代码) 本文提供了一份基于TensorFlow的TARNet因果推断模型实战指南。通过五个清晰步骤,从数据预处理、模型构建到训练评估,详细讲解了如何利用深度模型解决营销评估、疗效分析等场景中的因果效应估计问题,并附有完整代码解决样本不平衡等工程挑战。 阅读详情

前几天,一个朋友去面试,他回来告诉我,

面试官问他: IP 地址是怎么存在数据库的?
他当时也没多想,直接就回答: 存字符串啊
心想:这么简单的问题,怕不是看不起我吧

IP地址 本来就是一个字符串,存放在数据库作为字符穿类型,也是无可厚非的。
但是,换位思考,站在面试官的角度,你觉得我会问这么一个低级的问题么?那么答案当然是否定的。所以,面试官想知道的是你对这个问题会不会有深度思考,从此来一定程度的判断你在平常的开发中只是一个单纯的 “搬砖” 的码农,还是一个有灵魂的 Coder 。

序言

针对这个问题,首先声明一下,将 IP地址 以字符串的形式保存在数据库是完全没问题的。那么你可能就有疑问了?既然没问题,那你还在这里瞎比比什么呢?

虽然,这是一个前后矛盾的话题,但是除了存字符串以外,我们还有其他的存储方式。例如比较常用的,将 IP地址 存成 int 型的数据,这种存储方式虽然实现起来不复杂,但是能想到该方法,也从一定程度上表明了你是一个善于思考,对数据底层基础把握的比较到位。

因为一个 int 型的数据占 4 个字节,每个字节 8 位,其范围就是 0~(2^8-1),而 ipv4地址 可以分成4段,每段的范围是 0~255 刚刚好能存下,所以将其稍稍转换,就巧妙的将 IP地址 用最小的空间存在了数据库中(接下来的描述若无特殊说明,则都是指的 ipv4地址)。可能你会觉得这个小小的改变没有什么关系,但是当数据量越来越多的时候,15个字节和4个字节相差的数据量会让你吃惊。所以在设计数据库的时候,字段类型用合适的,够用就行,能省则省。

正如在《高性能MySQL 第3版》第4.1.7节时,作者建议当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串的原理一样。

image

相对字符串存储,使用无符号整数来存储有如下的好处:

  • 节省空间,不管是数据存储空间,还是索引存储空间
  • 便于使用范围查询(BETWEEN…AND),且效率更高

通常,在保存IPv4地址时,一个IPv4最小需要7个字符,最大需要15个字符,所以,使用VARCHAR(15)即可。MySQL在保存变长的字符串时,还需要额外的一个字节来保存此字符串的长度。而如果使用无符号整数来存储,只需要4个字节即可。另外还可以使用 4个字段分别存储IPv4中的各部分,但是通常这不管是存储空间和查询效率应该都不是很高(虽然有的场景适合使用这种方式存储)。不过使用无符号整数来存储也有不便于阅读和需要手动转换的缺点。

工具类实现转换

而要实现将IP地址存储成 int 型保存在数据库中,一种是通过java代码中的 移位操作 和 & 计算得到相应的值:

package com.java.mmzsit;

其实这是一种二进制的思维,也是计算技术中广泛采用的一种数制,虽然平时用的不多,但是熟练掌握后,有助于加强我们对机器语言的理解和提升我们的编码水平,特别是面对资源紧张(运存)的场景时,有助于我们分析和优化问题。

数据库函数实现转换

另一种方式就是通过数据库自带的函数 INET_ATON 和 INET_NTOA 进行转化:

mysql> SELECT INET_ATON('192.168.0.1');

如果是 IPv6地址 的话,则使用函数 INET6_ATON 和 INET6_NTOA 进行转化:

mysql> SELECT HEX(INET6_ATON('1030::C9B4:FF12:48AA:1A2B'));

然后数据库定义为 varbinary 类型,分配 128bits 空间(因为 ipv6采用的是128bits,16个字节);或者定义为 char 类型,分配 32bits 空间。

用数据库的函数的话,只需要在 IP地址 入库时,稍稍做一下转换即可,方便快捷;而且到了这里,你不觉得将 IP地址 转换成数字存储是一种不错的选择么,毕竟数据库都帮我们考虑到了这一点,也间接性的证明了这的确是一种可行、并且不错的存储方式。

本文选自公众号 “java极客技术”

请关注我的订阅号

订阅号.png

Gartner《构建可扩展数据产品建设框架》心得 数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。 阅读详情

相关推荐

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1986

ip地址存储

ip 存储 类型选用

lvdaan的博客 323

XILINX偶然加载不成功的问题原因及解决方法

本文为明德扬原创文章,转载请注明出处! 一、项目背景 明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。即使拥有丰富经验和积累,每个新项目我们均...

6034

将 IP 地址作为数字存储在数据库中

例如,在MySQL中,您可以使用将INET_ATON()字符串转换为IP地址数字的函数,以及INET_NTOA()将IP地址数字转换为字符串的函数。将 IP 地址作为数字存储在数据库中可以在空间、性能和灵活性方面具有一些优势。如果您在数据库中同时存储 IPv4 和 IPv6 地址,则可以使用该INET6_ATON()函数将 IPv6 地址转换为数字。当您在数据库中搜索特定 IP 地址时,比较数字比比较字符串要快得多。IP地址通常以字符串形式存储在数据库中,但将其存储为数字有一些优点。数字比较速度更快 🚀。

我的博客,不一样的自我表达 579

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

软件工程期末知识点总结【超详细】

生命周期模型(过程模型):瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型。2、实体联系图:1、数据对象2、属性3、联系(1:1、1:N、M:N)3、语句覆盖 就是设计足够的调试用例,使得程序中的每个语句至少执行一次。 5、判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖 6、条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。7、软件开发时期通常分成4个阶段:总体设计、详细设计、编码和单元测试、综合测试。

这个人好有趣....hh 1万+

IP地址怎么存储

mysql中ip地址怎么存储

赵先森 1193

二、NovAtel Connect 2.3.2 版本 操作说明

一、连接方式 有 串口连接、USB连接、蓝牙连接、无线网连接、网口连接,具体的连接方式看博客: https://blog.youkuaiyun.com/hltt3838/article/details/110622732 下面具体的介绍一下 串口的连接方式: 接收机有三个串口,COM1、COM2、COM3,看上面的连接就知道了! 并且有三个对应的线,1 2 3 ; 把线和串口对应连接,串口的另一端和电脑连接,当然如果电脑没有串口,可以用 串口转USB,如线图所示: (当然,一定要连接电源呀) ...

努力努力努力 4382

IP 存储网络

<br /> <br />       现在有三种协议可用来在TCP/IP 上传输存储数据: iSCSI(Internet SCSI),FCIP(Fiber Channel Over TCP/IP)和iFCP(Internet FCP)。他们形成一个基于IP的存储协议体系,称为IP存储。<br />       这些标准有一个共同之处,他们都在TCP/IP 上传输SCSI,因此主要也就是在以太网上发送和接收上层应用的数据。iSCSI 把SCSI 菊花链映射到TCP/IP;FCIP 在两个隔开的光纤通道之间通

David Dai -- Focus on Oracle 5883

RK356x U-Boot研究所(命令篇)3.10 bidram与sysmem相关命令的作用

RK356x U-Boot研究所(命令篇)3.10 bidram与sysmem相关命令的作用

Systemcall名屋 622

但是我如果真的用差速轮去控制转向 为了尽量原地旋转 转向角度精确 我应该怎么去配置左右两个轮子的速度呢

目标实现方式原地转向左右轮速度相等、方向相反精确角度用 IMU 检测 yaw 实时对齐停止判断达到目标 yaw ± 容差时立即停转控制方式状态机(idle → turning → done)推荐容差2°~3° (可根据实际调整)

qqqweiweiqq的博客 312

关于IP地址的存储

一、理论准备 当设计一个数据表时,考虑使用何种列的数据类型对性能有比较大的影响,如存储空间、查询开销等。甚至还影响到一些操作,如ip地址以字符串的形式存储在数据库中,就不可以直接比较大小。还有一点需要考虑,那就是可读性!数据虽然是存储在数据库中,但也要考虑到可读性问题。 大家都知道ip地址分为ipv4、ipv6,这里我以ipv4为例介绍,ipv6原理是一样的。ipv4的小为32bits(或者说...

weixin_33984032的博客 1596

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2891

如何利用MySQL有效的存储IP地址

当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串

Java学习之道 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Mysql怎样存储IP地址

在Mysql中并没有提供针对IP地址存储的数据格式,在开发中我们可以选择使用char、varchar、int来存储,根据mysql字段类型选择的规则:字段类型定义使用最合适(最小)、最简单的数据类型,优先选择使用int类型来存储,其在逻辑运算上也要比char、varchar更快 int类型存储IP地址 在Mysql中提供了两个函数,用来把IP地址与数字类型的相互转化 inet_aton():把IP地址转化为数字 这种算法其实借用了国际上对各国IP地址的区分中使用的ip number。 a.b

JineD的博客 7318

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mysql ip存储_MySQL怎样存储IP地址

为什么要问如何存储IP首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗?其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升。利用函数算法处理在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP...

weixin_36430300的博客 293

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IP地址的存储格式

今天看程序的时候,发现IPv4的地址以一个很奇怪的无符号整型数字存储,极其不直观。 于是觉得很奇怪,考虑这样存储的原因及改进方式。为什么不直接按照4个字节存储呢? 我考虑到的方式有两种: 1.以数组的方式存储,IPv4地址的4个字节分别是这个含有4个元素的数组的元素之一。 2.以结构体的方式存储,IPv4地址的4个字节分别是此结构体的4个1字节成员之一。 这两种方式其实...

weixin_30621919的博客 1462

网络存储服务器修改阵列ip,网络存储解决方案:IP存储网络(IP-SAN)

IP存储的概念简单来讲,IP存储就是使用IP,而不是光纤通道,把服务器与存储设备连接起来的技术,除了标准已获通过的iSCSI,还有FCIP、iFCP等正在制定的标准。而iSCSI发展最快,已经成了IP存储一个有力的代表。像光纤通道一样,IP存储是可交换的,但是与光纤通道不一样的是,IP网络是成熟的,不存在互操作性问题,而光纤通道SAN最令人头痛的就是这个问题。IP已经被IT业界广泛认可,有非常多的...

weixin_35890512的博客 1184

MySQL中如何正确存储IP地址

MySQL中如何正确存储IP地址

qq_44326412的博客 3028

MySQL如何有效的存储IP地址

序言 网上看到一道面试题,面试官问IP地址是怎么存在数据库的?没多想,就回答了字符串吧(心想:这么简单的问题,怕不是看不起我吧) 前面这段权当看看,毕竟 IP地址 本来就是一个字符串,存放在数据库作为字符穿类型,也是无可厚非的。但是,阿粉我可是一个喜欢换位思考的人,站在面试官的角度,你觉得我会问这么一个低级的问题么?那么答案当然是否定的。所以,面试官想知道的是你对这个问题会不会有深度思考,从此来一定程度的判断你在平常的开发中只是一个单纯的 “搬砖” 的码农,还是一个有灵魂的 Coder 。 正文 针对这个问

zty 481

mysql 存储ip 且 ip 分段

mysql ip 黑白名单+白名单段

有趣的难受 1397

IP地址存储转换

package com.ap.Str; /** * 这是一个关于IP地址高效存储的问题 * 对于一个IP地址如:255.255.255.255, * 如果在数据库中进行存储时最少需要varchar(15)来进行存储, * 并且在这种字符串存储时如果想要做 * select ip from t_ip where ip between '192.168.11.1' and '192.168.

chengmin0823的专栏 464

IP地址在mysql的存储

因为int比varchar(15)更高效,且php和mysql都有ip和int互转的函数,所以在ip地址在mysql中用int存储最优。 mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了了。 echo ip2long('192.168.1.38'); //输出:3232235814 SELECT INET...

dichandai2318的博客 307

mysql存储ip_MySQL存储IP的一些总结

MySQL存储IP的一些总结最近需要将所有IPv4保存到数据库,但是表结构设计的有点不合理,现在保存了7600万左右的数据,已经使用30G空间,使用如下命令统计:USE information_schema;SELECT TABLE_SCHEMA, SUM(DATA_LENGTH)/1024/1024/1024 FROM TABLES GROUP BY TABLE_SCHEMA;这里将单位换算成G...

weixin_29022821的博客 254

MySQL如何存储IP地址

最直接的方法是将IP地址作为字符串存储。IPv4地址通常用点分十进制表示,如"192.168.1.1",可以用VARCHAR(15)来存储,因为最长的IPv4地址(带掩码)也不会超过15个字符。这种方式简单直观,易于理解和查询,但对于IPv6地址,考虑到其长度(最多可达39个字符),可能需要VARCHAR(45)或更长。INET6_ATON()和INET6_NTOA()函数可用于在IPv6地址的文本表示和二进制形式之间转换(但请注意,这两个函数在MySQL 8.0.19及更高版本中可用)。

学亮编程手记 756

mysql ip 存储_Mysql中存储ip地址的方法

Mysql中存储ip地址的方法发布时间:2020-05-25 16:59:56来源:PHP中文网阅读:164作者:三月下面一起来了解下Mysql中存储ip地址的方法,相信大家看完肯定会受益匪浅,文字在精不在多,希望Mysql中存储ip地址的方法这篇短内容是你想要的。1、针对ip地址,mysql数据库存储有两种常规格式:字符串和整型。字符串 varchar(20):”192.168.1.10”整型 ...

weixin_36340926的博客 666
上一篇: 01. 就该这么学并发 - 线程的创建(多姿势)
下一篇: 暗藏杀机? 不简单的三目运算符号!
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值