免费注册 查看新帖 |

Chinaunix

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

[性能] 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
31 [报告]
发表于 2005-11-09 14:42 |只看该作者
原帖由 crazysoul 于 2005-11-9 14:39 发表


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


1。那久干脆用数据库得了。简单的索引?你能把索引做到多简单?查询所有带有218数字的IP,你怎么做?
2。内存表只适合几十,几百的数据量 ,23MB?至少超过我说的10w倍

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


1。那久干脆用数据库得了。简单的索引?你能把索引做到多简单?查询所有带有218数字的IP,你怎么做?
2。内存表只适合几十,几百的数据量 ,23MB?至少超过我说的10w倍


1.索引的算法具体我没有研究过(有机会再说),但做缓存就绝对简单了,用个100深度的队列就够用了.至于"查询所有带有218数字的IP",只显IP的用不到这种操作.再说就算是查找218.X.X.X这种IP,在算法上也要看数据的存储格式,若是IP换算成数字,那也是只大小比较问题;若是直接存储,那是正则算法.
2.你指的适合是你个人认为的适合,还是有相关的经验或官方文档说明?

论坛徽章:
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
33 [报告]
发表于 2005-11-09 15:06 |只看该作者
1.索引的算法具体我没有研究过(有机会再说),但做缓存就绝对简单了,用个100深度的队列就够用了.至于"查询所有带有218数字的IP",只显IP的用不到这种操作.再说就算是查找218.X.X.X这种IP,在算法上也要看数据的存储格式,若是IP换算成数字,那也是只大小比较问题;若是直接存储,那是正则算法.
2.你指的适合是你个人认为的适合,还是有相关的经验或官方文档说明?


1。人家问那种方法简单,就算能实现,这是简单方法吗?能并发读写吗?怎么具体定位到一条记录?
  而且你根本就没理解索引的作用.和IP数据库比较论坛用户登陆是不是更简单?
  只user,passwd就可以,拿cu干脆也用文本。
2。不用说明,拿脑子想过就知道。

论坛徽章:
0
34 [报告]
发表于 2005-11-09 16:18 |只看该作者
如果只是作查询用途,文本文件方式未尝不是一个好方法,只要组织管理好了,我相信会比数据库查询要快

刚才到一个论坛看了,还下载源程序来看,纯文本数据库的论坛,写的不错

有很多地方值得借鉴,比如对IP数据进行分段文本管理,如126.155.10.15以126.txt作为文件名,这对查询的确很有帮助

楼上有位兄弟说读取文本文件对硬盘伤害大。同是操作硬盘,你有什么证据说明操作文本文件会比操作数据库对硬盘的伤害要大?请说明

个人更偏向于纯文本的查询

论坛徽章:
0
35 [报告]
发表于 2005-11-09 16:20 |只看该作者
http://www.ofstar.net/
这是那个论坛

论坛徽章:
0
36 [报告]
发表于 2005-11-09 16:24 |只看该作者
数据库生来就是为了优化查询
不说多的,就算每秒只有几十个查询请求,“比如对IP数据进行分段文本管理,如126.155.10.15以126.txt作为文件名”还会有什么帮助吗?

当然了,可以作索引,做缓存,做xxxxx,但是那样还不如直接用数据库

论坛徽章:
0
37 [报告]
发表于 2005-11-09 16:33 |只看该作者
原帖由 geel 于 2005-11-9 16:24 发表
数据库生来就是为了优化查询
不说多的,就算每秒只有几十个查询请求,“比如对IP数据进行分段文本管理,如126.155.10.15以126.txt作为文件名”还会有什么帮助吗?

当然了,可以作索引,做缓存,做xxxxx,但是 ...



我不这样认为,数据库的主要作用是管理而不是查询

“不说多的,就算每秒只有几十个查询请求,“比如对IP数据进行分段文本管理,如126.155.10.15以126.txt作为文件名”还会有什么帮助吗?”

你的意思是每秒有几十个查询请求文本就不能查?有意思

论坛徽章:
0
38 [报告]
发表于 2005-11-09 17:23 |只看该作者
这种简单查询用关系型数据库当然不太对路。不过20万条记录,你用php完成全部操作,文件格式就像你说的那样,迅速取出符合条件的若干记录,做100000次查询,看看效率,再用数据库试试看

论坛徽章:
0
39 [报告]
发表于 2005-11-09 18:08 |只看该作者
原帖由 geel 于 2005-11-9 12:52 发表
ip2long();
long2ip();


我试过ip2long(),发现有的IP它无法返回数字,所以我干脆把193.253.034.000改为193253034000。

The function ip2long() generates an IPv4 Internet network address from its Internet standard format (dotted string) representation. If ip_address is invalid then -1 is returned. Note that -1 does not evaluate as FALSE in PHP.

论坛徽章:
0
40 [报告]
发表于 2005-11-09 18:23 |只看该作者
20万条记录可以进行IP分段管理,上面我已经提到过,可能说得不是很清楚
例如我将59开头的IP数据存为59.txt,10开头的IP数据存为10.txt,把20万条记录分为N个文件,进行IP查询的时候,如果IP是59.33.181.0我就直接读取59.txt文件,这样是不是可以提高速度呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP