TableStore:爬虫数据存储和查询利器

TableStore是阿里云自研的在线数据平台,提供高可靠的存储,实时和丰富的查询功能,适用于结构化、半结构化的海量数据存储以及各种查询、分析。

爬虫数据特点

在众多大数据场景中,爬虫类型的数据非常适合存储在TableStore。主要是因为爬虫类型数据的一些特征和TableStore和匹配:

数据量大

爬虫数据一般都是抓取的互联网上的某个行业或领域的数据,数据规模和这个行业的数据规模有关,比如资讯类,每时每刻都在产生大量新闻报道,这个数据规模可能在10 TB到100 TB级别,如果考虑到历史存量数据,那么规模可能会更大。这么大量的数据存储已经不适合用单机的关系型数据库了,也不适合分库分表了,而需要一款分布式NoSQL数据库,这样可以将数据按一定的路由规则分布到不同机器上,实现自动的水平扩展,非常适合存储海量数据,尤其是爬虫类。

宽行和稀疏列

爬虫的数据一般来源于多个数据源,比如资讯数据可以来自人民网、新浪或者腾讯,每个数据源的数据特征不可能完全一样,每家有每家的特殊性,这样就会出现每一行数据的属性列有差异,虽然可以归一化处理后,可以将通用的属性列统一,但是不同数据源还是会存在一定差异性。如果为每个数据源建立一张表,那么工作量就会非常大,也不适合。这时候,就需要用到宽行和稀疏列功能,既能保证列数无上限,也能保证不同行不同列,还可以不额外增加存储成本和运维成本。

查询类型多样

爬虫数据的存储后,一般有两个出口,一个是数据处理程序,数据处理程序会读取最新的爬虫数据,然后按照自定义的处理逻辑做数据加工,处理完后会新数据写入原表或新表。

数据处理完之后,数据可以提供给下游企业客户或终端用户使用了,场景的查询需求有下列几种:

  • 多种属性列组合查询。比如全网简历信息里面,通过年龄、学历、专长查询,且每个人查询的条件可能都完全不一样,需要多种属性列的自由组合查询。
  • 分词查询。不管是咨询类,还是简历类,都有大量的文本描述,这部分内容都需要支持分词后再查询。
  • 排序能力。比如资讯类数据中,查询某个新闻后,需要按时间逆序返回,越新的数据价值越大。
  • 随机读能力。如果是用来做全局数据分析或处理,那么随机读是一种必须要有的能力。
  • 轻量级统计分析。比如资讯类,想查看某个热点新闻的传播时间段和趋势,就需要统计每个时间段的此类新闻出现次数。
    这些查询能力,在传统的关系型数据库或者开源NoSQL中都无法提供。

开源解决方案

爬虫数据存储的方案已经演进了将近二十年了,千奇百怪的各种方案都有,主要的差异来源于两点:

  • 当前能获取到的存储系统能力。
  • 自身对系统可靠性、可用性的要求高低。
    我们下面以当前业界流行的开源系统为材料,打造一个爬虫数据存储的系统。

当前业内的开源存储系统有两大类,一类是开源的关系型数据库,比如MySQL等,一类是NoSQL,比如HBase等。这两类数据存储系统都不能支持分词查询,那么还需要一个全文检索的系统,当前可选的有solr和Elasticsearch。

基于上述的素材,我们就可以搭建一个存储爬虫的系统了:

  • 首先,选择存储系统,MySQL和HBase都可以,如果使用MySQL,则需要分库分表,两者架构图差不多,这里我们就选择HBase。
  • 再次,选择查询系统,可选的solr和Elasticsearch,虽然是同一类型系统,但是Elasticsearch的目前更流行,那我们也选择Elasticsearch。
    这样,架构图大致如下:

大概解释下:

  • 流程:爬虫系统将抓取的数据写入HBase离线集群,然后数据处理系统周期性或流式的处理新到的数据,将处理后的结果写入HBase在线集群。HBase在线集群存储所有属性列的值,然后将需要查询的列通过co-processor发送给消息队列,最后再将消息队列中的数据被Elasticsearch消费,生成索引。最后,用户通过索引查询到PK,然后通过proxy到HBase在线集群读取这一行完整数据,最后返回给用户。
  • 数据存储集群有两个,一个是在线集群,一个是离线集群,原因是为了避免减少离线集群对在线查询的影响,因为离线系统重吞吐,而在线系统重延迟,所以,这里会分成两个集群,目的是挺高系统可用性。
  • 消息队列的目的是削峰填谷,减少对下游系统:Elasticsearch的压力,同时当Elasticsearch写入慢或者出故障后,不至于影响上游系统,目的也是为了提高系统可用性,避免单点故障导致整个系统雪崩。
  • Proxy的目的是减轻客户端工作量,提高易用性的工具,原因是爬虫数据是系数列,这些列不可能全部都在Elasticsearch中创建索引,只有部分需要查询、分析的属性列才会在Elasticsearch中建立索引,但是查询的时候也需要未建立索引的字段,这样就需要一个系统做反查和合并,就是先查Elasticsearch获取到PK,然后通过PK到HBase在线集群查询这一行完整数据。
  • 这个系统中,需要运维6个不同开源系统,运维压力比较大。

TableStore云解决方案

最开始,我们说TableStore很适合存储爬虫数据,在介绍了开源系统的解决方案后,我们再来看一下TableStore的解决方案,以及相对于开源系统,可以为客户带来的收益。

也先看一下架构图:

大概解释下:

  • 爬虫系统抓取的数据写入TableStore的离线表,然后经过TunnelService的流式通道,数据进入数据处理系统做处理加工,再将加工后的数据写入在线表,用户直接查询在线表即可。
  • 将离线表和在线表同时放在TableStore服务中,会不会出现离线表干扰在线表的情况?这个不会的,TableStore服务内部有自动的负载均衡和隔离系统,会自动处理这些问题。
  • 所有的查询都可以直接查询在线表及其索引,提供了多字段组合查询、分词查询、排序和统计分析等功能,完全可以满足用户对查询的需求。
  • 数据处理部分一般有两种处理方式,一种是离线全量处理,这种可以使用阿里云的MaxCompute系统,MaxCompute可以直读TableStore的数据做计算,不需要额外把数据导过去。另一种是流式实时处理,TableStore提供了 TunnelService系统,可以获取到实时的Table中的数据更新记录,然后将更新记录发送到函数计算、流式计算系统,或者自己的应用、flink等系统处理。
  • 这个架构中,用户只需要运维2个系统即可。
示例

我们接下来举一个简历类爬虫数据存储和查询的示例,帮忙读者快速理解。

简历一般是一个PDF文档或者doc文档,是一个文件,但是我们可以从这些文件中抽取出结构化的信息,比如姓名、电话号码、身份证、邮箱、毕业学校、学历、专业领域、项目经验、兴趣、期望薪水和工作年限等。

首先,我们设计TableStore中主表结构:

主键列属性列属性列属性列属性列属性列属性列属性列属性列属性列
身份证姓名电话号码邮箱毕业学校学历专业领域项目经验兴趣期望薪水工作年限
StringStringStringStringStringStringStringStringStringLongDouble
61xxx5王一152xxx7aa@xx.comMIT硕士[数据库,MySQL]1.数据库binlog优化。[足球]200003.5

大概解释下:

  • 主键列需要一个唯一值,用来唯一确定某个人,这里我们用了身份证,有些场景获取不到身份证,那可以用手机号或其他ID。
  • 后面几个全部是属性列,包括姓名,电话号码等。期望薪水因为都是整数,所以可以选择Long类型,工作年限由于有小数,所以可以是Double类型。
  • 通过这张表,我们可以通过身份证,查询到该用户的详细信息。但是无法通过属性列查询,如果需要通过属性列查询,则需要创建多元索引。

然后,我们再创建多元索引,多元索引的结构如下:

属性列属性列属性列属性列属性列属性列属性列属性列属性列
姓名电话号码毕业学校学历专业领域项目经验兴趣期望薪水工作年限
Text:单字分词KeywordKeywordKeywordKeyword ArrayText:多层语义Keyword ArrayLongDouble

解释下:

  • 上面的多元索引结构中包括9列,比Table中少了2列,是因为不需要通过“邮箱”和“身份证”两个属性列查询,所以,在建立index的时候就不需要为这两列创建index了。但是如果业务中确实需要通过邮箱查询,那么多元索引创建时加上邮箱即可。
  • 姓名的类型是Text:单字分词,意思是类型是Text,分词是单子分词,这样好处就是我可以通过搜索“小刚”搜索到“王小刚”、“冯小刚”等。
  • 电话号码、毕业院校、学历都是Keyword类型(对应Table中的String),因为这些都字符串都比较短,且查询方式是直接完全匹配或者前缀查询,那么用String就可以了。
  • 专业领域和项目经验两个属性列是Keyword Array的,因为是这两个属性列中会包括多个值,查询的时候只要有一个满足就可以返回,比如某个人的专业领域是:数据库、MySQL,那么我们查询“数据库”的时候,希望这个人返回。
  • 期望薪水和工作年限是数字类型的Long和Double,这样这两个属性列就可以支持范围查找,比如查找工作年限大于2年,小于5年,且期望薪水小于2万的简历。

至此,我们就把简历库的table和index都建好了,用户就可以往Table中开始写数据,数据写入后会异步同步到Index中,这样就可以通过Index查询了。

总结

