1
sunchen 2016 年 1 月 12 日
ip 地址转化成 32 位数字, 然后经典的 bitmap 查找
|
2
popu111 2016 年 1 月 12 日 via Android
跑一遍存到 MySQL 里面去,然后就好多啦⊙▽⊙
|
3
luban 2016 年 1 月 12 日
@popu111 存到 mysql 也是不小的
推荐看这个, ip 数据有 txt 和作者自己封装的格式,比较准确,多种语言客户端都有代码 http://git.oschina.net/lionsoul/ip2region |
4
paw 2016 年 1 月 12 日
|
5
picasso250 2016 年 1 月 12 日
新建一个 table ipt
有 3 列,如下: ip_start int ip_end int info varchar 在 ip_start 和 ip_end 上各建一个索引 将这个 txt 跑一遍,存下来 select * from ipt where ip_start <= ? and ip_end >= ? |
6
0987363 2016 年 1 月 12 日
转 32 位然后筛选吧
|
7
xuboying OP |
8
congeec 2016 年 1 月 12 日 via iPhone
转 32bit 数字然后存到数据库
实在要文本的话用 btree 建立索引吧 最后别忘了加缓存 |
9
congeec 2016 年 1 月 12 日 via iPhone
文本只读不写的话可以分段多进程搜索,毕竟没有数据竞争,安全
|
10
lululau 2016 年 1 月 12 日
我怎么记得一个国内的 IP 库也就几十 MB
|
11
xuboying OP |
12
Livid MOD PRO |
13
TaMud 2016 年 1 月 12 日
ip 数据库都能卖钱〜〜〜〜〜
|
14
ryd994 2016 年 1 月 12 日
用 CIDR ,查询的时候按 prefix 长度顺序查
|
15
mlhadoop 2016 年 1 月 12 日
字典树可以吗?
|
16
wbsdty331 2016 年 1 月 12 日
纯真 IP 看 i
|
17
skydiver 2016 年 1 月 12 日
有多巨型?
|
18
raysonx 2016 年 1 月 12 日 via Android
IP 地址轉為 32 位二進制存儲,建立索引使用二分查找
|
19
h4x3rotab 2016 年 1 月 12 日 via iPhone 数据和 key 分离是必须的,你肯定要一个索引。
首先 ipv4 地址就是一个 int32 ,所以 key 很好处理。其次要看你的区间会不会重叠,没有交集自然随便搞,是排序之后二分查找,还是丢进什么可以查找的树结构都没问题。但是如果区间会重合,上面大多数人的答案都是错的。 对于重合的区间查找,要用区间树或者线段树才能有效保证查询效率,其他所有的做法都不靠谱, bitmap 只适用于分布均匀的小量数据,只支持一个 key 的各种容器或者数据库就更不用考虑了,最坏情况要遍历大半个索引。 |
20
strwei 2016 年 1 月 12 日
碎片化
|
21
Orzzzz 2016 年 1 月 12 日
zgrep
|
22
KentY 2016 年 1 月 13 日
先说说有多大
|
23
caocheng 2016 年 1 月 13 日
比如 postgres 数据库有 inet 类型
|