免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: qingmedia
打印 上一主题 下一主题

[性能] ip查询用文本好还是数据库好? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-11-08 20:03 |只看该作者
两个 table,一个 MyISAM,一个内存,CREATE IF NOT EXIST AS

论坛徽章:
0
22 [报告]
发表于 2005-11-08 21:07 |只看该作者
好呀,一石激起千层浪。

不过又有点迷糊了,我这ip信息20几万条/8MB的数据跟上G、上T的数据那岂不是九牛一毛阿,不算多吧?为什么说要数据库呢而不是文本呢?

论坛徽章:
0
23 [报告]
发表于 2005-11-08 21:17 |只看该作者
原帖由 qingmedia 于 2005-11-8 21:07 发表
好呀,一石激起千层浪。

不过又有点迷糊了,我这ip信息20几万条/8MB的数据跟上G、上T的数据那岂不是九牛一毛阿,不算多吧?为什么说要数据库呢而不是文本呢?

我稍微计算了一下,普通的IP库有四个字段,两个IP,一个country,一个city.
IP转为十进制,长度最长为10位,country和city一般也在50个字作用,所以一条数据的大小为:10+10+50+50=120 Byte
那20W条就是:
120*200000 = 24000000 Byte = 22.88818359375 MB
估计系统的内存不会在乎这23MB左右的空间,所以最优化的方案就是放入MYSQL的内存表里.至于重启丢失的问题,就照楼上的再插一次好了.23MB的数据插一次,不知要耗时多少...

论坛徽章:
0
24 [报告]
发表于 2005-11-08 21:59 |只看该作者
如果这个表每天都只读 1 次,倒也没有什么,若是每天读 10000 次,也用文本的话,每次不也得读?如果没有搜索到的话,不也得读完?数据库的话,还有缓存,文本有什么?

假设
输入 10MB 到内存需要时间单位 1
从内存读出一条需要时间单位 0.001
从内存读一万次需要多少时间?
读文本搜索一次多少时间?
读文本搜索一万次多少时间?

难道说,还要自己生成一个 index 系统,来记录读过的 IP 大概在哪里?
那不是和数据库一样么。

论坛徽章:
0
25 [报告]
发表于 2005-11-09 00:22 |只看该作者
凭我刚入门的水平还是用数据库比较现实,打算把ip地址218.000.000.000去掉点直接改为数字,第一个ip数字存到ip_from,第二个为ip_to,第三个为address,加index:

  1. 218.000.000.000|218.000.000.255|浙江省宁波市 电信||
复制代码


然后把用户ip补零比如改为210001123002,用:

SELECT * FROM iptable WHERE $ip>=`ip_from` AND $ip<=`ip_to` LIMIT 1

这样是否合理?

论坛徽章:
0
26 [报告]
发表于 2005-11-09 12:52 |只看该作者
ip2long();
long2ip();

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2005-11-09 13:06 |只看该作者
虽然已表明立场,不过还是忍不住要讨论一下.

所谓具体问题具体分析,杀什么鸡用什么刀.

这个帖子里提到的情况是否就是属于简单应用呢?

原帖由 crazysoul 于 2005-11-8 18:25 发表

另外,若没有用到第三方程序,如何绕过SYSTEM的I/O来实现自己的I/O?
难道我理解错了?


你到底想说什么?
BTW:干这样的事情,内存表没法快

论坛徽章:
0
28 [报告]
发表于 2005-11-09 14:22 |只看该作者
原帖由 北京野狼 于 2005-11-9 13:06 发表




你到底想说什么?
BTW:干这样的事情,内存表没法快


1.因为你说文本不适合复杂的数据操作,所以我认为IP搜索应该算是简单的应用了吧,那用文本应该适合咯?
2.内存表又有什么问题呢,在这个应用上(指IP查询)应该是很适合的.

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
29 [报告]
发表于 2005-11-09 14:30 |只看该作者
原帖由 crazysoul 于 2005-11-9 14:22 发表


1.因为你说文本不适合复杂的数据操作,所以我认为IP搜索应该算是简单的应用了吧,那用文本应该适合咯?
2.内存表又有什么问题呢,在这个应用上(指IP查询)应该是很适合的.



1。再简单的操作,数据量过大没有索引不能定位。
2。内存表只适合几十,几百的数据量

论坛徽章:
0
30 [报告]
发表于 2005-11-09 14:39 |只看该作者
原帖由 北京野狼 于 2005-11-9 14:30 发表



1。再简单的操作,数据量过大没有索引不能定位。
2。内存表只适合几十,几百的数据量


1.如果要用到文本来做库的话,就不会只是单纯的读取,简单的索引及缓存是要构造的.
2.就在楼主说的这个应用里,我粗略的做了计算,内存占用23MB,这个服务器应该承受得起的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP