学习笔记--张先生的驿站,心灵车站欢迎你
日志
相册

首页

 > 

日志

 > 学习笔记


MySQL事务处理&存储引擎[转载]

2013-03-13

 
1.   什么是事务

在数 据库系统的世界里,事务(transaction)是指把多个数据库操作当做一个整体(块)来对待。数据库系统确保操作要么全都正确地得到执行,要么全都 不执行,即使在事务过程中出现了停电、计算机崩溃或其他灾难事件也是如此。这样一来,就不会发生从银行账户汇出了一笔钱款、但对方却因为系统出了某种问题 而未能收到这笔钱款的事情了。
事务机制还可以让程序员安全、及时地中止一组命令的执行(并把数据库恢复到这组命令开始执行前的状态)。有了事务机制,程序员在软件开发过程中需要考虑和解决的问题将大为减少。
MySQL 对事务的支持由来已久,只是有不少人不了解这一事实而已。要知道,MySQL能够以好几种格式来保存数据表。MySQL数据库系统在默认的情况下会把数据 表保存为MyISAM格式,这种格式不支持事务。但有几种格式是支持事务的,它们当中最为流行的是InnoDB格式。
 
2.  InnoDB和MyISAM存储引擎的区别
InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
 
基本的差别为:
MyISAM类型不支持事务处理, MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。
 
另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。
InnoDB 是 一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能 包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小, 一般为 2GB。
 
3.  MyIASM是IASM表的新版本,有如下扩展: 
二进制层次的可移植性。 
NULL列索引。 
对变长行比ISAM表有更少的碎片。 
支持大文件。 
更好的索引压缩。 
更好的键吗统计分布。 
更好和更快的auto_increment处理。 
 
4.  以下是一些细节和具体实现的差别:
1.  InnoDB不支持FULLTEXT类型的索引。
2.  InnoDB 中 不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是 MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
 
3.  对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
 
4.  DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
 
5.  LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
 
另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
 
任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
 
5.  研究结论
1)InnoDB占用磁盘空间比MyISAM大,MyISAM存储数据可节省空间12%,存储索引可节省95%;
2)InnoDB对空闲存储空间的使用不优。
研究发现,MyISAM可大量节省磁盘空间,特别是对索引的存储上,优势巨大,这对大型Mysql数据库的数据表和索引的物理设计,具有较大的指导意义。
6.   使 用MyISAM或InnoDB的选择:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。如果执行大量 的 SELECT,MyISAM是更好的选择。若需要使用事务处理,但是原来的数据表使用的是MyISAM,就需要改为bdb或者innodb,这样基于 MyISAM的程序,将类型改为innodb后,其程序不用改动。
 
7.  研究对象及获得的数据
Mysql版本:5.1.26-rc-community
研究对象为创建的一个表,mytable3,初始为InnoDB类型。有54万行非重复数据(用随机函数产生),两个索引。共进行两个实验,获得的实验数据如下。

 
表占用_MB
索引占用_MB
InnoDB文件占用_MB
MyISAM文件占用_MB
初始类型InnoDB
256
240
914
0
类型改为MyISAM
222
8
914
230
类型改回InnoDB
256
240
1034
0
从实验数据可以看出,表类型alter为MyISAM后,所占磁盘空间仅8MB,为InnoDB的4%。而且随着表类型改回InnoDB,InnoDB表空间被迫扩充120MB,达到1034MB,以支持该表数据的回迁。

《加州旅馆》教学超级简单的

2013-02-24

Magento学习笔记--主要是翻译加学习(一)

2012-11-10

根目录

The default installation contains the following files and directories in the

base directory:

下面的目录和文件这个是默认的安装下顶层目录所包含的。

.htaccess

.htaccess.sample

404 (directory)

app (directory)

cron.php

downloader (directory)

favicon.ico

index.php

index.php.sample

js (directory)

lib (directory)

LICENSE_AFL.txt

LICENSE.txt

media (directory)

pear

pkginfo (directory)

report (directory)

skin (directory)

var (directory)

 

每一文件和目录都有不同的目的,这个将有助于随后我们找到某个具体的文件和开发项目,

这也将有助于我们为新的moudule开发构建出项对应的文件和目录。

 

