接下去进入代码的模块,首先我们分析一下如何实现代码
我们拥有一张类别表,类别表中记录了 类别名称,编码,地址,该类别所拥有的页数等信息

类别表.png

抽象描述:

  1. 取出所有的类别
  2. 循环类别集合
    循环类别页数
    得到当前类别当前页集合数据
    插入数据库

对上述内容我们又几个地方需要注意,我们依次说明

第一点 数量量大

类别大致有4000多个,每个类别页数各不相同(一页60个商品是固定的),这么多的商品数据,如果我们还是采用同步方法依次执行的话,效率势必大打折扣,爬取所需花费的时间也很长。这个时候我们就要考虑多线程执行。
作者的思路是这样的:
不管数据量有多少,固定线程数量20个,即我只开20个线程处理任务。每个线程处理一个类别的工作任务。因为有的类别页数有100个,有的类别页数只有10个,这一块如何继续平均分配,不做考虑,各位可以开动大家的脑筋。

第二点 数据库如何存储

如此多的数据,我们应该如何存储。我们爬取的是相同的商品数据,只是内容不同。所以很自然的我们想到了分表。我们既然分表了,那么势必涉及到以后的查询,查询我们以后使用的是Lucene,自己建立一个简答的搜索引擎。在此基础之上,我们在表设计的时候就没有太大的约束。以下是我的商品表的设计图

商品数据表.png

Id 主键自增
SUID  商品唯一码
CategoryId 商品类别
Titile 商品名称
Description 商品描述
Price 价格
Url 地址
ShopName 店铺名称

商品编码来源于每一个li标签的id【如下图】,我们可以看到这是一个数字编码。我假设这个编码是一个自增的数字,那么我就可以使用百分取余的方法确定这个商品应该放在哪个表中。这是什么意思呢。
我们假设自己有20张表,每个表的数据结构都如上述描述的那样,那我们要解决的问题就是数据应该如何存储的问题。
自增数字的取余意思就是。如果当前编号是30001
30001 % 20=1 存放在商品表1中 Commodity_01
40871 % 20=11 存放在商品表11中 Commodity_11
这样做的好处是什么呢,因为商品如果是自增累加的。通过此方法可以平均分配每张表的数据,不会让某张表数据多,而某张表数据少

image.png

第三点 数据插入如何操作

我们可以从上文中了解到,在得到当前也数据后,我们要将其集合(60个)插入数据库,选用何种方式可以保证事务基础上又减少数据库链接是要考虑的问题。
以下是我的思路,贴代码讲解
代码为剪贴版,要看全部代码可以去我的github上面下载最新的源码

 //取值
List<POCO_Commodity> cateList = CommodityAnalysis.GetData(category.Url, category.Id, i);//处理List<CommodityGroupInput> groupList = cateList.GroupBy(u => Convert.ToInt64(u.SUId) % StaticConst.CategorySheetCount).Select(u => new CommodityGroupInput{
Id = u.Key,
Units = u.OrderBy(p => p.SUId).ToList()
}).ToList();//入库
_commodityService.InsertGroupBulk(groupList);

第一步取值,参数为 地址,类别码,页码
第二步是对List集合的分组,分组条件为唯一码%20,得到的内容为
[表索引号,对应的集合]
第三步,入库,代码贴图如下

入库代码.png

入库数据库操作我通过dapper实现,不知道dapper是什么的,可以自行百度。代码的解释如下,使用dapper数据库链接,开启事务,对形参集合进行SQL语句拼接。

