国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用字符串和無符號整數來存儲IP的具體性能分析

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

掃碼添加小助手

加入工程師交流群

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

相對字符串存儲,使用無符號整數來存儲有如下的好處:

  • 節省空間,不管是數據存儲空間,還是索引存儲空間

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

通常,在保存IPv4地址時,一個IPv4最小需要7個字符,最大需要15個字符,所以,使用VARCHAR(15)即可。MySQL在保存變長的字符串時,還需要額外的一個字節來保存此字符串的長度。而如果使用無符號整數來存儲,只需要4個字節即可。

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

使用字符串和無符號整數來存儲IP的具體性能分析及benchmark,可以看這篇文章。

使用無符號整數來存儲也有缺點:

  • 不便于閱讀

  • 需要手動轉換

對于轉換來說,MySQL提供了相應的函數來把字符串格式的IP轉換成整數INET_ATON,以及把整數格式的IP轉換成字符串的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)

對于IPv6來說,使用VARBINARY同樣可獲得相同的好處,同時MySQL也提供了相應的轉換函數,即INET6_ATONINET6_NTOA

對于轉換字符串IPv4和數值類型,可以放在應用層,下面是使用java代碼來對二者轉換:

packagecom.mikan;

/**
*@authorMikan
*/
publicclassIpLongUtils{
/**
*把字符串IP轉換成long
*
*@paramipStr字符串IP
*@returnIP對應的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值轉換成字符串
*
*@paramipLongIP的long值
*@returnlong值對應的字符串
*/
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"));
}

}

輸出結果為:

3232235521
192.168.0.1
167772161

原文標題:如果要存 IP 地址,用什么數據類型比較好?99%人都會答錯!

文章出處:【微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4791

    瀏覽量

    90066
  • IP
    IP
    +關注

    關注

    5

    文章

    1863

    瀏覽量

    155861
  • 字符串
    +關注

    關注

    1

    文章

    596

    瀏覽量

    23166
  • MySQL
    +關注

    關注

    1

    文章

    906

    瀏覽量

    29537

原文標題:如果要存 IP 地址,用什么數據類型比較好?99%人都會答錯!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助 LabVIEW 字符串比較

    1.輸入一個字符串,儲存起來。 2.再次輸入一個字符串,先和儲存起來的字符串比較,如果不同則存儲起來,如果相同則不儲存。 3.再次輸入一個字符串
    發表于 03-02 17:24

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

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

    字符串控件與靜態字符串控件中預覽字符顯示亂碼,如何修改顯示正常?

    字符串控件與靜態字符串控件中預覽字符顯示亂碼,如何修改顯示正常?
    發表于 01-20 17:17

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

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

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

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

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

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

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?

    字符串關聯數字變量如何使用?我們的地址都是16位數據,可以使用16位數字變量顯示字符串嗎?
    發表于 12-15 08:24

    結構體聲明與定義

    ,用符號整數表示 char name[20];//名字,用字符數組表示 unsigned int year;//入學年份,用
    發表于 12-11 07:52

    網絡通訊的結構及地址

    )。 inet_ntop():網絡字節序整數字符串(network → presentation)。 示例: struct sockaddr_in addr; // 字符串IP
    發表于 11-17 07:59

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

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

    非對稱密鑰生成和轉換規格詳解

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

    labview如何生成一個帶字符串返回的dll

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

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

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

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

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

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

    光纖配線架的抗震與抗沖擊性能是其關鍵可靠性指標,尤其在數據中心、通信基站或工業場景中,需確保在震動、沖擊或意外碰撞下光纖連接穩定、中斷。以下是具體性能要求及實現方式: 一、抗震性能
    的頭像 發表于 06-11 10:38 ?861次閱讀
    光纖配線架的抗震與抗沖擊<b class='flag-5'>性能</b><b class='flag-5'>具體</b>是哪些