每个根目录下的文件的集体功能

l  .htaccess这个文件是URLRewirte的不具体多讲

l  .htaccess.sample 上面文件的备份文件。

l  cron.php 这个文件将作为一个任务计划的工作来确保magento的缓存不至于影响服务器的性能

l  favicon.ico 浏览器的地址栏的小图标

l  index.php  magento的程序加载文件,用它来初始化一切

l  index.php.sample 上面文件的备份模板文件

l  LICENSE.txt

l  Pear 这个是控制通过下载和SSH来更新

l  php.ini不多讲这个了


根目录下的每个文件夹的功能描述:

  • 404这个是默认的404错误存储外观文件的目录
  • App所有的代码(模块),设计(主题),配置,和编译文件都放在这个目录下,这个是我们开发的时候最常用的目录,同时这个文件夹下也包含了默认的后台本分和安装的代码
  • Downloader 这个是网站不通过SSH通道更新需要的。
  • Js
  • Lib 所有的php的类库放置的文件夹,这是magento的所有的核心的关系所在,ZF框架也存放在这里
  • Mefia 所有的媒体文件的放置处,主要的是所有的缩微图和上传的产品图片,还有一些重要的图片当我们用导入导出工具的时候
  • Pkginfo 简介的安装信息,debug文件,模块更新的信息
  • Report 错误报告
  • Skin前台的皮肤,图片,js脚本,css文件等等
  • Var 通常存储的缓存产生的文件,包括session(文件模式),数据输出端,数据备份和一些缓存错误报告。

 

模板系统的构架

 

/app/design/frontend/default/<template_name>/

°° layout/—所有用来解析所绑定的模块所绑定的XML文件

°° template/—所有通过layout/的函数所调用的最终的模板文件

/skin/frontend/default/<template_name>/—用于包含所有的模板所包含的图片,flashJS.

区块和内容块 Structural blocks and content blocks

 

         区别在于前者相对于布局,后者类似于具体实现的。注意理解这个概念。

 

XML layout(布局)文件

        

用于分配到每一个区(布局)块,magento 为每一个请求加载一个XML layout 文件.这个文件,每当用户访问一个URL的时候被调用,他声明了网站上每一个区块中所包含的moudules. 在这之上,我们有一个page(或者是名字).xml 文件,默认加载所有的页面.

 

通常情况下,layout XML文件结构如下:

<default>

<reference name="header">

<block type="page/html_header" name="header" as="header">

<block    type="page/template_links" name="top.links"   as="topLinks"/>

<block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>

<block type="core/text_list" name="top.menu" as="topMenu"/>

</block>

</reference>

</default>

 

根据上面的代码 我们得出:

 

          <default>-- 这个handler URL,只在默认加载的没有任何问题的时候,其他handler才能初始化。

          <reference>--主题被执行的区块的参考结构

          <block> --一个内容块,定义type 模板文件位置,以及处理在系统中输出数据

 

此外,Magento用一个叫action的子标签声明需要插入的数据,例如,添加一个CSS样式表:

 

<block type="page/html_head" name="head" as="head">

<action method="addCss">

<stylesheet> css/menu.css </stylesheet>

</action>

<action method="addCss">

<stylesheet> css/clears.css </stylesheet>

</action>

<action method="addItem">

<type>js</type>

<name>varien/iehover-fix.js</name>

<params/>

<if>lt IE 7</if>

</action>

<action method="addCss">

<stylesheet>css/print.css</stylesheet>

<params>media="print"</params>

</action>

<action method="addCss">

<stylesheet> css/print.css </stylesheet>

<params> media="print" </params>

</action>

</block>

我们需要注意的是上面的的几个action标签的method的参数,他们被放置到一个数组,然后执行这个参数值的名字的函数方法,好像这里的addCss,。。。

 

 

分层文件处理Hierarchical file processing

 

---这里还是跳过去,主要讲的主题模块调用的一个优先级的问题 ,这个理解很容易。

 

模块和模块在系统工作的原理(46页)



心灵车站全球战略伙伴:U5Buy.com    卓创国际   朝阳印刷   金士盟逆变器   陆祺电子


加盟Email:raptor@raptorzhang.com
版权保护 如有雷同 必然追究