麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 課堂 > 基礎(chǔ)知識(shí) > 正文

IP地址定位區(qū)間的問題解析

2024-09-12 20:29:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
           以前寫過一篇Oracle中關(guān)于IP地址定位的問題分析,最后引申出了一系列的問題。當(dāng)時(shí)問題緊急嚴(yán)峻,抓取了10053事件定位源頭,想出了一個(gè)解決妙法,還自鳴得意了下,結(jié)果忙活完之后看看行業(yè)里的解決方案都大體如此,我的心涼了半截。
 
          我總是希望找到一些與眾不同的點(diǎn)來(lái)解讀這一類問題,結(jié)果在偶然的一天從MySQL這里找到了一些思路。
 
          我先來(lái)分析下之前問題和一些收獲。
 
   問題就交代到這里,我今天想再次討論這個(gè)問題是想從幾個(gè)基礎(chǔ)的問題開始來(lái)聊聊MySQL在這方面的優(yōu)勢(shì),沒錯(cuò),是相比于Oracle的優(yōu)勢(shì)的地方。
 
    首先我們來(lái)說說表結(jié)構(gòu)的設(shè)計(jì),如果在Oracle里面,當(dāng)時(shí)設(shè)計(jì)的地址信息如下:
 
COLUMN_ID COLUMN_NAME                    DATA_TYPE       DATA_LENGTH NULLABLE  
---------- ------------------------------ --------------- ----------- ----------
         1 IP_ID                          NUMBER(10,0)             22 N
         2 IP_LEFT_LINE                   VARCHAR2(15)             15 N
         3 IP_RIGHT_LINE                  VARCHAR2(15)             15 N
         4 IP2NUM_LEFT_LINE               NUMBER(10,0)             22 N
         5 IP2NUM_RIGHT_LINE              NUMBER(10,0)             22 N
         6 COUNTRY                        VARCHAR2(20)             20 Y
         7 PROVINCE                       VARCHAR2(20)             20 Y
         8 CAPITAL                        VARCHAR2(20)             20 Y
 
  里面對(duì)IP地址和IP地址轉(zhuǎn)換后的數(shù)字都做了持久化,查詢的邏輯相對(duì)就比較別扭了。
 
比如下面:B1是傳入的IP地址,即一個(gè)字符串,會(huì)先轉(zhuǎn)換為數(shù)字,然后做Range Scan。
 
SELECT IP_ID,COUNTRY,PROVINCE,CAPITAL
FROM SWD_IP2COUNTY
WHERE STRIPTOINT(:B1 ) BETWEEN IP2NUM_LEFT_LINE AND IP2NUM_RIGHT_LINE
 
   那么問題來(lái)了,數(shù)值型數(shù)據(jù)類型其實(shí)是很豐富的,這一點(diǎn)和Oracle大大不同,Oracle里面很多開發(fā),DBA都懶了,或者說Oracle內(nèi)部已經(jīng)做好了這種適配,數(shù)值精度也不需要更多考慮了,長(zhǎng)度也不需要區(qū)別對(duì)待了,直接一個(gè)number類型,想調(diào)精度,就直接在這個(gè)基礎(chǔ)上改,比如number(10,3),可以定義長(zhǎng)度和精度。MySQL在這方面就分得比較輕,有支持0-128以內(nèi)的tiny int,32767的smallint等,每一個(gè)數(shù)據(jù)類型都摳的很細(xì)。
 
   所以在Oracle里面的豪氣在這里就是粗放了,一定需要認(rèn)真區(qū)別對(duì)待。
 
   因?yàn)槲覀兇蛩闶褂脭?shù)值類型,最后我們選擇了int(11),沒有留出很富余的值是因?yàn)槲覀儚脑O(shè)計(jì)的角度來(lái)考慮盡可能按需分配。
 
> create table ip_range(ip int(11) );
Query OK, 0 rows affected (0.01 sec)
 
我們插入兩行值:
 
> insert into ip_range values(inet_aton('127.0.0.1')),(inet_aton('192.168.1.1'));
ERROR 1264 (22003): Out of range value for column 'ip' at row 2結(jié)果發(fā)現(xiàn)竟然溢出了,SQL_Mode是嚴(yán)格模式。
 
> insert into ip_range values(inet_aton('192.168.1.1'));
Query OK, 1 row affected (0.00 sec)這里需要提一下,就是對(duì)于IP地址的轉(zhuǎn)換,MySQL已經(jīng)提供了這個(gè)轉(zhuǎn)換的方法,可以互相轉(zhuǎn)換。分別是inet_ntoa(數(shù)值轉(zhuǎn)為IP),inete_aton(IP轉(zhuǎn)為數(shù)值)
 
> select (inet_ntoa(ip)) from ip_range;
+-----------------+
| (inet_ntoa(ip)) |
+-----------------+
| 127.0.0.1       |
| 192.168.1.1     |
+-----------------+
2 rows in set (0.00 sec) 有了這些鋪墊,結(jié)合索引信息,實(shí)現(xiàn)這個(gè)需求問題 不大。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 99爱福利视频在线观看 | 国产乱轮视频 | 意大利av在线| 成人男女啪啪免费观看网站四虎 | 草草视频在线 | 久久久午夜电影 | 欧美女同hd| av国产片| 羞羞草视频 | 最新av网址在线观看 | 亚洲一二区视频 | 国产精品久久久久久久久久东京 | 操操操日日日干干干 | 欧美视频一区二区三区 | 国产精品久久久久久一区二区三区 | 国产成人精品区 | 国产女王女m视频vk 中文日韩 | 内地av在线 | 欧美日本色 | 国产精品久久77777 | 成人福利在线免费观看 | 成人午夜a| 中文字幕 日本 | 亚洲免费视 | 欧美一区二区三区免费观看 | 久久久鲁 | 二区三区在线观看 | 国产 日韩 亚洲 欧美 | 久久亚洲精品久久国产一区二区 | 美女视频在线观看黄 | 国产91精品久久久久久久 | 一区二区三区视频在线 | 精品在线观看一区二区 | 一区二区三区欧美在线观看 | 亚洲免费永久 | 精国产品一区二区三区四季综 | 牛牛热这里只有精品 | 免费放黄网站在线播放 | 一级大黄毛片 | 日本黄色大片免费观看 | 日韩剧情片 |