Asktalk

          天行健,君子以自強(qiáng)不息!
          posts - 21, comments - 79, trackbacks - 0, articles - 2
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

          2007年12月21日

           

          這是一個(gè)目前最好的一個(gè)開源分頁標(biāo)簽的實(shí)現(xiàn)---extremeTable標(biāo)簽。今天談?wù)勊?/span>Limit的設(shè)計(jì)架構(gòu)思想。

          這個(gè)設(shè)計(jì)很通用,經(jīng)過作者的多次重構(gòu),現(xiàn)在extremeTable的架構(gòu)非常漂亮。這個(gè)標(biāo)簽現(xiàn)在缺點(diǎn)是有些參數(shù)對(duì)mvc控制器屏蔽了,應(yīng)提供一致的對(duì)外接口。不過整體上設(shè)計(jì)還是很精致的,面向?qū)ο髞硖幚?html元素,與spring非常的默契,非常便于開發(fā)和測試。

          類圖關(guān)系

          1, 工廠LimitFactory

          TableLimitFactoryAbstractLimitFactoryLimitFactory

          TableLimitFactory是最終實(shí)現(xiàn)的工廠,它extendsAbstractLimitFactory抽象類,AbstractLimitFactory implementsLimitFactory接口。

          TableLimitFactory主要是用來實(shí)例化,通過構(gòu)造函數(shù)傳入?yún)?shù)。同時(shí)創(chuàng)建Registry來完成jsp頁面參數(shù)傳入Registry。當(dāng)然還有一個(gè)功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對(duì)象。

          this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);

          AbstractLimitFactory主要是用來獲取jsp頁面上設(shè)置的參數(shù),比如分頁的信息(第幾頁,起始行,結(jié)束行,每頁顯示行數(shù),查詢條件,排序條件等),當(dāng)然他是通過工具類Registry來實(shí)現(xiàn)。

          2, Limit

          TableLimitLimit。其主要作用是一個(gè)參數(shù)參數(shù)器,就是把Registry對(duì)象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標(biāo)簽和action通信的橋梁。就像我們的j2ee項(xiàng)目vodaostrutsview等數(shù)據(jù)傳輸工具。

          3, Preferences

          TablePropertiesProperties 主要是來實(shí)現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。

          InputStream input = this.getClass().getResourceAsStream(preferencesLocation);

          if (input != null) {

          properties.load(input);

          }

          其中preferencesLocation是路徑,在TableLimitFactory初始化時(shí)候,通過工具類TableModelUtils.getPreferencesLocation(context)獲取。

          這個(gè)設(shè)計(jì)也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。

          4, Registry

          LimitRegistryAbstractRegistryRegistry

          這個(gè)體系結(jié)構(gòu)和上面的工廠模式一樣,就是LimitRegistry主要是用來實(shí)例化,通過構(gòu)造函數(shù)傳入?yún)?shù)。AbstractRegistry是實(shí)際實(shí)現(xiàn)類,獲取jsp表單提交的參數(shù),并提供getter方法供Limit來使用。Registry是一個(gè)接口。

          所以這設(shè)計(jì)模式,我們可以來學(xué)習(xí),

          經(jīng)典表述:抽象類接口

          類:初始化,定義構(gòu)造函數(shù),傳入?yún)?shù)。

          抽象類:定義業(yè)務(wù)方法在此。

          接口:定義接口方法,這個(gè)不用多說。

          (作者:asktalk   來自 http://www.aygfsteel.com/askltak 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處)

          posted @ 2007-12-26 16:17 Asktalk 閱讀(4611) | 評(píng)論 (5)編輯 收藏

           

          下面是從struts的角度來談?wù)?/span>spring自帶的web框架的使用。
          當(dāng)然,我們在配置
          web框架前,需要把spring配置好,這里就不多說了。

          1.web框架核心servletweb.xml中的配置。


           

           1<servlet>  
           2<servlet-name>Dispatcher</servlet-name>  
           3<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>   
           4<param-name>contextConfigLocation</param-name>   <param-value>/WEB-INF/Config.xml</param-value>
           5  </init-param> 
           6</servlet>  
           7
           8<servlet-mapping>  
           9<servlet-name>Dispatcher</servlet-name>  
          10<url-pattern>*.do</url-pattern>
          11 </servlet-mapping>
          12

           

          如果沒有配置config.xml文件,那么其默認(rèn)的配置文件為[ servlet-name ]-servlet.xml 。也就是我們這個(gè)配置的默認(rèn)配置文件是Dispatcher-servlet.xml

          2.web框架的xml配置

          spring web框架與struts最大的不同就是spring web框架根據(jù)分工,把每一種功能都定義為一種組件,所以在開發(fā)過程中需要配置的東西就非常多;Spring中分為幾個(gè)角色:

          核心控制器,就是web框架的主 servlet

          業(yè)務(wù)控制器,也就是struts中的action對(duì)象;

          映射處理器,定義了訪問路徑如何與webxml中的bean相匹配,就是定義了一種策略;

          視圖和視圖解析器,視圖就是jstl,velocity,xslt等,視圖解析器定義了action最終導(dǎo)航頁面的策略;

          模型,就是struts MVC結(jié)構(gòu)中的model

          Command對(duì)象,類似于struts中的formBean

          2.1 Spring web框架與struts框架的區(qū)別

          下面列出了一些。例如,

          Web框架要攔截*.do路徑,那么*.do如何與我們下面的bean匹配,就需要一個(gè)映射控制器。在struts中就是名字相同的匹配,不需要配置。

          action最后要導(dǎo)向到不同的頁面,在struts中我們用的是默認(rèn)的不需要在xml文件中配置,在spring中就需要配置視圖解析器。

          下面代碼中,ActioncommandClass配置的就是類似于struts中的formBean對(duì)象。

           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
           3 "http://www.springframework.org/dtd/spring-beans.dtd">
           4<beans>
           5 <!--Definition of View Resolver -->
           6 <bean id="viewResolver"
           7  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           8  <property name="viewClass"> 
           9   <value>org.springframework.web.servlet.view.JstlView</value>
          10  </property>
          11  <property name="prefix">
          12   <value>/WEB-INF/view/</value>
          13  </property>
          14  <property name="suffix">
          15   <value>.jsp</value>
          16  </property>
          17 </bean>
          18  
          19<!—就是我們上面說的映射控制器 -->
          20 <!--Request Mapping -->
          21 <bean id="urlMapping"
          22  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          23  <property name="mappings">
          24   <props>
          25    <prop key="/login.do">LoginAction</prop>
          26   </props>
          27  </property>
          28 </bean>
          29 
          30<!---類似于struts的action配置-->
          31 <!---Action Definition-->
          32 <bean id="LoginAction"
          33  class="com.maxway.action.LoginAction">
          34  <property name="commandClass">
          35   <value>com.maxway.action.LoginInfo</value>
          36  </property>
          37  <property name="fail_view">
          38   <value>loginfail</value>
          39  </property>
          40  <property name="success_view">
          41   <value>main</value>
          42  </property>
          43 </bean>
          44</beans>
          45


           

          3.代碼的編寫

          Action不外乎繼承一些現(xiàn)成的類,來實(shí)現(xiàn)我們view部分的業(yè)務(wù)。
          作者:http://www.aygfsteel.com/asktalk

          posted @ 2007-12-25 02:23 Asktalk 閱讀(4322) | 評(píng)論 (0)編輯 收藏

           

          最近我一直在研究Eclipse的架構(gòu)體系,下面我們就來看看Eclipse的啟動(dòng)機(jī)制吧

          1Eclipse源代碼       
          eclipse-sourceBuild-srcIncluded-3.3.1.1.zip   
          版本:3.3.1.1        大小:95.058MB
          下載地址:http://download.eclipse.org/eclipse/downloads

          解壓后的目錄結(jié)構(gòu)如下圖,通過執(zhí)行build.bat可以編譯出完整的Eclipse-sdk-3.3.1.1運(yùn)行包,和我們網(wǎng)上下載的一樣。但是這個(gè)過程可能需要一個(gè)小時(shí)左右的時(shí)間,要有耐性哦。所有的插件工程目錄在plugins中,我們只需要導(dǎo)入現(xiàn)有工程即可把plugins下所有工程導(dǎo)入。

          下面我們就先來研究一下Eclipse最核心的部分,就是RCP部分必須的插件。下面我列出了Eclipse RCP需要的插件。

          將這些代碼解壓縮到一個(gè)空目錄里,然后導(dǎo)入到Source InsightProject里。     

          二、Eclipse啟動(dòng)過程

          首先我們從Eclipse的啟動(dòng)過程開始分析。

          1exe部分的引導(dǎo)

          eclipse.exeEclipse的啟動(dòng)文件,是與平臺(tái)相關(guān)的可執(zhí)行文件。它的功能比較簡單,主要是加載startup.jar文件,代碼在Eclipse源代碼的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,對(duì)應(yīng)多個(gè)平臺(tái)。對(duì)于win32平臺(tái),你可以直接運(yùn)行win32目錄下的build.bat文件來編譯得到它(需要安裝C編譯器)。

          2java代碼部分的執(zhí)行入口

          對(duì)于Eclipse 3.3.1.1版本來說,如果在eclipse目錄下沒有找到startup.jar,則直接執(zhí)行org.eclipse.equinox.launcher.Main.main方法。

          當(dāng)然我們可以在eclipse目錄下定制我們自己的啟動(dòng)引導(dǎo)包startup.jar,現(xiàn)在Eclipse 3.3.1.1好像已經(jīng)不建議這樣做了。如果有這個(gè)包,那么這個(gè)包將是java代碼的執(zhí)行入口,你可以在命令行下運(yùn)行java -jar startup.jar命令來啟動(dòng)Eclipse。它的入口是org.eclipse.core.launcher.Main類,這個(gè)類最終執(zhí)行的還是org.eclipse.equinox.launcher.Main.main方法。它對(duì)應(yīng)的源代碼在org.eclipse.equinox.launcher目錄下的Main.java。關(guān)于此文件的定制詳細(xì)信息請(qǐng)查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的注解部分。

          我們從main函數(shù)往后跟蹤,找到basicRun方法,這個(gè)是啟動(dòng)的主要部分。

              protectedvoid basicRun(String[] args) throws Exception {

                  System.getProperties().put("eclipse.startTime", Long.toString(System.currentTimeMillis())); //$NON-NLS-1$

                  commands = args;

                  String[] passThruArgs = processCommandLine(args);

                 

                  if (!debug)

                     // debug can be specified as system property as well

                     debug = System.getProperty(PROP_DEBUG) != null;

                  setupVMProperties();     //設(shè)置VM屬性

                  processConfiguration();   //讀取configuration/config.ini配置文件

                 

                  // need to ensure that getInstallLocation is called at least once to initialize the value.

                  // Do this AFTER processing the configuration to allow the configuration to set

                  // the install location. 

                  getInstallLocation();

                  // locate boot plugin (may return -dev mode variations)

                  URL[] bootPath = getBootPath(bootLocation);

                  

                  //Set up the JNI bridge. We need to know the install location to find the shared library

                  setupJNI(bootPath);

                 

                  //ensure minimum Java version, do this after JNI is set up so that we can write an error message

                  //with exitdata if we fail.

                  if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$

                      return;

                 

                  setSecurityPolicy(bootPath); //設(shè)置執(zhí)行權(quán)限

                  // splash handling is done here, because the default case needs to know

                  // the location of the boot plugin we are going to use

                  handleSplash(bootPath);

                  beforeFwkInvocation();

                  invokeFramework(passThruArgs, bootPath);    //啟動(dòng)Eclipse內(nèi)核

              }

          posted @ 2007-12-22 16:33 Asktalk 閱讀(4904) | 評(píng)論 (3)編輯 收藏

          先列出這些開源項(xiàng)目,隨后對(duì)其實(shí)現(xiàn)過程深入分析。

          1,Hibernate Synchronizer Eclipse Plugin   最近更新在2006.04.26
                http://hibernatesynch.sourceforge.net/   
                源代碼::pserver:anonymous@hibernatesynch.cvs.sourceforge.net:/cvsroot/hibernatesynch   
                HibernateSynchronizer3   為新項(xiàng)目,支持Eclipse3
                HibernateSynchronizer     為舊項(xiàng)目,支持Eclipse2 

                本插件使用方法:http://dev2dev.bea.com.cn/bbsdoc/20060124187.html
               可以生成hibernate的所有配置文件和dao。基本流程是 hibernate.cfg.xml->xxx.hbm.xml->po and dao

          2,  SqlExplorer    最近更新 2007.09.08
               http://www.sqlexplorer.org/index.php
               http://sourceforge.net/projects/eclipsesql
               源代碼::pserver:anonymous@eclipsesql.cvs.sourceforge.net:/cvsroot/eclipsesql
               與myEclipse的數(shù)據(jù)庫管理工具相近。

          3,GmailClipse 一個(gè)Eclipse RCP 
               http://sourceforge.net/projects/gmclipse/
               源代碼::pserver:anonymous@gmclipse.cvs.sourceforge.net:/cvsroot/gmclipse    源代碼為空,沒有共享
               像hotmail一樣的郵件客戶端收發(fā)系統(tǒng)。其源代碼對(duì)于學(xué)習(xí)RCP有很大的幫助。

          4,  SpringIde    spring官方的IDE工具。
                源代碼:http://springide.org/project/browser/trunk

          5, Hibernate tools   hibernate官方IDE工具。
                 官方介紹:http://www.hibernate.org/268.html 
                 源代碼svn: http://anonhibernate.labs.jboss.com/branches/Branch_3_2/HibernateExt 

          6,   Html解析工具 HTML Parser
                官方網(wǎng)址:http://htmlparser.sourceforge.net/
               

               
               

          posted @ 2007-12-22 00:43 Asktalk 閱讀(1172) | 評(píng)論 (0)編輯 收藏

          有很多朋友雖然安裝好了mysql但卻不知如何使用它。在這篇文章中我們就從連接MYSQL、修改密碼、增加用戶等方面來學(xué)習(xí)一些MYSQL的常用命令。

          一、連接MYSQL。

          格式: mysql -h主機(jī)地址 -u用戶名 -p用戶密碼

          1、例1:連接到本機(jī)上的MYSQL。

          首先在打開DOS窗口,然后進(jìn)入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車后提示你輸密碼,如果剛安裝好MYSQL,超級(jí)用戶root是沒有密碼的,故直接回車即可進(jìn)入到MYSQL中了,MYSQL的提示符是:mysql>

          2、例2:連接到遠(yuǎn)程主機(jī)上的MYSQL。假設(shè)遠(yuǎn)程主機(jī)的IP為:110.110.110.110,用戶名為root,密碼為abcd123。則鍵入以下命令:

          mysql -h110.110.110.110 -uroot -pabcd123

          (注:u與root可以不用加空格,其它也一樣)

          3、退出MYSQL命令: exit (回車)

          二、修改密碼。

          格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

          1、例1:給root加個(gè)密碼ab12。首先在DOS下進(jìn)入目錄mysqlbin,然后鍵入以下命令

          mysqladmin -uroot -password ab12

          注:因?yàn)殚_始時(shí)root沒有密碼,所以-p舊密碼一項(xiàng)就可以省略了。

          2、例2:再將root的密碼改為djg345。

          mysqladmin -uroot -pab12 password djg345

          三、增加新用戶。
          (注意:和上面不同,下面的因?yàn)槭荕YSQL環(huán)境中的命令,所以后面都帶一個(gè)分號(hào)作為命令結(jié)束符)

          格式:grant select on 數(shù)據(jù)庫.*  to  用戶名@登錄主機(jī)  identified by  \"密碼\"

          例1、增加一個(gè)用戶test1密碼為abc,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MYSQL,然后鍵入以下命令:

          grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

          但例1增加的用戶是十分危險(xiǎn)的,你想如某個(gè)人知道test1的密碼,那么他就可以在internet上的任何一臺(tái)電腦上登錄你的mysql數(shù)據(jù)庫并對(duì)你的數(shù)據(jù)可以為所欲為了,解決辦法見例2。

          例2、增加一個(gè)用戶test2密碼為abc,讓他只可以在localhost上登錄,并可以對(duì)數(shù)據(jù)庫mydb進(jìn)行查詢、插入、修改、刪除的操作(localhost指本地主機(jī),即MYSQL數(shù)據(jù)庫所在的那臺(tái)主機(jī)),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數(shù)據(jù)庫,只能通過MYSQL主機(jī)上的web頁來訪問了。

          grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

          如果你不想test2有密碼,可以再打一個(gè)命令將密碼消掉。

          grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";



          在上篇我們講了登錄、增加用戶、密碼更改等問題。下篇我們來看看MYSQL中有關(guān)數(shù)據(jù)庫方面的操作。注意:你必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進(jìn)行的,而且每個(gè)命令以分號(hào)結(jié)束。

          一、操作技巧

          1、如果你打命令時(shí),回車后發(fā)現(xiàn)忘記加分號(hào),你無須重打一遍命令,只要打個(gè)分號(hào)回車就可以了。也就是說你可以把一個(gè)完整的命令分成幾行來打,完后用分號(hào)作結(jié)束標(biāo)志就OK。

          2、你可以使用光標(biāo)上下鍵調(diào)出以前的命令。但以前我用過的一個(gè)MYSQL舊版本不支持。我現(xiàn)在用的是mysql-3.23.27-beta-win。

          二、顯示命令

          1、顯示數(shù)據(jù)庫列表。

          show databases;

          剛開始時(shí)才兩個(gè)數(shù)據(jù)庫:mysql和test。mysql庫很重要它里面有MYSQL的系統(tǒng)信息,我們改密碼和新增用戶,實(shí)際上就是用這個(gè)庫進(jìn)行操作。

          2、顯示庫中的數(shù)據(jù)表:

          use mysql; //打開庫,學(xué)過FOXBASE的一定不會(huì)陌生吧

          show tables;

          3、顯示數(shù)據(jù)表的結(jié)構(gòu):

          describe 表名;

          4、建庫:

          create database 庫名;

          5、建表:

          use 庫名;

          create table 表名 (字段設(shè)定列表);

          6、刪庫和刪表:

          drop database 庫名;

          drop table 表名;

          7、將表中記錄清空:

          delete from 表名;

          8、顯示表中的記錄:

          select * from 表名;

          從文本文件執(zhí)行SQL語句

          三、一個(gè)建庫和建表以及插入數(shù)據(jù)的實(shí)例

          drop database if exists school; //如果存在SCHOOL則刪除 
          create database school; //建立庫SCHOOL
          use school; //打開庫SCHOOL
          create table teacher //建立表TEACHER
          (
          id int(3) auto_increment not null primary key,
          name char(10) not null,
          address varchar(50) default '深圳',
          year date
          ); //建表結(jié)束
          //以下為插入字段
          insert into teacher values('','glchengang','深圳一中','1976-10-10');
          insert into teacher values('','jack','深圳一中','1975-12-23');

          注:在建表中(1)將ID設(shè)為長度為3的數(shù)字字段:int(3)并讓它每個(gè)記錄自動(dòng)加一:auto_increment并不能為空:not null而且讓他成為主字段primary key(2)將NAME設(shè)為長度為10的字符字段(3)將ADDRESS設(shè)為長度50的字符字段,而且缺省值為深圳。varchar和char有什么區(qū)別呢,只有等以后的文章再說了。(4)將YEAR設(shè)為日期字段。

          如果你在mysql提示符鍵入上面的命令也可以,但不方便調(diào)試。你可以將以上命令原樣寫入一個(gè)文本文件中假設(shè)為school.sql,然后復(fù)制到c:\\下,并在DOS狀態(tài)進(jìn)入目錄\\mysql\\bin,然后鍵入以下命令:

          mysql -uroot -p密碼 < c:\\school.sql

          如果成功,空出一行無任何顯示;如有錯(cuò)誤,會(huì)有提示。(以上命令已經(jīng)調(diào)試,你只要將//的注釋去掉即可使用)。

          四、將文本數(shù)據(jù)轉(zhuǎn)到數(shù)據(jù)庫中

          1、文本數(shù)據(jù)應(yīng)符合的格式:字段數(shù)據(jù)之間用tab鍵隔開,null值用\\n來代替.

          例:

          3 rose 深圳二中 1976-10-10

          4 mike 深圳一中 1975-12-23

          2、數(shù)據(jù)傳入命令 load data local infile \"文件名\" into table 表名;

          注意:你最好將文件復(fù)制到\\mysql\\bin目錄下,并且要先用use命令打表所在的庫。

          五、備份數(shù)據(jù)庫:(命令在DOS的\\mysql\\bin目錄下執(zhí)行)

          mysqldump --opt school>school.bbb

          注釋:將數(shù)據(jù)庫school備份到school.bbb文件,school.bbb是一個(gè)文本文件,文件名任取,打開看看你會(huì)有新發(fā)現(xiàn)。

          后記:其實(shí)MYSQL的對(duì)數(shù)據(jù)庫的操作與其它的SQL類數(shù)據(jù)庫大同小異,您最好找本將SQL的書看看。我在這里只介紹一些基本的,其實(shí)我也就只懂這些了,呵呵。最好的MYSQL教程還是"晏子"譯的"MYSQL中文參考手冊"不僅免費(fèi)每個(gè)相關(guān)網(wǎng)站都有下載,而且它是最權(quán)威的。可惜不是象\"PHP4中文手冊\"那樣是chm的格式,在查找函數(shù)命令的時(shí)候不太方便。

          posted @ 2007-12-21 01:50 Asktalk 閱讀(877) | 評(píng)論 (0)編輯 收藏

          InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定。下面是已知的兩者之間的差別,僅供參考。

          innodb
          InnoDB 給 MySQL 提供了具有事務(wù)(commit)、回滾(rollback)和崩潰修復(fù)能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)。這些特性均提高了多用戶并發(fā)操作的性能表現(xiàn)。在InnoDB表中不需要擴(kuò)大鎖定(lock escalation),因?yàn)?InnoDB 的列鎖定(row level locks)適宜非常小的空間。InnoDB 是 MySQL 上第一個(gè)提供外鍵約束(FOREIGN KEY constraints)的表引擎。

          InnoDB 的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫系統(tǒng),它的 CPU 利用率是其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能比的。在技術(shù)上,InnoDB 是一套放在 MySQL 后臺(tái)的完整數(shù)據(jù)庫系統(tǒng),InnoDB 在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引。 InnoDB 把數(shù)據(jù)和索引存放在表空間里,可能包含多個(gè)文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨(dú)的文件中。InnoDB 表的大小只受限于操作系統(tǒng)的文件大小,一般為 2 GB。

          在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手冊的最新版本總是被放置在那里,并且在那里可以得到 InnoDB 的商業(yè)許可(order commercial licenses)以及支持。

          InnoDB 現(xiàn)在(2001年十月)在一些大的需高性能的數(shù)據(jù)庫站點(diǎn)上被使用。著名的 Internet 新聞?wù)军c(diǎn) Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存儲(chǔ)了超過 1 TB 的數(shù)據(jù),而且另外的一個(gè)站點(diǎn)在 InnoDB 表上處理著平均每秒 800 次的插入/更新的負(fù)載。

          MyISAM
          MyISAM 是MySQL缺省存貯引擎 .

          每張MyISAM 桌被存放在盤在三個(gè)文件 。frm 文件存放表格定義。 數(shù)據(jù)文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

          以下是一些細(xì)節(jié)和具體實(shí)現(xiàn)的差別:

          1.InnoDB不支持FULLTEXT類型的索引。
          2.InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含 where條件時(shí),兩種表的操作是一樣的。
          3.對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
          4.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。
          5.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。

          另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

          任何一種表都不是萬能的,只用恰當(dāng)?shù)尼槍?duì)業(yè)務(wù)類型來選擇合適的表類型,才能最大的發(fā)揮MySQL的性能優(yōu)勢。

           

           

          posted @ 2007-12-21 01:09 Asktalk 閱讀(2897) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 龙岩市| 开阳县| 隆回县| 郴州市| 湾仔区| 华蓥市| 东莞市| 高要市| 兰州市| 邮箱| 商南县| 韶山市| 宁安市| 道真| 万源市| 平顺县| 洛南县| 余干县| 特克斯县| 綦江县| 陵水| 化州市| 盐边县| 新源县| 汉沽区| 尚志市| 揭东县| 会东县| 武功县| 准格尔旗| 双峰县| 年辖:市辖区| 建瓯市| 云霄县| 海安县| 二连浩特市| 深泽县| 潼关县| 万源市| 芮城县| 哈密市|