精华内容
下载资源
问答
  • 典型性和代表性的关系
    千次阅读
    2019-03-30 23:39:13

    词共现

    挖掘词内部的共现信息

    细分

          1.挖掘 词跟所属概念之间的共现
    	  2.挖掘词跟此之间的共现
    

    统计维度

         1.词跟所有所属概念之间的共现频率关系,得出一词多义中的‘义’的分布概率
         2. 同一概念下,所有词跟此概念的共现频率统计,得出概念下的代表词
    

    应用

    关系提取时候,可以将词进行mask,如果涉及到一次多义,可以根据共现词进行正确的mask
    
    更多相关内容
  • 前言我们在分析两组变量之间的相关性时,比如X=[X1,X2,...,Xm]X=[X_1,X_2,...,X_m]Y=[Y1,Y2,...,Yn]Y=[Y_1,Y_2,...,Y_n],最原始的方法就是直接计算XY的协方差矩阵,矩阵有m*n个值。有了协方差矩阵就得到了两两...

    前言

    我们在分析两组变量之间的相关性时,比如 X=[X1,X2,...,Xm] Y=[Y1,Y2,...,Yn] ,最原始的方法就是直接计算X和Y的协方差矩阵,矩阵有m*n个值。有了协方差矩阵就得到了两两变量之间的相关性,比如 cij 就是变量 Xi Yj 的相关性。

    这种分析方法只考虑了 cij 变量 Xi Yj 变量单个维度之间的相关性,没有考虑X和Y内部之间的相关性。另外协方差矩阵的形式也比较繁琐。

    典型相关分析

    采用类似主成分分析的思想,分别找出两组变量各自的线性组合,然后讨论线性组合之间的相关关心。

    分别在两组变量中找出第一对线性组合,使他们具有最大相关性;接着再分别在两组变量中找出第二对线性组合,使他们具有第二大的相关性,并且它们分别于本组内的第一线性组合不相关。以此类推找出其他线性组合,如下面提取两对线性组合,其中 u1u2 互相独立, v1v2 互相独立, u1v1 相关。

    u1=a11x1+a12x2+...+a1mxmv1=b11y1+b12y2+...+b1nyn

    u2=a21x1+a22x2+...+a2mxmv2=b21y1+b22y2+...+b2nyn

    假设提取了r次,则最后提取了r组变量,

    U=(u1,...,ur)TV=(v1,...,vr)T

    则实现通过线性组合来表示原变量,并且用他们之间的相关性来表示原变量的相关性。

    本质是什么

    典型相关分析的本质是从两组变量中选取若干个有代表性的变量线性组合,用这些线性组合的相关性来表示原来两组变量的相关性。

    求解线性组合

    以第一组线性组合为例,这里要求解的就是包含的系数。

    u1=a11x1+a12x2+...+a1mxmv1=b11y1+b12y2+...+b1nyn

    矩阵形式为,

    u1=aT1Xv1=bT1Y

    只考虑方差为1时的线性函数,这时其实就存在一个约束条件, D(u1)=D(v1)=1 ,我们求常向量 aT1 bT1 ,使得相关系数 ρ(u1,v1) 达到最大。

    方差分别为,

    D(u1)=D(aT1X)=aT1Cov(X,X)a1D(v1)=D(bT1Y)=bT1Cov(Y,Y)b1

    u1v1 的协方差为,

    Cov(u1,v1)=aT1Cov(X,Y)b1

    另外我们还有,

    Cov(X,X)=11Cov(Y,Y)=22Cov(X,Y)=12

    两者的相关系数为,

    Corr(u1,v1)=Cov(u1,v1)D(u1)D(v1)=aT112b1aT111a1bT122b1

    我们要做的是寻找 a1b1 使相关系数最大,同时要考虑前面说到的约束条件 D(u1)=D(v1)=1 ,它能防止结果重复出现,则相关系数变为,

    Corr(u1,v1)=aT112b1

    求条件极值一般可以引入拉格朗日乘数来求极大值,求解出 aT1bT1

    对于其他组的线性组合也同样根据上述过程得到解。

    线性组合数量

    根据线性组合相关性大小不断提取线性组合,最大的为第一组,次大的为第二组,以此类推直到 r

    怎么分析

    比如第一组线性组合中,可以计算两组变量与u1和v1的相关系数,如果某若干个变量与u1相关系数较大,则u1代表该若干变量的总指标,可以自己根据变量取个额外的名称。而同样如果v1和其他若干变量的相关系数较大的话则v1可代表该若干变量。

    接着如果u1和v1的相关系数较大的话则说明u1代表的若干变量与v1代表的若干变量是关系密切的。对于其他线性组合也一样,先找出u2和v2相关的若干变量,然后再看u2与v2之间的相关系数,判断其是否相关。

    =============广告时间===============

    公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

    鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

    为什么写《Tomcat内核设计剖析》

    =========================

    欢迎关注:

    这里写图片描述

    展开全文
  • 递推算法-五种典型的递推关系

    千次阅读 多人点赞 2020-01-26 00:03:56
    这种算法特点是:一个问题的求解需一系列的计算,在已知条件所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫...

    递推算法
    递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推。无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。
      递推算法的首要问题是得到相邻的数据项间的关系(即递推关系)。递推算法避开了求通项公式的麻烦,把一个复杂的问题的求解,分解成了连续的若干步简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法。

    【例1】数字三角形
    如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。
     1、 一步可沿左斜线向下或右斜线向下走;
     2、 三角形行数小于等于100;
     3、 三角形中的数字为0,1,…,99;
    测试数据通过键盘逐行输入,如上例数据应以如下所示格式输入:
    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    【算法分析】
    此题解法有多种,从递推的思想出发,设想,当从顶层沿某条路径走到第i层向第i+1层前进时,我们的选择一定是沿其下两条可行路径中最大数字的方向前进,为此,我们可以采用倒推的手法,设a[i][j]存放从i,j 出发到达n层的最大值,则a[i][j]=max{a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]},a[1][1] 即为所求的数字总和的最大值。

    #include<iostream>
    using namespace std;
    int main()
    {
    	int n,i,j,a[101][101];
    	cin>>n;
    	for(i=1;i<=n;i++)
    		for(j=1;j<=i;j++) cin>>a[i][j];
    	for(i=n-1;i>=1;i--)
    		for(j=1;j<=i;j++){
    			if(a[i+1][j]>=a[i+1][j+1]) a[i][j]+=a[i+1][j];
    			else a[i][j]+=a[i+1][j+1];
    		}
    	cout<<a[1][1];	
    	return 0;
    }
    #include<iostream>
    using namespace std;
    int a[101][101]={0};
    int main()
    {
    	int n,i,j;
    	cin>>n;
    	for(i=1;i<=n;i++)
    		for(j=1;j<=i;j++) cin>>a[i][j];
    	for(i=2;i<=n;i++)
    		for(j=1;j<=i;j++) {
    			if(a[i-1][j]>=a[i-1][j-1]) a[i][j]+=a[i-1][j];
    			else a[i][j]+=a[i-1][j-1];
    		}
    	int max=0;
    	for(i=1;i<=n;i++)
    		if(a[n][i]>max) max=a[n][i];
    	cout<<max;
    	return 0;
    }

    【例2】满足F1=F2=1,Fn=F(n-1)+F(n-2)的数列称为斐波那契数列(Fibonacci),它的前若干项是1,1,2,3,5,8,13,21,34……求此数 列第n项(n>=3)。
    即:
       f1=1                                    (n=1)
       f2=1                                    (n=2)
       fn=f(n-1) + f(n-2 )      (n>=3)

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    	int n,i,f1=1,f2=1,f;
    	scanf("%d",&n);
    	if(n<=2) cout<<1;
    	else {
    		for(i=3;i<=n;i++){
    			f=f1+f2;
    			f1=f2;
    			f2=f;
    		}
    	}
    	printf("%d",f);
    	return 0;
    }
    

    有关Fibonacci数列
    楼梯台阶问题
    问题:楼梯有n个台阶,上楼可以一步上一阶,也可以一步上两阶。一共有多少种上楼的方法?
    这是一道计数问题。在没有思路时,不妨试着找规律。n=5时,一共有8种方法:
    5=1+1+1+1+1
    5=2+1+1+1
    5=1+2+1+1
    5=1+1+2+1
    5=1+1+1+2
    5=2+2+1
    5=2+1+2
    5=1+2+2
    其中有5种方法第1步走了1阶(背景灰色),3种方法第1步走了2阶,没有其他可能。
    假设f(n)为n个台阶的走法总数,把n个台阶的走法分成两类。
        第1类:第1步走1阶,剩下还有n-1阶要走,有f(n-1)种方法。
        第2类:第1步走2阶,剩下还有n-2阶要走,有f(n-2)种方法。
        这样,就得到了递推式:f(n)=f(n-1)+f(n-2),不要忘记边界情况:f(1)=1,f(2)=2。
        把f(n)的前几项列出:1,2,3,5,8,……。

    兔子产子问题
    问题:把雌雄各一的一对新兔子放入养殖场中。每只雌兔在出生两个月以后,每月产雌雄各一的一对新兔子。试问第n个月后养殖场中共有多少对兔子。
    找规律:
            第1个月:一对新兔子r1。用小写字母表示新兔子。
            第2个月:还是一对新兔子,不过已经长大,具备生育能力了,用大写字母R1表示。
            第3个月:R1生了一对新兔子r2,一共2对。
            第4个月:R1又生一对新兔子r3,一共3对。另外,r2长大了,变成R2。
            第5个月:R1和R2各生一对,记为r4和r5,共5对。此外,r3长成R3。
           第6个月:R1、R2和R3各生一对,记为r6~r8,共8对。此外,r4和r5长大。
            ……
            把这些数排列起来:1,1,2,3,5,8,……,事实上,可以直接推导出来递推关系f(n)=f(n-1)+f(n-2):第n个月的兔子由两部分组成,一部分是上个月就有的老兔子f(n-1),一部分是这个月出生的新兔子f(n-2)(第n个月时具有生育能力的兔子数就等于第n-2个月兔子总数)。根据加法原理,f(n)=f(n-1)+f(n-2)。

    【例3】骨牌的铺法
    有 2χn的一个长方形方格,用一个1*2的骨牌铺满方格。编写一个程序,试对给出的任意一个n(n>0), 输出铺法总数。
    【算法分析】
    (1)面对上述问题,如果思考方法不恰当,要想获得问题的解答是相当困难的。可以用递推方法归纳出问题解的一般规律。
    (2)当n=1时,只能是一种铺法,铺法总数有示为x1=1。
    (3)当n=2时:骨牌可以两个并列竖排,也可以并列横排,再无其他方法,如下左图所示,因此,铺法总数表示为x2=2;

    (4)当n=3时:骨牌可以全部竖排,也可以认为在方格中已经有一个竖排骨牌,则需要在方格中排列两个横排骨牌(无重复方法),若已经在方格中排列两个横排骨牌,则必须在方格中排列一个竖排骨牌。如上右图,再无其他排列方法,因此铺法总数表示为x3=3。
    由此可以看出,当n=3时的排列骨牌的方法数是n=1和n=2排列方法数的和。
    (5)推出一般规律:对一般的n,要求xn可以这样来考虑,若第一个骨牌是竖排列放置,剩下有n-1个骨牌需要排列,这时排列方法数为xn-1;若第一个骨牌是横排列,整个方格至少有2个骨牌是横排列(1*2骨牌),因此剩下n-2个骨牌需要排列,这是骨牌排列方法数为xn-2。从第一骨牌排列方法考虑,只有这两种可能,所以有:
     xn=x(n-1)+x(n-2)   (n>2)
     x1=1
     x2=2
     xn=xn-1+xn-2就是问题求解的递推公式。任给n都可以从中获得解答。例如n=5,
     x3=x2+x1=3
     x4=x3+x2=5
     x5=x4+x3=8

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    	int n,i,f1=1,f2=2,f;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++){
    		if(i==1)	cout<<1<<endl;
    		if(i==2)	cout<<2<<endl;
    		if(i>2){
    			f=f1+f2;
    			cout<<f<<endl;
    			f1=f2;
    			f2=f;
    		}		
    	}
    	return 0;
    }

    五种典型的递推关系
    Ⅰ.Fibonacci数列
    在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类的题目因为解法相对容易一些,逐渐退出了竞赛的舞台。可是这不等于说Fibonacci数列没有研究价值,恰恰相反,一些此类的题目还是能给我们一定的启发的。
    Fibonacci数列的代表问题是由意大利著名数学家Fibonacci于1202年提出的“兔子繁殖问题”(又称“Fibonacci问题”)。
    问题的提出:有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
    解:设满x个月共有兔子Fx对,其中当月新生的兔子数目为Nx对。第x-1个月留下的兔子数目设为Fx-1对。则:
          Fx=Nx+ Fx-1
          Nx=F(x-2 )        (即第x-2个月的所有兔子到第x个月都有繁殖能力了)
     ∴   Fx=F(x-1)+F(x-2 )    边界条件:F0=0,F1=1
    由上面的递推关系可依次得到
    F2=F1+F0=1,F3=F2+F1=2,F4=F3+F2=3,F5=F4+F3=5,……。
    Fabonacci数列常出现在比较简单的组合计数问题中,例如以前的竞赛中出现的“骨牌覆盖”问题。在优选法中,Fibonacci数列的用处也得到了较好的体现。

    Ⅱ.Hanoi塔问题
    问题的提出:Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图3-11所示。      要求把a柱上n个圆盘按下述规则移到c柱上:


    (1)一次只能移一个圆盘;
    (2)圆盘只能在三个柱上存放;
    (3)在移动过程中,不允许大盘压小盘。
    问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?
    解:设hn为n个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a 柱上的盘子直接移动到c柱就可以了,故h1=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c 柱;最后,将b柱上的小盘子移到c柱上,共记3个盘次,故h2=3。以此类推,当a柱上有n(n>2)个盘子时,总是先借助c柱把上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总共移动h(n-1)+1+h(n-1)个盘次。
     ∴hn=2h(n-1)+1    边界条件:h1=1

    Ⅲ.平面分割问题
    问题的提出:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。
    解:设an为n条封闭曲线把平面分割成的区域个数。 由图3-13可以看出:a2-a1=2;a3-a2=4;a4-a3=6。


    从这些式子中可以看出an-a(n-1)=2(n-1)。当然,上面的式子只是我们通过观察4幅图后得出的结论,它的正确性尚不能保证。下面不妨让我们来试着证明一下。当平面上已有n-1条曲线将平面分割成a(n-1)个区域后,第n-1条曲线每与曲线相交一次,就会增加一个区域,因为平面上已有了n-1条封闭曲线,且第n条曲线与已有的每一条闭曲线恰好相交于两点,且不会与任两条曲线交于同一点,故平面上一共增加2(n-1)个区域,加上已有的a(n-1)个区域,一共有a(n-1)+2(n-1)个区域。所以本题的递推关系是an=a(n-1)+2(n-1),边界条件是a0=1。

    Ⅳ.Catalan数(卡塔兰数)
    Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
    问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用hn表示,hn即为Catalan数。例如五边形有如下五种拆分方案(图3-14),故h5=5。求对于一个任意的凸n边形相应的hn。


    Catalan数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。

    Ⅴ.第二类Stirling数(斯特林数)
    在五类典型的递推关系中,第二类Stirling是最不为大家所熟悉的。也正因为如此,我们有必要先解释一下什么是第二类Strling数。

    【定义2】n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用S(n,m)表示,称为第二类Stirling数。
    下面就让我们根据定义来推导带两个参数的递推关系——第二类Stirling数。
     解:设有n个不同的球,分别用b1,b2,……bn表示。从中取出一个球bn,bn的放法有以下两种:
    ①bn独自占一个盒子;那么剩下的球只能放在m-1个盒子中,方案数为S2(n-1,m-1);
    ②bn与别的球共占一个盒子;那么可以事先将b1,b2,……bn-1这n-1个球放入m个盒子中,然后再将球bn可以放入其中一个盒子中,方案数为mS2(n-1,m)。
           综合以上两种情况,可以得出第二类Stirling数定理:
    【定理】S2(n,m)=mS2(n-1,m)+S2(n-1,m-1)   (n>1,m1)      边界条件可以由定义2推导出:
    S2(n,0)=0;S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n)。
    第二类Stirling数在竞赛中较少出现,但在竞赛中也有一些题目与其类似,甚至更为复杂。

    小结:通过上面对五种典型的递推关系建立过程的探讨,可知对待递推类的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。
    【例7】(1998合肥市竞赛复试第二题)同一平面内的n(n500)条直线,已知有p(p>=2)条直线相交于同一点,则这n条直线最多能将平面分割成多少个不同的区域?
    解:这道题目与第一部分中的平面分割问题十分相似,不同之处就在于线条的曲直以及是否存在共点线条。由于共点直线的特殊性,我们决定先考虑p条相交于一点的直线,然后再考虑剩下的n-p条直线。首先可以直接求出p条相交于一点的直线将平面划分成的区域数为2p个,然后在平面上已经有k(k>=p)条直线的基础上,加上一条直线,最多可以与k条直线相交,而每次相交都会增加一个区域,与最后一条直线相交后,由于直线可以无限延伸,还会再增加一个区域。所以fm=fm-1+m (m>p),边界条件在前面已经计算过了,是fp=2p。虽然这题看上去有两个参数,但是在实际做题中会发现,本题还是属于带一个参数的递推关系。

    展开全文
  • 一、关系型数据库  关系型数据库,是指采用了关系模型来组织数据的数据库。  关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库...

    一、关系型数据库

        关系型数据库,是指采用了关系模型来组织数据的数据库。
        关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。
        简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
    关系模型中常用的概念:
        关系
    :可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
        元组:可以理解为二维表中的一行,在数据库中经常被称为记录
        属性:可以理解为二维表中的一列,在数据库中经常被称为字段
        :属性的取值范围,也就是数据库中某一列的取值限制
        关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
        关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

    关系型数据库的优点:
        容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
        使用方便:通用的SQL语言使得操作关系型数据库非常方便
        易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

    关系型数据库瓶颈
      1).高并发读写需求
        网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
      2).海量数据的高效率读写
        网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
      3).高扩展性和可用性
        在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

    对网站来说,关系型数据库的很多特性不再需要了
      事务一致性: 关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高
      读写实时性: 对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比如发一条消息之后,过几秒乃至十几秒之后才看到这条动态是完全可以接受的
      复杂SQL,特别是多表关联查询: 任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站(SNS,专指社交网络服务,包括了社交软件和社交网站。),从需求以及产品阶级角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能极大的弱化了

        在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,我们必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。每个元组字段的组成都是一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于标语表之间进行链接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。

    二、NoSQL

        NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。但是NoSQL的发展慢慢偏离了初衷,我们要的不是“no sql”,而是“no relational”,也就是我们现在常说的非关系型数据库了。
        2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。
    注:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
        非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适。

    2-1.非关系型数据库分类
        由于非关系型数据库本身天然的多样性,以及出现的时间较短,因此,不想关系型数据库,有几种数据库能够一统江山,非关系型数据库非常多,并且大部分都是开源的。
        这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:
        1).面向高性能并发读写的key-value数据库:key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表
        2).面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB
        3).面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化

    三. 关系型数据库  V.S.  非关系型数据库

        关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。
        但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。
        相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。
        关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。
        于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

        必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将。


    ---------------------------------------------------------------------------------------------------------------------------------------------

    oracle与mysql的区别

    一、并发性
      并发性是数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。
        mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。
        oracle:oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。

    二、一致性
        oracle:oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。
        mysql:mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。

    三、事务
        oracle很早就完全支持事务。
        mysql在innodb存储引擎的行级锁的情况下才支持事务。

    四、数据持久性
        oracle:保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
        mysql:默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。

    五、提交方式
        oracle默认不自动提交,需要用户手动提交。
        mysql默认是自动提交。

    六、逻辑备份
        oracle逻辑备份时不锁定数据,且备份的数据是一致的。
        mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。

    七、热备份
        oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。
        mysql:myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。

    八、sql语句的扩展和灵活性
        mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。
        oracle在这方面感觉更加稳重传统一些。

    九、复制
        oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。
        mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。

    十、性能诊断
        oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
        mysql的诊断调优方法较少,主要有慢查询日志。

    十一、权限与安全

        mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。
        oracle的权限与安全概念比较传统,中规中矩。

    十二、分区表和分区索引
        oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
        mysql的分区表还不太成熟稳定。

    十三、管理工具

        oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。
        mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。








    参考:http://blog.sina.com.cn/s/blog_61e034d50100k6xn.html




    展开全文
  • 性质:具有唯一性和最小。 2. 关系的主码外码 主码 定义:从多个候选码中选择一个作为查询、插入、删除元组的操作变量,被选用的候选码称为主关系码(主键,主码,关系键,关键字) 每个关系必定有且只有一个主...
  • NoSQL非关系型数据库概述

    千次阅读 多人点赞 2020-09-21 13:31:02
    Redis就是NOSQL 非关系型数据库的典型代表 关系型数据库关系型数据库的区别: 关系型数据库特点(Mysql Oracle SqlServer为代表的数据库) 数据是由一张张的表组成,而且这些表与表之间有关系(一对一,一对...
  • 数据速率、载波频率带宽的关系

    万次阅读 2020-12-29 01:40:37
    数据速率、载波频率带宽的关系来源 https://zhuanlan.zhihu.com/p/537600151. 数据传输速率又称比特率或数据带宽,描述通信中每秒传送数据代码的比特数,单位是bps。这个很好理解,是“刚需”,每秒传多少bit的...
  • 典型相关分析原理(CCA)

    万次阅读 多人点赞 2020-01-21 12:29:17
    它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体...
  • 聊聊Raft一致协议以及Apache Ratis

    千次阅读 2019-02-04 20:08:30
    但是在多机,多服务,不同网络环境下时,一致问题就是一个典型的问题了。在分布式系统中,当我们提到一致问题时,我们立马想到的是Paxos协议。而对此协议的一个开源的实现框架是目前被广泛使用的组件Zookeeper。...
  • 典型相关分析...典型相关分析即为把多个变量与多个变量之间的相关化为两个具有代表性的变量之间的相关。 选谁做代表? 典型相关分析的定义 典型相关分析的思路 典型相关分析关键...
  • 如何在SPSS中实现典型相关分析

    千次阅读 2021-01-12 06:16:48
    如果要研究一个变量一组变量间的相关,则可以使用多元线性回归,方程的复相关系数就是我们要的东西,同时偏相关系数还可以描述固定其他因素时某个自变量应变量间的关系。但如果要研究两组变量的相关关系时,这些...
  • 推理是人工智能经典三大基本技术之一,是人类求解问题的主要思维方法。 本文重点内容包括:不确定推理的概念及分类;不确定推理中的基本问题;概率方法及贝叶斯公式;可信度方法;模糊推理
  •  一致是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义含义。在传统的IT时代,一致通常指强一致,强一致通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致的含义...
  • 线性linear,指量与量之间按比例、成直线的关系,在空间时间上代表规则光滑的运动,在数学上可以理解为一阶导数为常数的函数。 非线性non-linear则指不按比例、不成直线的关系代表不规则的运动突变,一阶...
  • 数学建模——典型相关分析及相关SPSS操作

    万次阅读 多人点赞 2019-10-31 08:44:26
    文章目录一、引述1.概念2.示例说明 一、引述 ...典型相关分析用于研究两组变量(每组变量中都可能有多个指标)之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 2.示例说明 ...
  • 五种典型的递推关系 1.Fibonacci数列 在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类...
  • 因果推断笔记—— 相关... 倾向评分匹配2 基于倾向评分法的因果推断2.1 因果效应估计三种方法2.2 倾向评分法的均衡检验2.3 反驳3 倾向得分案例解读一(无代码):就业与收入的影响3.1 第一步:使用倾向评分法
  • 典型相关分析研究的是两组变量之间的关系,如{x1, x2, x3}{y1, y2, y3}两组变量之间的关系。 具体来说,变量间的相关关系可以分为以下几种: 两个变量间的线性相关关系,可用简单相关系数 一个变量与多个变量之间...
  • 常见的非关系型数据库有哪些

    千次阅读 2020-06-02 16:04:57
    它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。 Redis作为一个内存数据库,具有如下有特点: 性能优秀, 数据在内存中, 读写速度非常快, 并支持10W QPS(每秒查询效率). 单进程单线程, 是线程安全的. ...
  • 浅析数据一致

    万次阅读 多人点赞 2016-02-19 15:27:38
    什么是数据一致?  在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 实践中,导致数据不一致的情况...
  • 关系数据库(Relational Database)是建立在关系模型基础上的数据库,借助于几何代数等数学概念方法来处理数据库中的...文档型数据库的典型代表是 MongoDB。 我们本课时的面试题是,关系型数据库文档型数据库有什
  • 对计算机专业来说学历真的重要吗?

    万次阅读 多人点赞 2019-09-27 09:21:37
    这就是圈子人脉的重要,你有同学、朋友、同事,他们任何一个人进了大公司,都可以内推你,而且在内推时,是可以直接跳过HR,直接把简历给他们主管的。 凡做过主管的都会有经验,不看僧面看佛面,也会给你个...
  • 关系型数据库关系型数据

    千次阅读 多人点赞 2019-06-10 15:01:48
    关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今十大主流的关系型数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,...
  • 题目1公共关系是一门综合的应用科学。 正确答案是:对 题目2公共关系特指组织与公众之间的传播沟通关系。 正确答案是:对 题目3美国学者香农提出了双向循环的传播模式。 正确答案是:错 题目4艾维·李创办世界上第...
  • 数模学习(六)---典型相关分析

    千次阅读 2020-07-09 11:52:30
    典型相关分析(Canonical Correlation analysis)是研究两组变量(每组变量中都可能有多个指标)之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系 提示:这里将涉及到多元统计的知识,在学过了...
  • 大数据架构的典型方法方式

    万次阅读 2016-06-04 15:15:30
    NoSQL 技术为应用提供了缓存搜索特性,但既然是处理数据,就需要定义一种方法来处理各种数据流,以便能够给用户输出见解或数据服务。通过审视被IT组织使用广泛的数据架构来定义处理的拓扑结构。当考虑服务水平SLA...
  • 机器学习模型可解释的详尽介绍

    万次阅读 多人点赞 2019-11-20 17:30:00
    机器之心平台来源:腾讯技术工程模型可解释方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于...
  • WebGL,OpenGLOpenGL ES三者的关系

    千次阅读 2020-08-28 17:27:13
    而越来越注重移动设备功能的多样化、娱乐化,手机3D游戏、GPS导航系统等代表了未来移动设备发展的方向。基于这种情况,Khronos组织于2003年7月发布了专门针对于嵌入式设备图形开发的标准OpenGL ES(O...
  • 分布式系统的一致问题(汇总)

    万次阅读 多人点赞 2019-09-02 15:32:19
    保证分布式系统数据一致的6种方案 问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 184,195
精华内容 73,678
关键字:

典型性和代表性的关系