使用TableStore解决方案后,相对于开源解决方案,可以带来不少的收益:

减少运维负担

使用开源系统的架构中,需要运维6个系统,包括了3个开源系统:HBase、Kafka和Elasticsearch,为了运维这三个开源系统,需要有人对这三个系统比较熟悉,否则很难运维好。就算比较熟悉,也很难处理线上遇到的所有的问题,总会碰到无法解决的棘手问题而影响生产环境。

如果使用了TableStore云解决方案,那么就不需要运维任何开源系统,只需要运维自己开发的两个系统,同时关注TableStore中的两个表就可以了,这两张表的运维全部是TableStore服务负责,且提供SLA保障,绝对比自己运维开源系统的可用性要高。

同时,采用TableStore方案后,由于TableStore支持实时自动扩容,客户不再需要提前规划水位和集群容量,也不用担心高水位和突发流量对系统的冲击,将这些工作都交给了更擅长的云服务处理。

这样,不仅降低了运维的工作量和压力,同时也降低了系统风险,提高了系统整体的可用性。

减少时间成本

TableStore云架构方案相对于开源方案,系统更少,从零开始到上线需要的开发时间更少,同时,TableStore是serverless的云服务,全球多个区域即开即用,可以大大降低客户的开发上线的时间,提前将产品推出,抢先争取市场领先优势。

同时,TableStore支持按量付费,用户完全可以根据真实使用量付费,不再需要担心低峰期系统资源的浪费了,一定程度上,也能降低使用成本。

最后

目前,已经有不少行业的客户在使用TableStore存储爬虫数据,比如资讯类、生活类、文章类等等,也有部分用户在小数据量级时使用MySQL等关系型数据库,等数据规模大了后被迫迁移到TableStore存储。同时欢迎更多的客户开始使用TableStore存储你们的爬虫数据。

原文链接

转载于:https://my.oschina.net/u/1464083/blog/3018073

