上周五百度又进行了大更新,相信很多网站都受连累了!如果单单是从SEO的角度来分析原因,恐怕很难找出真实的原因。我凭借这个我对数据库的了解来谈一下我的看法,欢迎大家进行讨论:
1、百度的核心数据库不可能是通用的商用数据库,如Oracle、DB2、MySQL、MSSQL之类,因为这类数据库的数据存储能力无法满足百度的数据量要求,试想一下以Oracle数据库的强大数据存储能力来存储的百度的数据,那么最终的数据物理检索将是对应到硬盘的数据文件,从表空间到数据文件来回的耗时远不能满足时间复杂度的要求;
2、根据1我们可以大胆推论,百度用的是它们自己开发的数据库。这个数据库是什么我们暂时不知道,估且猜测一下就叫【灵异】吧!这种数据库对硬盘只有2种操作,读和写!3、回到我们的话题,百度大更新,其实就是对数据库中网站权重进行Update操作。操作的标准由百度蜘蛛来定,蜘蛛通过每天爬你的网站将你网站的信息记录在一张历史表中,一旦进行大更新操作,你网站的生死就由这张表的记录来决定。所以我们在站长工具上看到权重值并不是灵异数据库表中值,所以真正的黑帽高手应该是研究百度数据库的物理结构和逻辑结构,从而在里面钻孔子!
网站信息表
表名 |
SiteInfor | |||
列名 |
数据类型 (精度范围) |
空/非空 |
约束 条件 |
字段说明 |
SiteInforID |
Int |
非空 |
主键 |
网址ID,自增 |
SiteAddress |
NVarchar(500) |
非空 |
|
网址 |
ParentID |
Int |
空 |
外键 |
父ID,自关联,网站的内容页、频道页等父ID全部指向网站的首页,这样便于记录网页间的父子关系 |
DelFlag |
Bit |
非空 |
|
默认为0,删除标记 |
Value |
Int |
非空 |
|
权重 |
Keyword |
NVarchar (200) |
空 |
|
猜测1:关键词, 猜测2:可能是KeywordID关联到一张关键词表 |
LatestSnapshotTime |
DateTime |
非空 |
|
最近快照日期 |
DelFlag |
Bit |
非空 |
|
网站快照显示标记,0为显示,1为不显示 |
补充说明 |
|
网站数据明细信息表
表名 |
SiteDeatailData | |||
列名 |
数据类型 (精度范围) |
空/非空 |
约束 条件 |
字段说明 |
SiteDeatailID |
Int |
非空 |
主键 |
网址数据明细ID,自增 |
SiteInforID |
Int |
非空 |
外键 |
关联到SiteInfor表 |
SnapshotTime |
DateTime |
非空 |
|
快照时间, |
HtmlCode |
NVarchar(50000) |
非空 |
|
网页的Html代码,也就是通常我们看到的百度快照代码 |
Title |
NVarchar(100) |
|
|
标题 |
Keyword |
NVarchar(100) |
|
|
关键字 |
Description |
NVarchar(200) |
|
|
导出 |
WeightValue |
Float |
|
|
权重值,排名根据该字段进行降序 可能不止一个字段 |
1、 我认为一个网站只要有百度蜘蛛的爬网记录该网站就会被写入百度数据库的,只是通过DelFlag来区分是否展现改网站的快照,当用户输入一个关键词时,数据库中只有DelFlag为0的记录才会被提取出来进行分析排序。SEOer常常会说网站的快照没放出来,这恐怕就是DelFlag这个字段再作祟吧;
2、 至于快照是否展现出来就要看SiteDeatailData表中网页对应的快照爬网信息了,百度会按照它的规则对网页进行评判;
3、 一般一个网页在SiteDeatailData表中会有多个快照时间,百度蜘蛛也会不断的像SiteDeatailData表中插入新的网页快照
4、 LatestSnapshotTime指的网站的最新快照时间,在用户搜索时,往往我们会看到不同的词语有着不同的快照日期,而SiteInfor表中的LatestSnapshotTime字段和SiteDeatailData表中的SnapshotTime是紧密关联的,通过该字段决定从网站数据明细信息表取出的是哪天的快照;
5、 从数据存储的角度上SiteDeatailData表是有冗余的,因为Title、Keyword、Description都是可以从HtmlCode中取出,但是由于时间复杂度的要求,所以分开存储;
6、 在以上基础上我们可以大胆的猜想由于百度是海量数据,所以它很可能有历史表,即存在SiteInfor_History1, SiteDeatailData_ History1, SiteInfor_History2, SiteDeatailData_ History2……这类的历史表主要用于对于网页历史数据的存储,要知道互联网数据的体积是庞大的,一个网站3年前5年前的数据存储在当前业务信息表中可能性不大,并且意义也不大,所以将它存储在历史数据表中方便以后的百度大更新时对于网站排名的分析;
7、 以上是我对百度数据库物理结构一点粗浅的分析,至于核心的逻辑结构即输入搜索这块,我认为可能还存在一张网站关键词权重表,待下一讲和大家讨论!