搭建了一个简单的Spider引擎的测试环境,数据900万条左右,id是500万以下的放在分区1,500万以上的放在分区2。表的创建语句如下:
drop database if exists myspider;
create database myspider;
use myspider;
Create table tbl_t(
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
name string
) engine = Spider
Connection ' table "tbl_t", user "msandbox", password "msandbox" '
partition by range ( id ) (
partition pt1 values less than (5000000) comment 'host "rdb1", port "3306"',
partition pt2 values less than (MAXVALUE) comment 'host "rdb2", port "3306"'
);
发现,执行带limit的查询语句时速度极慢。下边的简单查询居然用了13分钟。
select * from tbl_t1 order by id desc limit 1;
id列是有索引的,分别在两个分区服务器(rdb1,rdb2)里执行同样的语句,速度都在1毫秒左右。这是什么原因呢?
再次在Spider服务器执行同样的查询,然后在rdb1、rdb2里执行show processlist,发现时间都花在了sending data上,先rdb1再rdb2,每个都sending了6分多。
终于明白了,Spider引擎在利用了condition pushdown后,虽然可以把查询条件传递到分区服务器,但是却不能传递limit。
为什么不让limit可以传递呢?limit n 这样的简单limit,实现起来不难呀,只要在各个分区服务器分别limit n 一下,再把各个分区服务器的结果集合并在一起,再做一次limit n 就可以了。但是,对于limit offset,n 这样的查询,就不能再各个分区服务器简单的执行limit offset,n 了,至少要传递 limit offset+n 才可以,然后在Spider服务器把各个分区的服务器的结果集合并在一起,做一次 limit offset,n 。不过至少现在的Spider引擎还没有实现这个功能。
如果在查询中加入where条件,限制分区结果集的数量(减少sending data 的时间),即使没有传递limit,也会快很多,这是使用Spider引擎需要注意的。
分享到:
相关推荐
J-Spider:是一个完全可配置和定制的Web Spider引擎.你可以利用它来检查网站的错误(内在的服务器错误等),网站内外部链接检查,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩展...
C++ js 互相调用 spider monkey
Spider引擎分布式数据库解决方案.docx
多线程抓取指定的URL站点的网页,并实现结构化保存到本地磁盘。 仅为学习,参考用。
PHPDig 是个开源的小型垂直搜索引擎程序,使用PHP编写,这里的是PHPDig核心的抓取和分析的代码。phpdig_spider.rar
web spider 的JAVA搜索引擎
c#编写spider
《用perl解析JavaScript之JavaScript模块的安装--SpiderMonkey》 安装依赖软件: 安装pyrex:sudo apt-get install python-pyrex 安装g++:sudo apt-get install g++ 安装libjs.so: $ tar zxvf js-1.7.0.tar...
weibo_spider_爬虫python_关键词爬虫_python_python爬虫_spider_源码.rar
SpiderMonkey-JS引擎,msvc6编译的js引擎!供大家使用!
1.Spider,好用的开源爬虫引擎 2.Eclipse项目
Black_Spider_1.7.2 new tools for upload shell and chek vuln
163spider-master
spider.py, spider.py 关于该爬虫( 爬虫有坑。初学时编写,仅供参考)程序运行示例:Spider.py -u url -d深度日志文件默认当前目录,名字:spider。log##主要参考:http://bbs.chinaunix.net
抢先式多线程Spider在智能搜索引擎中的实现
spider网络爬虫 c++ 实现 采用广度搜索算法获取url
一个Java的网络爬虫,可用于搜索引擎
This is a small spider solitaire game.
C#写的Spider程序
这是一个spider网络爬虫源代码,用c++完成的,主要是为搜索引擎研究者提供很好的材料,为初学者提供代码。大家可以互相学习学习。