91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用字符串和無符號(hào)整數(shù)來存儲(chǔ)IP的具體性能分析

Android編程精選 ? 來源:CSDN技術(shù)社區(qū) ? 作者:MikanMu ? 2022-06-20 16:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在看高性能MySQL第3版(4.1.7節(jié))時(shí),作者建議當(dāng)存儲(chǔ)IPv4地址時(shí),應(yīng)該使用32位的無符號(hào)整數(shù)(UNSIGNED INT)來存儲(chǔ)IP地址,而不是使用字符串。但是沒有給出具體原因。為了搞清楚這個(gè)原因,查了一些資料,記錄下來。

相對(duì)字符串存儲(chǔ),使用無符號(hào)整數(shù)來存儲(chǔ)有如下的好處:

  • 節(jié)省空間,不管是數(shù)據(jù)存儲(chǔ)空間,還是索引存儲(chǔ)空間

  • 便于使用范圍查詢(BETWEEN...AND),且效率更高

通常,在保存IPv4地址時(shí),一個(gè)IPv4最小需要7個(gè)字符,最大需要15個(gè)字符,所以,使用VARCHAR(15)即可。MySQL在保存變長(zhǎng)的字符串時(shí),還需要額外的一個(gè)字節(jié)來保存此字符串的長(zhǎng)度。而如果使用無符號(hào)整數(shù)來存儲(chǔ),只需要4個(gè)字節(jié)即可。

另外還可以使用4個(gè)字段分別存儲(chǔ)IPv4中的各部分,但是通常這不管是存儲(chǔ)空間和查詢效率應(yīng)該都不是很高(可能有的場(chǎng)景適合使用這種方式存儲(chǔ))。

使用字符串和無符號(hào)整數(shù)來存儲(chǔ)IP的具體性能分析及benchmark,可以看這篇文章。

使用無符號(hào)整數(shù)來存儲(chǔ)也有缺點(diǎn):

  • 不便于閱讀

  • 需要手動(dòng)轉(zhuǎn)換

對(duì)于轉(zhuǎn)換來說,MySQL提供了相應(yīng)的函數(shù)來把字符串格式的IP轉(zhuǎn)換成整數(shù)INET_ATON,以及把整數(shù)格式的IP轉(zhuǎn)換成字符串的INET_NTOA。如下所示:

mysql>selectinet_aton('192.168.0.1');
+--------------------------+
|inet_aton('192.168.0.1')|
+--------------------------+
|3232235521|
+--------------------------+
1rowinset(0.00sec)

mysql>selectinet_ntoa(3232235521);
+-----------------------+
|inet_ntoa(3232235521)|
+-----------------------+
|192.168.0.1|
+-----------------------+
1rowinset(0.00sec)

對(duì)于IPv6來說,使用VARBINARY同樣可獲得相同的好處,同時(shí)MySQL也提供了相應(yīng)的轉(zhuǎn)換函數(shù),即INET6_ATONINET6_NTOA。

對(duì)于轉(zhuǎn)換字符串IPv4和數(shù)值類型,可以放在應(yīng)用層,下面是使用java代碼來對(duì)二者轉(zhuǎn)換:

packagecom.mikan;

/**
*@authorMikan
*/
publicclassIpLongUtils{
/**
*把字符串IP轉(zhuǎn)換成long
*
*@paramipStr字符串IP
*@returnIP對(duì)應(yīng)的long值
*/
publicstaticlongip2Long(StringipStr){
String[]ip=ipStr.split("\.");
return(Long.valueOf(ip[0])<24)+(Long.valueOf(ip[1])<16)
+(Long.valueOf(ip[2])<8)+Long.valueOf(ip[3]);
}

/**
*把IP的long值轉(zhuǎn)換成字符串
*
*@paramipLongIP的long值
*@returnlong值對(duì)應(yīng)的字符串
*/
publicstaticStringlong2Ip(longipLong){
StringBuilderip=newStringBuilder();
ip.append(ipLong>>>24).append(".");
ip.append((ipLong>>>16)&0xFF).append(".");
ip.append((ipLong>>>8)&0xFF).append(".");
ip.append(ipLong&0xFF);
returnip.toString();
}

publicstaticvoidmain(String[]args){
System.out.println(ip2Long("192.168.0.1"));
System.out.println(long2Ip(3232235521L));
System.out.println(ip2Long("10.0.0.1"));
}

}

輸出結(jié)果為:

3232235521
192.168.0.1
167772161

原文標(biāo)題:如果要存 IP 地址,用什么數(shù)據(jù)類型比較好?99%人都會(huì)答錯(cuò)!

文章出處:【微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4798

    瀏覽量

    90081
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1865

    瀏覽量

    155886
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    596

    瀏覽量

    23171
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    906

    瀏覽量

    29560

原文標(biāo)題:如果要存 IP 地址,用什么數(shù)據(jù)類型比較好?99%人都會(huì)答錯(cuò)!

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    求助 LabVIEW 字符串比較

    請(qǐng)教大神 ,用一個(gè)字符串和多個(gè)字符串比較程序應(yīng)該怎么做。 比如:A字符串和B字符串組(B組字符串個(gè)數(shù)不定可以是一個(gè)也可以是10個(gè)) 比較 A
    發(fā)表于 03-02 17:24

    打開工程后工程中的字體沒有顯示,如字符串,數(shù)字等控件不能預(yù)覽顯示字體?

    打開工程后工程中的字體沒有顯示,如字符串,數(shù)字等控件不能預(yù)覽顯示字體?
    發(fā)表于 02-25 17:39

    字符串控件與靜態(tài)字符串控件中預(yù)覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態(tài)字符串控件中預(yù)覽字符顯示亂碼,如何修改顯示正常?
    發(fā)表于 01-20 17:17

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?

    字符串,數(shù)字控件如何控制背景顏色和前景字體顏色?
    發(fā)表于 01-20 15:12

    Linux下怎么讓中文字符串按照拼音排序?

    求教 Linux 下怎么讓中文字符串按照拼音排序?
    發(fā)表于 01-06 07:40

    分析嵌入式軟件代碼的漏洞-代碼注入

    后跟一個(gè)其他參數(shù)的列表,并且該格式字符串被解釋為一組指令,用于將剩余的參數(shù)呈現(xiàn)為字符串。 大多數(shù)用戶知道如何編寫最常用的格式說明符:例如字符串,整數(shù)和浮點(diǎn)數(shù)——%s,%d,%f,但是
    發(fā)表于 12-22 12:53

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?

    字符串關(guān)聯(lián)數(shù)字變量如何使用?我們的地址都是16位數(shù)據(jù),可以使用16位數(shù)字變量顯示字符串嗎?
    發(fā)表于 12-15 08:24

    結(jié)構(gòu)體聲明與定義

    ,用符號(hào)長(zhǎng)整數(shù)表示 char name[20];//名字,用字符數(shù)組表示 unsigned int year;//入學(xué)年份,用
    發(fā)表于 12-11 07:52

    網(wǎng)絡(luò)通訊的結(jié)構(gòu)及地址

    )。 inet_ntop():網(wǎng)絡(luò)字節(jié)序整數(shù)字符串(network → presentation)。 示例: struct sockaddr_in addr; // 字符串IP
    發(fā)表于 11-17 07:59

    芯源都有哪些開發(fā)工具?具體性能如何?

    芯源都有哪些開發(fā)工具?具體性能如何?
    發(fā)表于 11-14 07:58

    非對(duì)稱密鑰生成和轉(zhuǎn)換規(guī)格詳解

    SM2密鑰,且支持通過曲線名生成公共密鑰參數(shù)。 使用字符串參數(shù)生成 當(dāng)前支持以字符串參數(shù)生成SM2密鑰,具體的“字符串參數(shù)”由“非對(duì)稱密鑰算法”和“密鑰長(zhǎng)度”使用
    發(fā)表于 09-01 07:50

    labview如何生成一個(gè)帶字符串返回的dll

    labview如何生成一個(gè)dll,如下圖,要求一個(gè)輸入,類型是字符串,返回類型也是字符串
    發(fā)表于 08-28 23:20

    在Python中字符串逆序有幾種方式,代碼是什么

    的方法 方法一:直接使用字符串切片功能逆轉(zhuǎn)字符串 #!usr/bin/envpython #encoding:utf-8 defstrReverse(strDemo): returnstrDemo
    的頭像 發(fā)表于 08-28 14:44 ?1101次閱讀

    harmony-utils之StrUtil,字符串工具類

    harmony-utils之StrUtil,字符串工具類 harmony-utils 簡(jiǎn)介與說明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實(shí)用工具類
    的頭像 發(fā)表于 07-03 11:32 ?638次閱讀

    光纖配線架的抗震與抗沖擊性能具體是哪些

    光纖配線架的抗震與抗沖擊性能是其關(guān)鍵可靠性指標(biāo),尤其在數(shù)據(jù)中心、通信基站或工業(yè)場(chǎng)景中,需確保在震動(dòng)、沖擊或意外碰撞下光纖連接穩(wěn)定、中斷。以下是具體性能要求及實(shí)現(xiàn)方式: 一、抗震性能
    的頭像 發(fā)表于 06-11 10:38 ?869次閱讀
    光纖配線架的抗震與抗沖擊<b class='flag-5'>性能</b><b class='flag-5'>具體</b>是哪些