您好、欢迎来到现金彩票网!
当前位置:彩运网 > 封锁粒度 >

数据库知识整理 - 并发控制(封锁、两段锁协议、意向锁)

发布时间:2019-06-16 03:46 来源:未知 编辑:admin

  是主要的事务处理技术,同时并发控制机制和数据库恢复机制是数据库管理系统(DBMS)的重要组成部分。

  在单处理机系统中,事务的并行执行实际上是这些并行事务轮流交叉运行。这种并行执行方式称为交叉并发方式(interleaved concurrency)。虽然单处理机系统中的并行事务并没有真正地(物理上)并行运行,但是减少了处理机和各设备的空闲时间,提高了系统的效率。

  在多处理机系统中,当事务数小于处理机数时,每个处理机可以运行一个事务,实现真正意义上的并行运行。这种并行执行方式称为同时并发方式(simultaneous concurrency)。

  当多个用户并发地操作数据库时,就有可能出现多个事务同时存取同一数据的情况,这种情况可能会破坏事务的一致性和数据库的一致性,所以数据库管理系统(DBMS)必须提供并发控制机制。并发控制机制是衡量一个DBMS性能的重要标志之一。

  事务T1和T2先后读入同一数据并修改,T1先提交,T2后提交,T2提交的结果将覆盖T1的结果,导致T1的修改被丢失。

  事务T1读入某一数据后(未进行操作),T2对同一数据进行了操作(修改、插入、删除),当T1再次读入该数据时,得到与前一次不同的值(或者多了、少了某些记录)。这种不一致性与丢失修改的理想情况相反。

  事务T1修改某一数据后将其写入磁盘,事务T2读入修改后的数据,此时T1由于某种原因被撤销(ROLLBACK),被T1修改的数据恢复原值,导致T2读入的数据与数据库中的数据不一致。

  事务T在对某个数据对象,如表、记录等操作之前,需要先向系统发出加锁请求,在事务T释放它的锁之前,其他事务不能对此数据进行修改。

  排他锁又称为写锁。事务T对数据对象A加上X锁后,只允许事务T对A进行读取和修改,其他事务不能对A加任何类型的锁,直到T释放它的X锁为止。从而保证了其他事务在T释放A上的X锁之前不能对A进行读取和修改。

  共享锁又称为读锁。事务T对数据对象A加上S锁后,事务T只能对A进行读取,而不能修改。其他事务可以继续对A加上S锁,但是不能加X锁,直到T释放它的S锁为止。从而保证了其他事务可以读取A,但是在T释放A上的S锁之前不能对A进行修改。

  定义:事务T在修改数据A前,必须先对A加X锁,直到事务结束才释放。因此X锁又被称为写锁,意为修改。

  目的:解决“丢失修改”的不一致问题,即在下一个事务操作前,先把上一个事务的修改操作结束。

  事务T1对数据对象A加上X锁后,只有等事务T1(修改)结束,释放X锁,事务T2才能对A加锁并进行操作(读取、修改)。

  定义:在一级封锁协议的基础上,增加事务T在读取数据A前,必须先对A加S锁,读完后即可释放。因此S锁又被称为读锁,意为读取。

  目的:在一级封锁协议的基础上,进一步解决“读‘脏’数据”的不一致问题,即在下一个事务读取前,先等上一个事务的撤销操作结束。

  事务T1对数据对象A加上X锁后,只有等事务T1(修改、撤销)结束,释放X锁,事务T2才能对A加锁并进行操作(读取)。

  定义:在一级封锁协议的基础上,增加事务T在读取数据A前,必须先对A加S锁,直到事务结束才释放(与二级的区别)。

  目的:在二级封锁协议的基础上,进一步解决“不可重复读”的不一致问题,即在下一个事务修改前,先等上一个事务的重复读操作结束。

  事务T1对数据对象A加上S锁后,只有等事务T1(重复读取)结束,释放S锁,事务T2才能对A加X锁并进行操作(修改)。

  根据事务的优先级顺序,可能会出现某个事务永远在等待封锁的情况,即事务T1封锁了数据对象A后,T2、T3陆续请求封锁,但是T1释放锁后,系统优先批准了T3的请求,T2仍然在等待。

  事务T1封锁了数据A,事务T2封锁了数据B,然后T1请求封锁B,与此同时T2也请求封锁A,但因为两个事务的请求都需要等待对方释放锁,这样就出现了永远在等待对方的死锁。

  1. 一次封锁法:每个事务一次将所有要使用的数据加锁,否则事务不能继续执行。

  2. 顺序封锁法:预先对数据规定一个封锁顺序,所有事务都按照这个顺序加锁,保证“先到先得”。

  带来的问题:规定时间过短,可能误判死锁;规定时间过长,可能不能及时发现死锁。

  2. 等待图法:并发控制子系统周期性地生成事务等待图,动态地反映所有事务的等待情况。如果发现图中存在回路,则表示系统中出现了死锁。

  解除方法:通常撤销一个处理代价最小的事务,释放此事务持有的所有锁,使其他事务得以继续运行下去。

  当且仅当多个事务的并发执行结果,与按某一次序的串行执行结果相同,这种并发调度策略才是可串行化调度,即具有可串行性。

  我们需要引入一个概念——冲突操作,冲突操作是指不同事务对同一个数据的读写和写写操作,其他操作都属于不冲突操作。

  很容易理解,对于同一数据的操作,不可能一边在读,同时另一边在写,更不可能两边都在写,这是不符合逻辑的。

  在一个调度策略中,交换两个事务的不冲突操作的次序,得到另一个调度策略,如果另一个调度策略的执行结果与原来的调度相同,则称原来的调度为冲突可串行化调度。

  为了保证并发调度的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。

  目前DBMS普遍采用两段锁协议(TwoPhase Locking,2PL)来实现,所有事务遵守两段锁协议是可串行化调度的充分条件,但不是必要条件。

  *需要注意的是,不同事务对同一数据的加锁仍遵循两种锁的特性以及封锁协议。

  预防死锁的一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。

  封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,逻辑单元包括属性值、属性值的集合、元组、关系、索引项、索引表乃至整个数据库;物理单元包括页(数据页或索引页)、物理记录等。

  封锁粒度与系统的并发度和并发控制的开销有关:封锁粒度越大,数据库能封锁的数据单元越少,并发度越小,系统开销也变小。

  一般来说,处理个别元组的事务以元组为封锁粒度;处理某个关系的大量元组的事务以关系为封锁粒度;处理多个关系的大量元组的事务以数据库为封锁粒度。

  在一个系统中,提供多种封锁粒度给不同的事务选择,这种封锁方法称为多粒度封锁( multiple granularity locking)。

  在多粒度封锁中,显式封锁和隐式封锁的效果是一样的,因此系统检查封锁冲突时,不仅要检查显式封锁,还要沿着多粒度树上下检查隐式封锁。

  显然,这样的检查方法效率很低。为此人们引进了一种新型锁,称为意向锁(intention lock)。

  对一个数据对象先加S锁,再加IX锁。例如对某个表加SIX锁,则表示该事务要读(S)整个表,同时会更新(IX

  在具有意向锁的多粒度封锁方法中,任意事务T要对一个数据对象加锁,必须先对它的上层结点加意向锁。

  申请封锁时应该按自上而下的次序进行,释放封锁时则应该按自下而上的次序进行。(栈结构)

  具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销,已经在实际的DBMS产品中得到广泛使用。

  一、什么是并发控制? 在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发。当多个用户/进程/线程同时对数据库进行操作时,会出现3种...博文来自:xuewen小渣渣的博客

  此篇博客主要是讲述MySql(仅限innodb)的两阶段加锁(2PL)协议,而非两阶段提交(2PC)协议,区别如下:2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。2PC,两阶段提交协议:...博文来自:的博客

  1.可串行性并行操作对并行事务的操作的调度是随机的,不同的调度可能产生不同的结果。在这些不同的调度中,肯定有些调度的结果是正确的,究竟哪些调度是正确的呢?若每个事务的基本操作都串连在一起,没有...博文来自:Mechanical Sympathy.

  Oracle多粒度封锁机制研究Oracle多粒度封锁机制研究1      引言—数据库锁的基本概念为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入...博文来自:haiross的专栏

  并发操作带来的数据库不一致性可以分为四类:丢失或覆盖更新、脏读、不可重复读和幻像读,上例只是并发问题的一种。(1)丢失或覆盖更新(lostupdate)当两个或多个事务选择同一数据,并且基于最初选定的...博文来自:u012048106的专栏

  之所以转载,因为说得很详细,很多情况都考虑到了。最有价值的部分在各种异常情况的解决方案。分布式事务处理,两段...博文来自:神vlinux飘飘的专栏

  封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务...博文来自:ben1010101010的博客

  q 两阶段封锁(Two-phaselocking-2PL):n 首先,两阶段封锁强调的是“加锁(增长阶段,growingphase)和解锁(缩减阶段,shrinkingphase)这两项操作,且每项操...博文来自:那海蓝蓝的博客

  封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一...博文来自:Dream_Ryoma的博客

  前言:并发控制是衡量一个数据库管理系统性能的重要指标之一。今天将从并发控制出现的问题,并发控制的主要技术来介绍相关技术。1.并发控制出现的问题并发操作会为数据库带来不一致性。主要分为三方面:丢失修改,...博文来自:if_i_were_a的博客

  [b]缘起[/b]今天,发生了一些事情,事情是这样的:[list][*]早上9点钟,乔布斯找我借了100块钱,他说下午或明天还[*]到了10点钟,库克找我还他的100块钱,我正忙,很烦库克(100块钱...博文来自:nihongye

  两阶段提交协议(twophasecommitprotocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消...博文来自:码农崛起

  刚看到一篇很不错的数据库并发控制知识点总结,包括一部分可能会出现在笔试面试中的题目,适合对基础概念理解不透彻的我,就转载过来了。 原文地址:博文来自:sunsfan的博客

  一、并发调度的可串行性二、两段锁协议三、封锁的粒度四、其他并发控制机制...博文来自:lxw的博客

  一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边。这两天决定从原理上理解它,整理成自己的知识。查阅资料的过程中发现好多零碎的概念如果串起来足够写一本书,所以在这里给自己梳理一...博文来自:hulinku的博客

  文章写得不错,原文地址见在学习几年编程之后,你会发现所有的问题都没有简单、快捷的解决方案,很多...博文来自:lao_pei的专栏

  并发控制机制的任务对并发操作进行正确调度;保证事务的隔离性;保证数据库的一致性数据不一致性:由于并发操作破坏了事务的隔离性并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰...博文来自:Ms_F

  两阶段加锁第一阶段:进程试图对所有所需的记录进行加锁,一次锁一个记录。若第一阶段加锁成功,就开始第二阶段,完成更新然后释放锁。若在第一阶段某个进程需要的记录已被加锁,则该进程释放它所有加锁的记录,然后...博文来自:Unique-You的博客

  锁的类型:    基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对...博文来自:tian_jinping的专栏

  数据库系统原理复习题(八)——事务并发控制 1.下面关于“一级封锁协议”正确的说法是()。 (4分)A.  一级封锁协议避免“丢失修改” B.  一级封锁协议可以避免“死锁” C.  一级封锁协议“能...博文来自:

  11.1并发控制概述事务是并发控制的基本单位并发控制的目的:保证事务的隔离性和一致性并发操作带来的数据不一致性:1.丢失修改:读入同一数据并修改2.不可重复读:读第一次和读第二次的结果不一样,因为别人...博文来自:doctor_fung的博客

  多事务执行方式多个事务如何一起执行呢?1.事务串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束后方能运行。(事务一个接一个的运行)2.交叉并发方式:在单处理机系统中,并行事务并行操作轮...博文来自:叶叶

  并发操作带来的问题丢失修改(lostupdate)不可重复读(non-repeatable)读脏数据(dirtyread)丢失修改概念:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提...博文来自:Clanner的博客

  查询处理分成4个阶段:查询分析、查询检查、查询优化、查询执行全表扫描算法索引扫描算法(B+树索引或hash索引):效率高连接处理嵌套循环算法:按照数据块读入内存,分外层循环(表1),内层循环(表2)对...博文来自:xuxuan1997的博客

  上篇博客通过一些实例介绍了并发导致的数据不一致一系列问题——丢失修改、读脏数据、不可重复读《并发操作与数据的不一致性》 本篇博客介绍如何进行并发控制。——封锁。 1,封锁(1)封锁就是事务T在对某数据...博文来自:葵歌小妖

  封锁的粒度封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元,其中,逻辑单元包括:属性值、属性值的集合、元组、关系、索引项、整个索引、整个数据库等,物理单元包括:页(数据页或索引页)...博文来自:Ge_zi327的博客

  一级封锁协议:事务T在修改数据R之前必须对其加X锁,直到事务结束才释放。以及封锁协议可以防止修改丢失,并保证事务T是可恢复的。在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不...博文来自:e_online的专栏

  一、并发控制定义在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,保证事务的一致性和隔离性,同时最大程度地并发。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的...博文来自:李木子的博客

  一、数据库的事务:   事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是不可分割的一个序列。事务的特征:(ACID)1、原子性:事务的操作要么全做要么全不做。2、一致性:事务操作的结...博文来自:ubabyfat的博客

  今天整理一下数据库中的锁机制和封锁协议,锁主要用于解决事务并发控制中产生的一些问题,在此之前我先列举一些相关的基本概念。事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割...博文来自:flyingfish

  排他锁和共享锁1.排他锁的作用范围是:执行语句开始,到在事务提交时才会释放。2.本事务对某数据加了排他锁,则其他事务就不能对该数据加任何锁(包括排他锁和共享锁)。3.本事务对某数据加了共享锁,则其他事...博文来自:胡渣大叔的技术专栏

  表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一个表上加S锁,如果表中的一行已被另外的事务加...博文来自:雅冰石的专栏

  前言写篇文章来巩固自己学习的知识。通过写文章,本着一颗不误导别人、不混过去的心,找出那些自己看似懂了的问题。这篇文章主要讲的是事务、隔离级别、锁、封锁协议之间的关联。我觉得最重要的是要将这些知识关联起...博文来自:LLLLEE 的博客

  前段是时间涉及到数据库的隔离级别问题,在网上搜索一下,发现大部分都说的模棱两可,而且也有很多错误。于是查阅了上学时的课本《数据库系统概论》和JDBC的文档。现在把总结的结果记录下来,供大家分享.1.D...博文来自:Coding小飞侠的专栏

  事务并发操作不合理带来的问题丢失修改  T1事务修改——T2事务修改,此时T1的修改被覆盖,这叫丢失修改。读“脏”数据  T1事务修改——T2读数据——T1撤回修改,此时T2发现读的数据和数据库中不一...博文来自:李正浩的博客

  8.6两段锁协议    所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。    ·在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;    ·在释放一个封锁之后,事务不再申请...博文来自:KingKazma 的专栏

  一、事务概念ACIDAUTOCOMMIT二、并发一致性问题丢失修改读脏数据不可重复读幻影读三、封锁封锁粒度封锁类型封锁协议MySQL隐式与显示锁定四、隔离级别未提交读(READUNCOMMITTED)...博文来自:Ryze

  数据库并发控制及SQLServer的并发控制机制在多用户和网络环境下,数据库是一个共享资源,多个用户或应用程序同时对数据库的同一数据对象进行读写操作,这种现象称为对数据库的并发操作。显然并发操作可以充...博文

  数据库是一个共享资源,可以供多个用户共享使用.以事务为单位管理用户程序的并发访问,提高资源共享效率。数据并发性意味着多个用户可以同时访问数据。并发访问存在冲突吗?如何控制?事务:用户定义的一个数据库操...博文来自:Alearn的博客

  我们在开发中也许都有感受到,数据库的并发操作会带来许多问题,比如丢失更新、不可重复读、读脏数据(幽灵数据)等等,常见的比如自动售票系统,站点1、2同时读出剩余的票数n张,站点1售出一张票,并将n-1写...博文来自:幼儿猿

  对锁机制,保证事务可串行性的最常用协议是两阶段封锁协议。该协议要求每个事务分两个阶...博文来自:foreversunyao的专栏

  ——并发事务在读写数据时容易发生数据读写错误,通过锁的方式确保并发事务的正确性——三级封锁协议:在运用X锁和S锁对数据对象加锁时,还需要约定一些规则,例如何时申请X锁或S锁、持锁时间、何时释放等。称这...博文来自:一只老风铃

  掌握事务的概念及性质 掌握数据库恢复的基本技术和策略 1、了解并发操作可能产生的数据不一致性 2、掌握并发控制的技术:封锁机制、三级封锁协议、 活锁的避免、死锁的预防、诊断及解除 3、掌握并发调度的正确性标准和技术(可串行性、...

  数据库的并发控制 数据库并发控制的含义 事务 并发控制的必要性 基于封锁的并发控制技术 基于时间戳的并发控制技术

  1.区分范式1NF:原子性,属性不能再分2NF:不存在部分函数依赖,如(A,B,C,D),(A,B)为候选键,不能由候选关键字的一部分决定非关键字,如B-gt;C3NF:不存在传递函数依赖,...博文来自:的博客

  2PC二阶段提交(Two-phaseCommit)是指,在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段...博文来自:不可不戒

  在运用X锁和S锁对数据对象加锁时,还需要约定一些规则,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(LockingProtocol)。对封锁方式规定不同的规则,就形成了各种不同的...博文来自:

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  前言:前段时间做项目用到了图片裁剪,调用系统裁剪图片,结果在我的小米3上一直有问题,裁剪界面打不开,在其他设备上没问题,于是研究其他软件是怎么做的,淘宝的裁剪图片是自己做的,当然没问题,京东的是调用的...博文来自:zwenkai

  Intellij IDEA 如何通过数据库表生成带注解的实体类图文详细教程 Intellij IDEA 如何通过数据库表生成带注解的实体类 Contents 第一步:新建...博文来自:liu_yulong的专栏

  灰度图像的自动阈值分割(Otsu 法)机器视觉领域许多算法都要求先对图像进行二值化。这种二值化操作阈值的选取非常重要。阈值选取的不合适,可能得到的结果就毫无用处。今天就来讲讲一种自动计算阈值的方法。这...博文来自:Ivan 的专栏

  用以前以前写过的自定义课表软件 ,Android 自定义View课程表表格 原生View截图合成分享的图片 看到的是图片只显示到11节处,下面的没有...博文来自:ShallCheek

  本matplotlib安装过程在一定程度上参考了 因为学习机器学习的需要,又准备参考《机器学...博文来自:SCUT_Arucee的博客

  1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包...博文来自:专注、专心

  servlet页面代码:@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复...博文来自:高调做事,低调做人!

  首先,确定你已经有了CSR证书请求、开发证书和App ID。如果你不是第一次开发iOS应用程序,那么你可能已经有了这些东西。那么你可以继续以下的步骤。一、配置App ID登录你的provisionin...博文来自:kmyhy的专栏

  目前还没有写出这个demo,不过可以参考下面这两个链接,一个是显示日期的,还有一个是合并单元格: 合并单元格: 博文来自:dddd的博客

  以回归为例吧,回归在某些场合可能更精准 支持连续变量和类别变量,类别变量就是某个属性有三个值,a,b,c,需要用Feature Transformers中的vectorindexer处理 上来是一堆...博文来自:chencheng12077的博客

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  简述关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系。关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的。简述 ...博文来自:本博客暂停更新,后期专注维护个人公众号『高效程序员』,欢迎关注!

  今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了。 附上源码pyDdos.py: #!/usr/bin/env ...博文来自:jeepxiaozi的专栏

  :为什么我的view大小改变了,相机的摄像范围却没有改变呢!我好迷茫……

http://funnyland.net/fengsuolidu/426.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有