weixin_34187822
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi
weixin_36580930的博客
02-17 1305
111
Elasticsearch- 分词查询
热门推荐
FANET
05-27 2万+
查看分词的命令, ES
Elasticsearch专栏-5.es基本用法-分词查询
zjun1001的博客
04-25 1万+
es 分词查询
elasticsearch 基于ik分词器的分词查询和模糊匹配
朝立的博客
05-05 4051
查询的内容分解,提取。例如 文档数据库 ,就会被分词器 分解为 文档数据数据库等 查询返回更加有广度。类似 mysql 语法中的 like ‘%value%’此处简单梳理一下最常用的查询查询会将分词解析出的分词。根据具体字段精确查询内容。ES查询条件 分词查询。类似于百度的分词查询
TableStorePython SDK 的 DML 操作文档索引
最新发布
长行
04-24 774
创建 OTS 客户端对象(
mysql fulltext 分词_在mysql中使用全文索引fulltext|mysql,全文索引,fulltext
weixin_42365604的博客
01-21 845
全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、 VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CRE...
A毕业设计:爬虫数据分析
03-15
爬虫数据分析结合在一起可以帮助我们从互联网上获取数据,并对这些数据进行挖掘、清洗和分析,从而发现有价值的信息或见解。以下是使用爬虫数据分析的典型流程: 1. **爬虫数据采集**: - 使用爬虫技术(如...
爬虫开发:数据采集与应用的利器.docx
04-08
爬虫开发作为一种数据采集工具,能够帮助用户从互联网上收集各种类型的数据,并进行相应的处理和分析。本文将探讨爬虫开发的基本原理、常见技术和实际应用,旨在帮助读者更好地理解和应用爬虫技术。 正文: 爬虫...
爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器
04-14
爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器 爬虫技术:从Web中获取数据利器 爬虫技术...
毕业设计:分布式爬虫系统与数据管理平台.zip
03-08
数据存储爬虫将提取的数据存储数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫...
Python 入门爬虫数据分析实战.zip
03-23
数据存储爬虫将提取的数据存储数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫...
SQL分词查询存储过程
03-02
SQL分词查询存储过程,很简单的代码,感兴趣的朋友可以下载看看!
索引分词查看工具
08-22
索引查看工具luke,内置bat执行即可。6.0版本。网上找了很久才找到,很多版本比较低的,所以拿出来分享下。
中文分词检索系统
11-22
public static void main (String[] args) throws ParserException { try { TravelWordTable(RadarSpecialSearchEngine.fdz+"/字典.txt"); } catch(Exception e) { e.printStackTrace(); } } public static void TravelWordTable(String filename) throws IOException { try{ String buffer ; FileWriter resultFile = null; PrintWriter myFile = null; String dstfile = filename+ "_dsturl.txt" ; File writefile = new File(dstfile); if(!writefile.exists()) { writefile.createNewFile(); } resultFile=new FileWriter(writefile); myFile = new PrintWriter(resultFile); BufferedReader reader = new BufferedReader(new FileReader(filename)); while((buffer = reader.readLine())!=null) { String b = buffer; System.out.println("开始检索关键字:"+b); buffer = URLEncoder.encode(buffer, "UTF-8"); String url = "http://s.wanfangdata.com.cn/Paper.aspx?q=" + buffer + "&f=top"; getWanFangUrls(url,"UTF-8",myFile); System.out.println("关键字:"+b+" 检索完成"); } if( myFile != null) myFile.close(); if( resultFile != null) resultFile.close(); } catch (ParserException e) { e.printStackTrace(); }
PHP 实现中文分词搜索功能
臭大佬的CSDN
07-31 1757
中文分词介绍众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是...
es分词查询
宸0313的博客
11-13 1406
查看es中的分词是怎样的,即这个词组在es的自动分词中是否被分在一起 POST _analyze {"analyzer": "ik_max_word","text": "万达"}
ElasticSearch 分词器查询
火山九日的博客
05-15 2361
首先创建索引 , 并建立字段mapping, 字段hobby使用的是ik_smart分词器 记住要用put请求 , 然后index和type 需要和类的注解上面一致 , 否则springDataSearch 查询不出来, 数据body如下: { "settings": { "index": { "number_of_shards": "1", "number_of_replicas": "0" } },
ElasticSearch多个字段分词查询高亮显示
weixin_30318645的博客
04-04 1520
ElasticSearch关键字查询,将关键字分词后查询,多个字段,查询出来字段高亮显示。 查询方法如下: public List<NewsInfo> searcher2(String key, String indexId, String type) { List<NewsInfo> newsInfos= new ArrayLi...
tablestore列式存储原理_TableStore爬虫数据存储查询利器
weixin_39612540的博客
12-21 158
TableStore是阿里云自研的在线数据平台,提供高可靠的存储,实时和丰富的查询功能,适用于结构化、半结构化的海量数据存储以及各种查询、分析。爬虫数据特点在众多大数据场景中,爬虫类型的数据非常适合存储TableStore。主要是因为爬虫类型数据的一些特征和TableStore和匹配:数据量大爬虫数据一般都是抓取的互联网上的某个行业或领域的数据数据规模和这个行业的数据规模有关,比如资讯类,每时...
Python写网络爬虫-35页
06-01
3. 科学研究:网络爬虫在各种社会科学领域发挥着关键作用,如网络数据分析、社会动力学研究和数据挖掘,帮助研究人员收集和分析大规模在线数据。 4. 不良用途:然而,爬虫也可能被用于非法活动,如黑客入侵...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • ffmpeg打开视频解码器失败:Could not find codec parameters for stream 0 (Video: h264): unspecified size... 19931
  • Linux防火墙Iptables如何设置只允许特定ip访问某端口 18223
  • 缺省是什么意思 13269
  • "error while loading shared libraries:libatomic.so.1:cannot open shared objec"问题解决办法 9429
  • Java高级工程师面试题总结及参考答案 9034

最新评论

  • Android JNI 获取应用程序签名

    bitera: 怎么拿到签名的详细信息?有效期、是debug还是release

  • H5商城,纯前端静态页面

    GoldenaArcher: 写的不错,活到老,学到老!欢迎回访我的博客

  • 虚拟机Linux下找不到/dev/cdrom

    m0_52013371: 我现在是找不到那个文件和目录

  • 虚拟机Linux下找不到/dev/cdrom

    m0_52013371: 解决不了咋办表情包表情包表情包表情包

  • nginx+keepalived高可用服务器宕机解决方案

    Tisfy: 楼主的帖子实在是写得太好了。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...
  • 高淇Struts2.0教程之视频笔记(5)
  • Android如何解析Intent
2019年391篇
2018年666篇
2017年968篇
2016年570篇
2015年390篇
2014年319篇
2013年321篇
2012年257篇
2011年211篇
2010年147篇
2009年123篇
2008年91篇
2007年68篇
2006年47篇
2005年25篇
2004年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司石岩网站推广工具深圳百度爱采购丹竹头SEO按效果付费双龙网站建设木棉湾网站优化大浪推广网站坑梓关键词按天扣费西乡模板制作观澜关键词按天计费横岗网站推广系统吉祥营销型网站建设坪地网站优化按天收费大鹏关键词排名包年推广福永标王永湖百度关键词包年推广塘坑企业网站改版丹竹头关键词按天收费大鹏设计网站深圳企业网站建设坂田网站建设西乡百搜词包沙井网站推广系统南澳seo排名吉祥网站建设设计丹竹头网站推广宝安建网站荷坳百姓网标王龙华网站优化软件观澜企业网站设计同乐百度网站优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化