若天明 发表于 2015-1-16 22:28:05

MSSQL网页编程之InnoDB 中文参考手册 --- 10 multivers...

MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。参考|参考手册|中文InnoDB中文参考手册---犬犬(心帆)翻译10multiversioning的完成
由于InnoDB是一个multiversioned数据库体系,它必需在表空间内保留纪录行的先期版本信息。这个信息被存储在被称为回滚段(rollbacksegment)的数据布局中,这与Oracle类似。

InnoDB在外部处置时在数据库中为每行纪录增加两个字段。一个6-byte字段形貌最初一个拔出或更新该行的事件的标识符。一样被删除纪录在外部处置上为更新该行的某一标记位,该标记位用于纪录它已被删除。每行纪录一样包括着一个名为滚指针(rollpointer)的7-byte字段。这个指针指向一个在回滚段中存储的取消日记纪录(undologrecord)。假如该行被更新过,那末取消日记纪录中包括需要的信息来重修它被更新前的内容。

InnoDB必要经由过程一个事件的回滚来完成利用回滚段中的信息实行打消操纵。它也用于为一个consistentread来重修一个纪录行的初期版本。

在回滚段中的打消日记被分为拔出和更新打消日记。拔出打消日记(Insertundologs)仅仅只在事件回滚时必要,它能够在事件一提交就被丢弃。更新打消日记(Updateundologs)一样也在consistentreads中利用,它们将在以后没有事件时被丢弃。InnoDB指派了一个数据快照,而consistentread必要更新打消日记中的信息来重修一个数据库行的初期版本。

必需纪录有纪律地提交你的事件,一样的这些事件只收回了consistentreads。不然InnoDB不克不及够从更新打消日记中丢弃数据,则回滚段大概会增添地太年夜而填满了全部表空间。

回滚段中的打消日记纪录的物理尺寸一般比它们绝对应的拔出或更新的纪录要小些。你能够经由过程进修这些信息预算出回滚段所需的空间。

在multiversioning的计划中,以一条SQL语句删除一个纪录行时,该纪录其实不会当即从数据库中移除。只在当InnoDB丢弃删除的更新打消日记纪录时,它才会从数据库中物理地移除响应的纪录行和它的索引。这个移除操纵被称为purge,它长短常快的,一般以与实行删除的SQL语句不异的工夫按次实行。
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

柔情似水 发表于 2015-1-18 06:00:56

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

admin 发表于 2015-1-21 11:56:20

你可以简单地认为适合的就是好,不适合就是不好。

再现理想 发表于 2015-1-30 17:42:26

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

灵魂腐蚀 发表于 2015-2-6 14:38:50

我们学到了什么?思考问题的时候从表的角度来思考问

飘飘悠悠 发表于 2015-3-5 07:16:07

呵呵,这就是偶想说的

乐观 发表于 2015-3-12 00:29:17

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

若天明 发表于 2015-3-19 17:06:48

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了

海妖 发表于 2015-3-29 15:46:42

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
页: [1]
查看完整版本: MSSQL网页编程之InnoDB 中文参考手册 --- 10 multivers...