3.3、苏宁百万级商品爬取 代码讲解 商品爬取相关推荐

  1. 百万级商品数据实时同步,查询结果秒出

    来自:微微科技公司 前阵子老板安排了一个新任务,要建设一个商家商品搜索系统,能够为用户提供快速.准确的搜索能力,在用户输入搜索内容时,要能从商家名称和商品名称两个维度去搜索,搜索出来的结果,按照准确率 ...

  2. 读书笔记第四讲:《百万级并发商品服务架构解密》丁鸣亮

    本文是读书笔记第四讲:网易考拉海购商品中心2017年商品中心架构,百万级并发商品服务 架构解密,作者:丁鸣亮 文章目录 1.前言:电商平台的商品服务 2.考拉:商品服务的"黑历史" ...

  3. AI 赛道“新选手”锐捷发布新一代 AI SaaS 云平台,支撑百万级零售货柜

    编辑 | 宋慧 出品 | CSDN 云计算 头图 | 付费下载于 IC photo 近几年,传统零售模式经历了几轮深层次变革,2016 年是新零售的元年,2017 年无人零售在国内又刮起了一阵大风,从 ...

  4. 性能第三讲:百万级QPS,支撑淘宝双11需要哪些技术

    性能第三讲:百万级QPS,支撑淘宝双11需要哪些技术 又到一年双11,相信大部分同学都曾经有这个疑问:支撑起淘宝双11这么大的流量,需要用到哪些核心技术?性能优化系列的第二篇我想跟大家探讨一下这个话题 ...

  5. 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手

    别人总觉得是在显吧,干脆把这个项目认为是小项目了,不知道把这个项目是小了,别人会不会又觉得又显吧了?说大也不行.说小也不行,也的确没招了. 我想主要把项目里遇到的问题分享给大家一起探讨,也并不是为了什 ...

  6. Java物联网开发(二) —— 开源百万级分布式 MQTT 消息服务器EMQX

    开源百万级分布式 MQTT 消息服务器EMQX 一. 是什么 1. 简介 2. 分类 3. EMQ X 消息服务器功能列表 二. 安装 1. 安装方式 rpm安装 docker安装 免安装 2. 目录 ...

  7. 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量...

    阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) 作者:用户 来源:互联网 时间:2016-03-30 13:32:40 安全流量事件https互联网资源 摘要:  ...

  8. 百万级QPS,支撑淘宝双11需要哪些技术

    目录 前言 正文 1.MySQL硬抗 2.分布式缓存(Tair)硬抗 3.客户端分布式缓存 4.缓存预热 5.客户端本地缓存 6.访问DB加锁 7.热点探测 8.限流 9.全链路压测 10.预案 11 ...

  9. 谁说高颜值女神做不了技术?她偏做,还是百万级主链!

    记者 | Aholiab 编者注:以下内容根据迅雷链总工程师来鑫采访整理,并获得独家授权,未经许可不得擅自转载. 还有20来天,万众期待的EOS主网就要上线了,公链的战场里又会入场一个大玩家.在中国, ...

最新文章

  1. 运用深度学习教机器人理解自然语言
  2. autorunner测试java代码,AutoRunner自动化测试工具介绍
  3. mysql避免回环复制_【20181204】 MySQL 双主复制是如何避免回环复制的
  4. iOS6新特征:UICollectionView介绍-非常棒 -转
  5. 架构系列一:大型项目架构演进过程
  6. c语言学习-从键盘输入10个字符,按照字典顺序将其排序输出(二维字符数组)
  7. cba篮球暂停次数和时间_CBA一场比赛每支球队可以叫多少次暂停
  8. 图论(二):图的割点(cut vertex)与连通度(connectivity)
  9. GB2312 一二级中文汉字字库(带拼音)
  10. 趣谈网络协议——UDP协议
  11. 运维常用表格-干货分享
  12. Linux系统配置jdk
  13. office 64位安装
  14. 酸性溶液中HER动力学分析
  15. LVGL lv_btn 按钮(9)
  16. 以CVPR顶会论文为例,探讨AI论文的阅读方法
  17. css:html元素的定位
  18. 4 第二式:左右开弓似射雕
  19. 杂事缠身总分神,不妨试试番茄钟,亲测有效
  20. 计算机显示windows update,我的电脑显示“系统管理员已禁用Windows Update”这要如何解决...

热门文章

  1. rabbitmq视频教程,面试官:
  2. c语言作业统计字符,C语言统计字符数(示例代码)
  3. js实现表格的行删除和增加_vue小demo之实现表格的增加和删除
  4. 面试中 项目遇见的难点答案_5月6日周一晚八点CCtalk直播2019年江苏省考公务员面试冲刺类型题难点解析突破举一反三...
  5. 学php什么自考专业,什么自考专业容易过自学考试哪些专业好考(已帮助356690人)...
  6. udp怎么保证不丢包_MQ不丢消息,究竟是怎么实现的?
  7. Android的触摸监听器实现滑动图片
  8. java thread 内存泄露_记一次ThreadLocal引发的内存泄露
  9. 20200126:(leetcode)三数之和 最接近的三数之和(含图解)
  10. 微型计算机接口与技术答案,微型计算机接口技术与应用习题答案(刘乐善).doc