万方和知网的区别?_如何学习SQL语言?


- #问答
  • 1、 万方和知网的区别?

    万方数据库、维普资讯网、中国知网的区别

    简单比较:

    1、从收录情况来看,维普收录最久,万方收录时间最短,但是现刊万方收录最好,维普最近两年的很多期刊都没有了,特别是医学类的。

    2、文档的清晰度:万方最高,维普最差。

    3、使用方便性:知网和万方差不多,维普最差。

    4、其它:万方的期刊浏览功能做的很好。

    更加深入比较:

    中国知识资源总库(CNKI)《中国知识资源总库》是由清华大学主办、中国学术期刊(光盘版)电子杂志社出版、清华同方知网(北京)技术有限公司发行、数百位科学家、院士、学者参与建设,精心打造的大型知识服务平台和数字化学习系统。目前,《总库》囊括了自然科学、人文社会科学及工程技术各领域知识,拥有期刊、报纸、博硕士培养单位的博士和优秀硕士学位论文、全国重要会议论文、中小学多媒体教辅以及1000多个加盟数据库。全文采用CAJ和PDF格式,必须下载专门的CAJ和PDF浏览器才可阅读。

    中国知识资源总库的重点数据库有:

    《中国期刊全文数据库(CJFD)》截至2007年3月共收录了国内8127种期刊,全文文献总量已达2272万多篇,收录起始时间一般为1994年,个别追溯到1979年或创刊年,按学科分126个专题,内容每日累增。产品形式有网络形式、光盘形式、《中国期刊专题全文数据库光盘版》。

    《中国优秀博硕士学位论文全文数据库(CDMD)》收录2000年至今300多个博硕士培养单位的学位论文,内容每日累增。

    《中国重要报纸全文数据库(CCND)》收录2000年至今1000多种重要报纸,内容每日累增。

    《中国重要会议论文集全文数据库》(CPCD)收录2000年至今400家学术团体的会议论文,内容每日累增。

    《中国企业知识仓库(CEKD)》收录国内5400余种核心与专业特色期刊、博硕论文、报纸、行业标准、法律法规、行业经济数据统计、行业深度研究报告、技术发展动态、国外经济发展动态等信息,涵盖企业技术创新、经营决策、企业管理、WTO、行业动态等专业资料信息。

    《中国图书全文数据库》《中国年鉴数据库》《各行业百科数据库》《声像资料数据库》《《保持共产党员先进性教育》专题数据库》等。

    以中国期刊全文数据库为例讲解CNKI的检索方式。中国期刊全文数据库有分类检索、初级检索、高级检索和专业检索四种方式。在每种方式的检索结果(包括二次检索的检索结果)里都可以进行二次检索,可以无数次的进行,逐步缩小检索范围,直至检索结果为零。

    重庆维普资讯有限公司是科学技术部西南信息中心下属的一家大型的专业化数据公司,是中文期刊数据库建设事业的奠基人。自1989年以来,一直致力于期刊等信息资源的深层次开发和推广应用,集数据采集、数据加工、光盘制作发行和网上信息服务于一体;收录有中文期刊8000种,中文报纸1000种,外文期刊4000种,拥有固定客户2000余家。目前已成为推动我国数字图书馆建设的坚强支柱之一。

    在以上的数据库中,最为常用也最受大家欢迎的是《中文科技期刊数据库》。它源于重庆维普资讯有限公司1989年创建的《中文科技期刊篇名数据库》,其全文和题录文摘版一一对应,经过16年的推广使用和完善,全面解决了文摘版收录量巨大但索取原文繁琐的问题。全文版的推出受到国内广泛赞誉,同时成为国内各省市高校文献保障系统的重要组成部分。《中文科技期刊数据库》还是目前世界最大的连续动态更新的中文期刊全文数据库,积累全文文献728多万篇,分七大专辑:自然科学专辑、农业科学专辑、医药卫生专辑、教育科学专辑、经济管理专辑、图书情报专辑、工程技术专辑。

    万方数据库简介

    知识来源:万方数据股份有限公司是国内第一家以信息服务为核心的股份制高新技术企业,作为国内第一批开展互联网服务的企业之一,万方数据坚持以信息资源建设为核心,努力发展成为中国第一的信息服务提供商,开发独具特色的信息处理方案和信息增值产品,为用户提供从数据、信息到知识的全面解决方案,服务于国民经济信息化建设,推动中国全民信息素质的成长。

    覆盖范围:自然科学、数理化、天文、地球、生物、医药、卫生、工业技术、航空、环境、社会科学、人文地理等各学科领域。

    收录年限:《中国会议论文全文数据库》主要收录1998年以来国家级学会、协会、研究会组织召开的全国性学术会议论文。

  • 2、 如何学习SQL语言?

    掌握这50句常用SQL基本就差不多了。

    建议自己在数据库建立好以下几张表,然后自己对照这些例子逐个全部试一遍,并理解透彻。

    数据表准备

    Student(S#,Sname,Sage,Ssex)学生表
    Course(C#,Cname,T#)课程表
    SC(S#,C#,score)成绩表
    Teacher(T#,Tname)教师表

    问题:

    1、查询“001”课程比“002”课程成绩高的所有学生的学号;

    selecta.S#from(selects#,scorefromSCwhereC#='001')a,(selects#,scorefromSCwhereC#='002')bwherea.score>b.scoreanda.s#=b.s#;

    2、查询平均成绩大于60分的同学的学号和平均成绩;

    selectS#,avg(score)fromscgroupbyS#havingavg(score)>60;

    3、查询所有同学的学号、姓名、选课数、总成绩;

    selectStudent.S#,Student.Sname,count(SC.C#),sum(score)fromStudentleftOuterjoinSConStudent.S#=SC.S#groupbyStudent.S#,Sname

    4、查询姓“李”的老师的个数;

    selectcount(distinct(Tname))fromTeacherwhereTnamelike'李%';

    5、查询没学过“叶平”老师课的同学的学号、姓名;

    selectStudent.S#,Student.SnamefromStudentwhereS#notin(selectdistinct(SC.S#)fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname='叶平');

    6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

    selectStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=SC.S#andSC.C#='001'andexists(Select*fromSCasSC_2whereSC_2.S#=SC.S#andSC_2.C#='002');

    7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;

    selectS#,SnamefromStudentwhereS#in(selectS#fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname='叶平'groupbyS#havingcount(SC.C#)=(selectcount(C#)fromCourse,TeacherwhereTeacher.T#=Course.T#andTname='叶平'));

    8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

    SelectS#,Snamefrom(selectStudent.S#,Student.Sname,score,(selectscorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#='002')score2fromStudent,SCwhereStudent.S#=SC.S#andC#='001')S_2wherescore2<score;

    9、查询所有课程成绩小于60分的同学的学号、姓名;

    selectS#,SnamefromStudentwhereS#notin(selectStudent.S#fromStudent,SCwhereS.S#=SC.S#andscore>60);

    10、查询没有学全所有课的同学的学号、姓名;

    selectStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=SC.S#groupbyStudent.S#,Student.Snamehavingcount(C#)<(selectcount(C#)fromCourse);

    11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

    selectS#,SnamefromStudent,SCwhereStudent.S#=SC.S#andC#inselectC#fromSCwhereS#='1001';

    12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;selectdistinctSC.S#,SnamefromStudent,SCwhereStudent.S#=SC.S#andC#in(selectC#fromSCwhereS#='001');

    13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

    updateSCsetscore=(selectavg(SC_2.score)fromSCSC_2whereSC_2.C#=SC.C#)fromCourse,TeacherwhereCourse.C#=SC.C#andCourse.T#=Teacher.T#andTeacher.Tname='叶平');

    14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;

    selectS#fromSCwhereC#in(selectC#fromSCwhereS#='1002')groupbyS#havingcount(*)=(selectcount(*)fromSCwhereS#='1002');

    15、删除学习“叶平”老师课的SC表记录;

    DelectSCfromcourse,TeacherwhereCourse.C#=SC.C#andCourse.T#=Teacher.T#andTname='叶平';

    16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;

    InsertSCselectS#,'002',(Selectavg(score)fromSCwhereC#='002')fromStudentwhereS#notin(SelectS#fromSCwhereC#='002');

    17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

    SELECTS#as学生ID,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='004')AS数据库,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='001')AS企业管理,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='006')AS英语,COUNT(*)AS有效课程数,AVG(t.score)AS平均成绩FROMSCAStGROUPBYS#ORDERBYavg(t.score)

    18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

    SELECTL.C#As课程ID,L.scoreAS最高分,R.scoreAS最低分FROMSCL,SCASRWHEREL.C#=R.C#andL.score=(SELECTMAX(IL.score)FROMSCASIL,StudentASIMWHEREL.C#=IL.C#andIM.S#=IL.S#GROUPBYIL.C#)ANDR.Score=(SELECTMIN(IR.score)FROMSCASIRWHERER.C#=IR.C#GROUPBYIR.C#);

    21、查询不同老师所教不同课程平均分从高到低显示

    SELECTmax(Z.T#)AS教师ID,MAX(Z.Tname)AS教师姓名,C.C#AS课程ID,MAX(C.Cname)AS课程名称,AVG(Score)AS平均成绩FROMSCAST,CourseASC,TeacherASZwhereT.C#=C.C#andC.T#=Z.T#GROUPBYC.C#ORDERBYAVG(Score)DESC

    22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML(003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

    SELECTDISTINCTtop3SC.S#As学生学号,Student.SnameAS学生姓名,T1.scoreAS企业管理,T2.scoreAS马克思,T3.scoreASUML,T4.scoreAS数据库,ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)as总分FROMStudent,SCLEFTJOINSCAST1ONSC.S#=T1.S#ANDT1.C#='001'LEFTJOINSCAST2ONSC.S#=T2.S#ANDT2.C#='002'LEFTJOINSCAST3ONSC.S#=T3.S#ANDT3.C#='003'LEFTJOINSCAST4ONSC.S#=T4.S#ANDT4.C#='004'WHEREstudent.S#=SC.S#andISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)NOTIN(SELECTDISTINCTTOP15WITHTIESISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)FROMscLEFTJOINscAST1ONsc.S#=T1.S#ANDT1.C#='k1'LEFTJOINscAST2ONsc.S#=T2.S#ANDT2.C#='k2'LEFTJOINscAST3ONsc.S#=T3.S#ANDT3.C#='k3'LEFTJOINscAST4ONsc.S#=T4.S#ANDT4.C#='k4'ORDERBYISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)DESC);

    23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[<60]

    SELECTSC.C#as课程ID,Cnameas课程名称,SUM(CASEWHENscoreBETWEEN85AND100THEN1ELSE0END)AS[100-85],SUM(CASEWHENscoreBETWEEN70AND85THEN1ELSE0END)AS[85-70],SUM(CASEWHENscoreBETWEEN60AND70THEN1ELSE0END)AS[70-60],SUM(CASEWHENscore<60THEN1ELSE0END)AS[60-]FROMSC,CoursewhereSC.C#=Course.C#GROUPBYSC.C#,Cname;

    24、查询学生平均成绩及其名次

    SELECT1+(SELECTCOUNT(distinct平均成绩)FROM(SELECTS#,AVG(score)AS平均成绩FROMSCGROUPBYS#)AST1WHERE平均成绩>T2.平均成绩)as名次,S#as学生学号,平均成绩FROM(SELECTS#,AVG(score)平均成绩FROMSCGROUPBYS#)AST2ORDERBY平均成绩desc;

    25、查询各科成绩前三名的记录:(不考虑成绩并列情况)

    SELECTt1.S#as学生ID,t1.C#as课程ID,Scoreas分数FROMSCt1WHEREscoreIN(SELECTTOP3scoreFROMSCWHEREt1.C#=C#ORDERBYscoreDESC)ORDERBYt1.C#;

    26、查询每门课程被选修的学生数

    selectc#,count(S#)fromscgroupbyC#;

    27、查询出只选修了一门课程的全部学生的学号和姓名

    selectSC.S#,Student.Sname,count(C#)AS选课数fromSC,StudentwhereSC.S#=Student.S#groupbySC.S#,Student.Snamehavingcount(C#)=1;

    28、查询男生、女生人数

    Selectcount(Ssex)as男生人数fromStudentgroupbySsexhavingSsex='男';Selectcount(Ssex)as女生人数fromStudentgroupbySsexhavingSsex='女';

    29、查询姓“张”的学生名单

    SELECTSnameFROMStudentWHERESnamelike'张%';

    30、查询同名同性学生名单,并统计同名人数

    selectSname,count(*)fromStudentgroupbySnamehavingcount(*)>1;;

    31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)

    selectSname,CONVERT(char(11),DATEPART(year,Sage))asagefromstudentwhereCONVERT(char(11),DATEPART(year,Sage))='1981';

    32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

    SelectC#,Avg(score)fromSCgroupbyC#orderbyAvg(score),C#DESC;

    33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩

    selectSname,SC.S#,avg(score)fromStudent,SCwhereStudent.S#=SC.S#groupbySC.S#,Snamehavingavg(score)>85;

    34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数

    SelectSname,isnull(score,0)fromStudent,SC,CoursewhereSC.S#=Student.S#andSC.C#=Course.C#andCourse.Cname='数据库'andscore<60;

    35、查询所有学生的选课情况;

    SELECTSC.S#,SC.C#,Sname,CnameFROMSC,Student,CoursewhereSC.S#=Student.S#andSC.C#=Course.C#;

    36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

    SELECTdistinctstudent.S#,student.Sname,SC.C#,SC.scoreFROMstudent,ScWHERESC.score>=70ANDSC.S#=student.S#;

    37、查询不及格的课程,并按课程号从大到小排列

    selectc#fromscwherescore<60orderbyC#;

    38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

    selectSC.S#,Student.SnamefromSC,StudentwhereSC.S#=Student.S#andScore>80andC#='003';

    39、求选了课程的学生人数

    selectcount(*)fromsc;

    40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

    selectStudent.Sname,scorefromStudent,SC,CourseC,TeacherwhereStudent.S#=SC.S#andSC.C#=C.C#andC.T#=Teacher.T#andTeacher.Tname='叶平'andSC.score=(selectmax(score)fromSCwhereC#=C.C#);

    41、查询各个课程及相应的选修人数

    selectcount(*)fromscgroupbyC#;

    42、查询不同课程成绩相同的学生的学号、课程号、学生成绩

    selectdistinctA.S#,B.scorefromSCA,SCBwhereA.Score=B.ScoreandA.C#<>B.C#;

    43、查询每门功成绩最好的前两名

    SELECTt1.S#as学生ID,t1.C#as课程ID,Scoreas分数FROMSCt1WHEREscoreIN(SELECTTOP2scoreFROMSCWHEREt1.C#=C#ORDERBYscoreDESC)ORDERBYt1.C#;

    44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

    selectC#as课程号,count(*)as人数fromscgroupbyC#orderbycount(*)desc,c#

    45、检索至少选修两门课程的学生学号

    selectS#fromscgroupbys#havingcount(*)>=2

    46、查询全部学生都选修的课程的课程号和课程名

    selectC#,CnamefromCoursewhereC#in(selectc#fromscgroupbyc#)

    47、查询没学过“叶平”老师讲授的任一门课程的学生姓名

    selectSnamefromStudentwhereS#notin(selectS#fromCourse,Teacher,SCwhereCourse.T#=Teacher.T#andSC.C#=course.C#andTname='叶平');

    48、查询两门以上不及格课程的同学的学号及其平均成绩

    selectS#,avg(isnull(score,0))fromSCwhereS#in(selectS#fromSCwherescore<60groupbyS#havingcount(*)>2)groupbyS#;

    49、检索“004”课程分数小于60,按分数降序排列的同学学号

    selectS#fromSCwhereC#='004'andscore<60orderbyscoredesc;

    50、删除“002”同学的“001”课程的成绩

    deletefromScwhereS#='001'andC#='001';

  • 3、 大数据的数据库是什么?

    大数据时代是当前最吃香的名词,其应用到世界的各个领域和行业。我知道大概有几种:

    1.关系数据库

    2.列式数据库

    3.键值数据库

    4.图像图形数据库

    5.分布式文档数据库

    下面分别一一说明其代表的产品以及其主要特点。

    关系数据库

    关系型数据一直为我们所用,比如Oracle,MySQL,SQLServer,Postgress.保存到关系数据库的数据必须满足一定要求,用通用的话来说就是满足一定的数据范式,比如主键,外键,数据的冗余;举个例子,学生的信息可以保存到数据库中,班级的信息也可以保存到数据库中,而且一个班级包括很多学生,他们之间通过外键还可以建立一种1对多的对应关系,这些信息和关系可以通过关系型数据库进行存储,值得注意的是,关系型数据库,需要预先定义其表结构,而且存储前需要定义其对应的数据类型或者长度,一旦有新的属性加入,就要修改其表的结构。传统的关系型数据库其实就是行式数据库,就是一行一行的方式来存储信息的。

    列式数据库

    列式数据库一般应用于对应大量的字符串数据,实例如HBase,cassandra,SybaseIQ,HPVertica、EMCGreenplum等。列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生,主要适合于批量数据处理和即时查询。下面这2张图形象的说明了什么是列式数据库,什么是行式数据库已经两者之间的区别。

    极高的装载速度(最高可以等于所有硬盘IO的总和,基本是极限了)

    适合大量的数据而不是小数据

    实时加载数据仅限于增加(删除和更新需要解压缩Block然后计算然后重新压缩储存)

    高效的压缩率,不仅节省储存空间也节省计算内存和CPU,为什么具有高压缩率呢?因为存储的数据类型是一样的。

    非常适合做聚合操作。

    键值数据库

    即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。典型的产品有:亚马逊的DynamoDB,redis。

    图形数据库

    图形数据库不是专门用来存储图形图像的,而是因为其用图状结构来维持其数据之间的关系,所以叫做图形数据库。Neo4j,Sones就是其典型代表。

    在图数据结构中,只有两种基本的数据类型即节点(Node)和关系(Relationship),节点(Node)可以拥有属性,关系(Relationship)也可以拥有属性,属性都是以键值对的方式存储,节点(Node)与节点(Node)的联系通过关系(Relationship)进行建立,他们建立的关系是有方向的。

    Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。其支持几乎所有的主流的开发语言

    分布式文档存储数据库

    不需要定义,应用灵活,文档存储支持对结构化数据的访问,不同于关系模型的是,文档存储没有强制的架构。与关系模型不同的是,文档存储模型支持嵌套结构。例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档。文档存储模型也支持数组和列值键。与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。比如,CouchDB,MongoDB等。


  • 4、 央行能查所有银行的流水吗?

    并不完全能,要分情况。

    央行,银行的银行,又被称之为央妈吗,那么妈妈能不能查到每个孩子每天都干了什么呢?

    银行内部业务-查不到

    比如一个人今天来存了1000元,明天又来取了500元,那么央行能不能查到呢?并不能,因为这些完整的数据只存放于银行内部数据库中,是不主动对外开放的,所以即便是央妈,也是查询不到的。

    但是,如果这个人的钱比较多,今天来存了1000万,明天转账500万,按照《金融机构大额交易和可疑交易报告管理办法》,银行需要上报给央行,这样央行才能查到。

    如果你不相信,你可以换一个思路,你知道公检法经常拿着介绍信,到各个银行去查询涉案人员的资产,假设说央行能查到所有银行的流水,那去央行下属机构去查询不久一劳永逸了嘛?

    银行外部业务-查的到

    什么叫银行外部交易?就是你在外面刷卡消费1元钱,走的也是银联交易系统,央行通过银联就能查的到,或者你在支付宝支付0.01元,以前可能查不到,自从网联这个网络支付界的银联机构成立后,所有的互联网交易也是能查询的到的。

    再举个例子,一个人在所有银行有多少张借记卡,是查不到总数和明细的,但如果是信用卡,银行是要上报到央行征信系统的,就算你没开卡或者消费,也是有记录的,可以查询得到。

    所以,其实能不能查询的到,除了看走什么系统,还要看银行是否上报。

  • 5、 如何使用MySQL数据库?

    主从架构——概念

    binlog日志

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。

    复制原理

    1.主库操作保留binlog日志

    2.从库的IO线程从主库拉取binlog日志,并生成中继日志(relaylog)

    3.从库的SQL线程解析中继日志,并在本身回放

    状态检查

    主要通过判断IO线程和SQL线程是否处于Running判断复制是否正常,判断Seconds_Behind_Master参数代表数据同步是否延迟:

    mysql>showslavestatus\G...Slave_IO_Running:YesSlave_SQL_Running:YesSeconds_Behind_Master:0...

    主从架构——衍生各种扩展的主从架构

    1.一主多从

    2.双主复制

    3.级联复制

    4.等等

    读写分离

    大部分场景下,读的频率比写的频率会高很多。所以可以通过扩展多个SLAVE节点提高整体的使用性能。

    数据备份

    传统的备份包括三种方式:

    1.lvmsnapshot(LVM快照备份)

    2.mysqldump

    3.Xtarbackup

    那么要如何实现数据的一致性备份呢(一致性备份是所有数据/文件/磁盘需要在同一个时间点进行备份)

    LVMSNAPSHOT

    1.执行FTWRL(FLUSHTABLESWITHREADLOCK)

    1.1上全局读锁(lock_global_read_lock)

    1.2清理表缓存(close_cached_tables)

    1.3上全局COMMIT锁(make_global_read_lock_block_commit)

    2.执行lvcreate创建lv快照.

    3.UNLOCKTABLES解锁

    MYSQLDUMP

    1.开启可重复读事务隔离

    2.开启事务

    3.建立数据快照(可以理解为select*from*)

    4.结束事务

    XTRABACKUP

    1.不是整体采用备份锁,只有特定阶段。

    2.indodb阶段不需要加锁,ACID的C(持续性)是通过Redolog实现,通过线程增量记录redolog实现。

Related Content: