﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-Joinclass Inc-文章分类-数据库技术</title><link>http://www.cnitblog.com/tilan/category/4264.html</link><description>软件开发 软件配置 项目管理 软件工程</description><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 16:04:33 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 16:04:33 GMT</pubDate><ttl>60</ttl><item><title>如何使用 SQL JSP 标准库</title><link>http://www.cnitblog.com/tilan/articles/21769.html</link><dc:creator>Joinclass Inc</dc:creator><author>Joinclass Inc</author><pubDate>Thu, 11 Jan 2007 08:54:00 GMT</pubDate><guid>http://www.cnitblog.com/tilan/articles/21769.html</guid><wfw:comment>http://www.cnitblog.com/tilan/comments/21769.html</wfw:comment><comments>http://www.cnitblog.com/tilan/articles/21769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tilan/comments/commentRss/21769.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tilan/services/trackbacks/21769.html</trackback:ping><description><![CDATA[<p class="paragraph">完成本方法文档的学习后您应该能够使用 SQL JSTL 来： </p>
		<ul>
				<li>
						<p>
								<span class="list">查询 </span>
								<span class="list">Oracle 数据库。</span>
						</p>
				</li>
		</ul>
		<ul>
				<li>
						<p>
								<span class="list">向 Oracle 数据库中插入一行数据 </span>
						</p>
				</li>
				<li>
						<p>
								<span class="list">更新一列数据 </span>
						</p>
				</li>
		</ul>
		<h3 class="heading3">简介 </h3>
		<p class="paragraph">本文档演示如何使用 SQL JSP 标准标记库 (JSTL) 访问 Oracle 数据库。JSTL 的目的是为那些不熟悉或不适应脚本语言（如 Java）的 JSP 页面作者提供方便。过去，我们在 JSP 页面中使用 scriptlet 来处理动态数据。而 JSTL 的目的就是使用 JSTL 标记来代替 scriptlet。在本方法文档中，我们将学习如何使用 JSTL 来访问数据库。http://java.sun.com/jstl/sql 页面上提供了所有的 SQL 标记。</p>
		<h3 class="heading3">软件需求 </h3>
		<ul class="list">
				<li class="list">
						<p>
								<span class="list">Oracle9<i class="ITALICiBodycopy">i</i> Database version 9.0.1 或更新版本。您可从 Oracle 技术网<a href="http://www.oracle.com/technology/global/cn/software/products/oracle9i/index.html">下载</a> Oracle9<i class="ITALICiBodycopy">i</i> Database。</span>
								<span class="paragraph">
								</span>
						</p>
				</li>
				<li class="list">
						<p>
								<span class="paragraph">JDK1.2.x 或更高版本。可从<a href="http://java.sun.com/products">此处</a>下载。</span>
								<span class="paragraph">
								</span>
								<span class="paragraph">
								</span>
						</p>
				</li>
				<li class="list">
						<p>
								<span class="paragraph">Oracle9</span>
								<span class="list">
										<i class="ITALICiBodycopy">i</i>
								</span>
								<span class="paragraph">AS Container for Java(OC4J) version 9.0.3 或更新版本。可以在 OTN <a href="http://www.oracle.com/technology/global/cn/software/products/ias/index.html">下载</a>。</span>
						</p>
				</li>
				<li class="list">JSP 标准标记库。您可以使用 Apache.org 提供的<a href="http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/">标准标记库 1.0 Reference Implementation</a></li>
		</ul>
		<p class="heading3">使用数据库 JSTL 标记</p>
		<p class="paragraph" span="">JSTL 的数据库的库支持数据库查询、更新和事务处理。JSP 页面能够使用下面的指令导入这个库。<br /><code><span class="code">&lt;%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %</span><span class="nocolor">&gt;</span></code><span class="tabletext"><br /></span></p>
		<h3 class="heading3">准备数据库</h3>
		<p class="heading3">对于没有默认数据库的 JSP 页面，<code class="nocolor">&lt;sql:setDataSource&gt;</code> 能够准备一个数据库以供使用。<br />下面的代码展示了如何创建一个数据源。</p>
		<center>
				<table cellspacing="0" bgcolor="#86a5c3" border="0">
						<tbody>
								<tr>
										<td>
												<table cellspacing="0" cellpadding="3" width="100%" bgcolor="#ffffff" border="0">
														<tbody>
																<tr>
																		<td class="CODE" valign="top" bgcolor="#eaead5">
																				<pre>&lt;sql:setDataSource<br />  var="example"<br />  driver="oracle.jdbc.driver.OracleDriver"<br />  url="jdbc:oracle:thin:@localhost:1521:ORCL"<br />  user="scott"<br />  password="tiger"<br />/&gt;</pre>
																		</td>
																</tr>
														</tbody>
												</table>
										</td>
								</tr>
						</tbody>
				</table>
		</center>
		<p class="paragraph">
				<code class="nocolor">&lt;sql:setDataSource&gt;</code> 标签有如下属性：</p>
		<table width="90%" border="1">
				<tbody>
						<tr>
								<td class="tabletext">
										<b>属性</b>
								</td>
								<td class="tabletext">
										<b>说明</b>
								</td>
								<td class="tabletext">
										<b>是否需要</b>
								</td>
								<td class="tabletext">
										<b>默认</b>
								</td>
						</tr>
						<tr>
								<td class="tabletext">driver</td>
								<td class="tabletext">需要注册的 JDBC 驱动程序类的名称</td>
								<td class="tabletext">不</td>
								<td class="tabletext">无</td>
						</tr>
						<tr>
								<td class="tabletext">url</td>
								<td class="tabletext">用于数据库连接的 JDBC URL</td>
								<td class="tabletext">不</td>
								<td class="tabletext">无</td>
						</tr>
						<tr>
								<td class="tabletext">user</td>
								<td class="tabletext">数据库用户名</td>
								<td class="tabletext">不</td>
								<td class="tabletext">无</td>
						</tr>
						<tr>
								<td class="tabletext">password</td>
								<td class="tabletext">数据库密码 </td>
								<td class="tabletext">不</td>
								<td class="tabletext">无</td>
						</tr>
						<tr>
								<td class="tabletext">dataSource</td>
								<td class="tabletext">预先准备的数据库（字符串或<br /><code class="nocolor">javax.sql.DataSource</code>）</td>
								<td class="tabletext">不</td>
								<td class="tabletext">无</td>
						</tr>
						<tr>
								<td class="tabletext">var</td>
								<td class="tabletext">代表数据库的变量名</td>
								<td class="tabletext">不</td>
								<td class="tabletext">设置为默认</td>
						</tr>
						<tr>
								<td class="tabletext">scope</td>
								<td class="tabletext">代表数据库的变量的作用域</td>
								<td class="tabletext">不</td>
								<td class="tabletext">页面</td>
						</tr>
				</tbody>
		</table>
		<h3 class="heading3">
				<span class="heading3">查询与更新</span>
		</h3>
		<p class="paragraph">JSTL 可以使用 <code class="nocolor">&lt;sql:query&gt;</code> 从数据库读取数据并使用 <code class="nocolor">&lt;sql:update&gt;</code> 向数据库写入数据。这些标记可以通过 ? 占位符支持 SQL 命令，<span class="nocolor"><code>&lt;sql:param&gt;</code></span> 和 <code class="nocolor">&lt;sql:dateParam&gt;</code> 可以填充到这些占位符中。<br /></p>
		<p class="paragraph" align="center">
				<b>从数据库查询</b>
		</p>
		<center>
				<table cellspacing="0" bgcolor="#86a5c3" border="0">
						<tbody>
								<tr>
										<td>
												<table cellspacing="0" cellpadding="3" width="100%" bgcolor="#ffffff" border="0">
														<tbody>
																<tr>
																		<td class="CODE" valign="top" bgcolor="#eaead5">
																				<pre>
																						<span class="bodycopy">&lt;sql:query var="deejays"&gt;<br />  SELECT * FROM mytable<br />&lt;/sql:query&gt;</span>

&lt;%-- Get the column names for the header of the table --%&gt;
&lt;c:forEach var="columnName" items="${deejays.columnNames}"&gt;<br />  &lt;th&gt;&lt;c:out value="${columnName}"/&gt;&lt;/th&gt;<br />&lt;/c:forEach&gt;

&lt;%-- Get the value of each column while iterating over rows --%&gt;
&lt;c:forEach var="row" items="${deejays.rows}"&gt;<br />  &lt;tr&gt;<br />    &lt;c:forEach var="column" items="${row}"&gt;<br />      &lt;td&gt;&lt;c:out value="${column.value}"/&gt;&lt;/td&gt;<br />    &lt;/c:forEach&gt;<br />  &lt;/tr&gt;<br />&lt;/c:forEach&gt;</pre>
																		</td>
																</tr>
														</tbody>
												</table>
										</td>
								</tr>
						</tbody>
				</table>
		</center>
		<p class="paragraph" align="left">
				<code class="nocolor">&lt;sql:query&gt;</code> 标记可用来查询数据库，核心标记 <code class="nocolor">&lt;c:forEach&gt;</code> 用于遍历结果集。<code class="nocolor">&lt;c:forEach&gt;</code> 标记读取查询中的每一行。您可以使用列名来获取行中每一列的值。核心标记 <code class="nocolor">&lt;c:out&gt;</code> 用于输出值。</p>
		<p class="paragraph" align="center">
				<b>更新表中的一列</b>
		</p>
		<center>
				<table cellspacing="0" bgcolor="#86a5c3" border="0">
						<tbody>
								<tr>
										<td>
												<table cellspacing="0" cellpadding="3" width="100%" bgcolor="#ffffff" border="0">
														<tbody>
																<tr>
																		<td class="CODE" valign="top" bgcolor="#eaead5">
																				<pre>&lt;sql:update var="updateCount" dataSource="${example}"&gt;
  UPDATE mytable SET name=? 

    &lt;sql:param value="Scott Tiger"/&gt; WHERE nameid=1<br />&lt;/sql:update&gt;</pre>
																		</td>
																</tr>
														</tbody>
												</table>
										</td>
								</tr>
						</tbody>
				</table>
		</center>
		<p class="paragraph">
				<code class="nocolor">&lt;sql:update&gt;</code> 标记用于 DML 操作。在更新查询中可以有 '?'。然后您可以使用 <code class="nocolor">&lt;sql:parm&gt;</code> 把一个值与 ? 相关联。<code class="nocolor">&lt;sql:parm&gt;</code> 的值可以从一个变量中获取（如 HTTP 参数）。</p>
		<p class="paragraph">您可以查看完整的<a href="http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jsps/JstlSql.jsp.html">源代码</a>以了解如何创建一个表以及其撤消方法。 </p>
		<h3 class="heading3">安装</h3>
		<p class="paragraph">为了运行此代码，您需要配置 OC4J 以使用 JSTL。</p>
		<ul>
				<li>
						<span class="list">把从 Apache 下载的文件 <code class="nocolor">jakarta-taglibs-standard-1.0.zip</code> 解压缩到一个目录中，比如 <code class="nocolor">D:\mydir</code>。</span>
				</li>
		</ul>
		<ul>
				<li>
						<span class="list">把目录 <code class="nocolor">D:\mydir\jakarta-taglibs\jstl-1.0\lib</code> 中的文件复制到 <code class="nocolor">&lt;J2EE_HOME&gt;\default-web-app\WEB-INF\lib</code>。如果不存在目录 <code class="nocolor">&lt;J2EE_HOME&gt;\default-web-app\WEB-INF\lib</code>，则创建它。</span>
				</li>
		</ul>
		<ul>
				<li>
						<span class="list">把文件 <code class="nocolor">JstlSql.jsp</code> 复制到目录 <code class="nocolor">&lt;J2EE_HOME&gt;\default-web-app\examples\jsp</code></span>
				</li>
		</ul>
		<ul>
				<li>
						<span class="list">从 http://&lt;host-name&gt;:&lt;port&gt;/examples/jsp/JstlSql.jsp 运行它</span>
				</li>
		</ul>
		<h3 class="heading3">参考</h3>
		<ul>
				<li>
						<a href="http://download-west.oracle.com/docs/cd/A97688_09/generic.903/a97678/toc.htm">
								<span class="list">Oracle9iAS Containers for J2EE JSP 标记库与实用工具参考</span>
						</a>
				</li>
		</ul>
		<ul>
				<li class="list">
						<a href="http://java.sun.com/products/jsp/jstl/">http://java.sun.com/products/jsp/jstl/</a>
				</li>
		</ul>
		<h3 class="heading3">总结</h3>
		<p class="paragraph">在阅读完本文档后，您应该已经理解了如何使用 JSTL 标记来访问数据库。</p><img src ="http://www.cnitblog.com/tilan/aggbug/21769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tilan/" target="_blank">Joinclass Inc</a> 2007-01-11 16:54 <a href="http://www.cnitblog.com/tilan/articles/21769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>点评主流开源数据库的技术特点</title><link>http://www.cnitblog.com/tilan/articles/19440.html</link><dc:creator>Joinclass Inc</dc:creator><author>Joinclass Inc</author><pubDate>Tue, 21 Nov 2006 06:33:00 GMT</pubDate><guid>http://www.cnitblog.com/tilan/articles/19440.html</guid><wfw:comment>http://www.cnitblog.com/tilan/comments/19440.html</wfw:comment><comments>http://www.cnitblog.com/tilan/articles/19440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tilan/comments/commentRss/19440.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tilan/services/trackbacks/19440.html</trackback:ping><description><![CDATA[<p>
				<font face="Verdana">随着开放源代码软件的使用越来越广泛，像Linux操作系统一样，开放源代码数据库的出现也有其必然性。在当<a href="http://topic.ccw.com.cn/corpCenter/407.html" target="_blank"><font color="#0000cc"><b>Oracle</b></font></a>、<a href="http://topic.ccw.com.cn/corpCenter/462.html" target="_blank"><font color="#0000cc"><b>IBM</b></font></a>、Microsoft、<a href="http://topic.ccw.com.cn/corpCenter/47.html" target="_blank"><font color="#0000cc"><b>Sybase</b></font></a><table style="MARGIN: 10px 7px 3px 4px" cellspacing="0" cellpadding="0" align="left" border="0"><tbody><tr><td><script language="JavaScript1.1" src="http://ad.ccw.com.cn/adshow.asp?positionID=30&amp;js=1&amp;innerJs=1"></script></td></tr></tbody></table>等几大数据库厂商在数据库领域处于垄断地位的时候，出现了以MySQL、PostgreSQL为代表的开放源代码的数据库系统，推动了开源软件事业的发展。开源数据库系统并不是一个新事物，如Postgres（PostgreSQL的前身）已经有20年的发展历史了，而著名的MySQL今年4月刚刚度过了其10周年纪念活动。 </font>
		</p>
		<p>
				<font face="Verdana">1、MYSQL </font>
		</p>
		<p>
				<font face="Verdana">    MysQL是瑞典的T.c.X公司负责开发和维护的，它是一个真正的多用户、多线程SQL数据库服务器。MysQL是以一个客户机／服务器结构实现其功能的，它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL是一种标准化的语言，它使得存储、更新和存取信息更容易。MySQL主要特点是快速、健壮和易用。MySQL的官方发音是“My Ess Que Ell”(不是MY-SEQUEL)。目前MySQL的最新版本是5.0，MySQL的网址是：http://www.mysql.com，MySQL的标志是一个小海豚。见图－1。</font>
		</p>
		<font face="Verdana">
				<p>
						<img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511285201135752024728.jpg" border="0" />
						<br />               图－1 Mysql 标志</p>
				<p>MySQL的技术特点：</p>
				<p>1． 它使用的核心线程是完全多线程，支持多处理器。 <br />     2． 有多种列类型：1、2、3、4、和8字节长度自有符号／无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。 <br />     3． 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速，通常在查询初始化后不该有任何内存分配。没有内存漏洞。 <br />     4． 全面支持SQL的GROUP BY和ORDER BY子句，支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。 <br />     5． 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。 <br />     6． 所有列都有缺省值。你可以用INSERT插入一个表列的子集，那些没用明确给定值的列设置为他们的决省值。 <br />     7． MySQL可以工作在不同的平台上。支持C、C＋＋、Java、Perl、P<a href="http://topic.ccw.com.cn/corpCenter/68.html" target="_blank"><font color="#0000cc"><b>HP</b></font></a>、Python和TCL API。 </p>
				<p>    MaxDB是2003年<a href="http://topic.ccw.com.cn/corpCenter/284.html" target="_blank"><font color="#0000cc"><b>SAP</b></font></a>公司和MySQL AB公司合作之后SAP DB新的名称。MaxDB是一款重量级的、获得SAP R/3认证，适宜于联机事务处理和联机分析处理等多种业务类型的高可用性、高可靠性和极具伸缩性的数据库，支持大容量的用户和并发业务操作，采用多线程多进程的服务器设计，支持多处理器的应用，并通过集群和热部署提供高可靠性，支持TB级的海量数据，支持企业级的数据同步和复制等复杂应用。</p>
				<p>
						<br />2. PostgreSQL</p>
				<p>PostgreSQL是一种运行在Unix和Linux操作系统(在NT平台借助Cygnus也可以运行)平台上的免费的开放源码的关系数据库。最早是由美国加州大学伯克利分校开发的，开始只是作为一个演示系统发表，但是随着时间的推移，逐步分发，得到很多实际的应用，才逐步流行起来。PostgreSQ的网址是http://www.postgresql.org/，最新版本是2005年10月4日发布的8.0.4。PostgreSQL的官方发音是：Post-gres-Q-L。 PostgreSQ的标志是一个大象，见图－2。</p>
				<p>                 <img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511282861135752080041.jpg" border="0" /><br />                         图4 PostgreSQL 标志</p>
				<p>PostgreSQL的技术特点：</p>
				<p>1. 支持SQL。作为关系数据库，它支持SQL89标准也支持部分SQL92大部分功能。 </p>
				<p>2. 有丰富的数据类型。许多数据类型是一些商业数据库都没有提供的。 </p>
				<p>3. 面向对象。它包含了一些面向对象的技术，如继承和类。 </p>
				<p>4. 支持大数据库，它不同于一般的桌面数据库，能够支持几乎不受限制大小的数据库，而且性能稳定。 </p>
				<p>5. 方便集成web，提供一些接口方便 PHP，Perl等语言操作数据库。 </p>
				<p>6. 事务处理。相对一些其他免费数据库如MySQL，他提供了事务处理，可以满足一些商业领域的数据需要。 </p>
				<p>7. PostgreSQL运行速度明显低于MySQL。因为MySQL使用了线程，而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。</p>
				<p>3. Firebird</p>
				<p>2000年7月，Borland（即现在的Inprise）公司公布了其数据库产品Interbase的源代码。Firebird数据库就是从该数据库中派生出来的。当时，Interbase是与客户/服务器版本的Delphi产品捆绑在一些销售的。现在，Interbase已经变成了一只开放源码中的“火鸟”。 Firebird 网址是http://firebird.sourceforge.net/ ，最新版本是2005年8月5日发布的1.5.3。的标志是一只“火鸟”，见图－3。</p>
				<p>                     <img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511288991135752189416.jpg" border="0" /><br />                         图－3 Firebird 标志</p>
				<p>Firebird的技术特点</p>
				<p>Firebird相对MySQL和PostgreSQL来说比较小，其RPM版本只有3.0MB。这也使其可以称得上是理想的“嵌入式数据库”，可用于与其它应用程序服务器和应用程序捆绑。Firebird具有大部分成熟数据库所具有的功能，比如支持存储过程、SQL兼容等。如果用户有使用DB2或PostgreSQL的经验，就会发现Firebird与它们的语法非常相似，数据类型和数据处理方式也很类似。 Firebird的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据，但又不想花太多时间来调整数据性能的开发人员很适用。实际上在很多情况下，我们并不需要存储程序或复杂的表之间的关联。这时会发现Firebird在大小和功能之间找到了一个理想的平衡点。</p>
				<p>现在有两个版本的Firebird服务器软件可供下载，分别是Firebird Super Server和Firebird Classic Server。简单来说，二者的区别在于设计的方法不同。Super Server使用线程同时为多个客户连接提供服务，而Classic Server使用的则是Interbase的方法，采用为每个连接提供一个独立服务器进程的方式。如果想对二者的区别有更多的了解，可查看http://www.ibphoenix.com/main.nfs?a=ibphoenix&amp;page=ibp_ss_vs_classic。对于“嵌入式数据库”的用户，这两个版本之间没有太大的区别。从理论上讲，如果应用程序的用户很多，那么Super Server将是一个较好的选择。</p>
				<p>4. mSQL </p>
				<p>   mSQL(mini SQL)是一个单用户数据库管理系统，个人使用免费，商业使用收费。由于它的短小精悍，使其开发的应用系统特别受到互联网用户青睐。mSQL(mini SQL)是一种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,但在一些网络数据库应用中是足够了。由于mSQL较简单，在运行简单的SQL语句时速度比MySQL略快，而MySQL在线程和索引上下了功夫,运行复杂的SQL语句时比mSQL,PostgreSQL等都要快一些。MSQL的网址是：http://www.hughes.com.au  ，最新版本是2005年5月8日发布的3.7。MSQL的标志是一个鹿。见图－2。 </p>
				<p>
						<img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511284691135752227900.jpg" border="0" />
						<br />图4 mSQL 标志</p>
				<p>
						<br />mSQL的技术特点：<br />    安全性方面,mSQL通过ACL文件设定各主机上各用户的访问权限,缺省是 全部可读/写。mSQL缺乏 ANSI SQL 的大多数特征，它仅仅实现了一个最最少的API，没有事务和参考完整性。mSQL与Lite（一种类似C的脚本语言，与分发一起发行）紧密结合，可以得到一个称为 W3-mSQL的一个网站集成包，它是JDBC、ODBC、Perl和PHP API。</p>
				<p>        嵌入式数据库 </p>
				<p>嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中，消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的，在运行时，它们需要较少的内存。它们是使用精简代码编写的，对于嵌入式设备，其速度更快，效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL 来轻松管理应用程序数据，而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式，这样可以启用其中一个并运行一个快照。</p>
				<p>5. Berkeley DB</p>
				<p>像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流，但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器，而且还可以简化数据库应用程序的设计。Berkeley DB正是基于这样的思想提出来的。官方网址是：http://www.sleepy<a href="http://topic.ccw.com.cn/corpCenter/249.html" target="_blank"><font color="#0000cc"><b>ca</b></font></a>t.com/ ，最新版本是2005年8月5日发布的4.3。的标志是一只“猫”，见图－4。</p>
				<p>
						<img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511284331135752266385.jpg" border="0" />
				</p>
				<p>        图5 Berkeley DB 标志</p>
				<p>的技术特点：</p>
				<p>　　Berkeley DB是一个开放源代码的内嵌式数据库管理系统，能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。与常用的数据库管理系统（如MySQL和Oracle等）有所不同，在Berkeley DB中并没有数据库服务器的概念。应用程序不需要事先同数据库服务建立起网络连接，而是通过内嵌在程序中的Berkeley DB函数库来完成对数据的保存、查询、修改和删除等操作。 </p>
				<p>　　Berkeley DB为许多编程语言提供了实用的API接口，包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。这样无论是系统中的多个进程，或者是相同进程中的多个线程，都可以在同一时间调用访问数据库的函数。而底层的数据加锁、事务日志和存储管理等都在Berkeley DB函数库中实现。它们对应用程序来讲是完全透明的。俗话说：“麻雀虽小五脏俱全。”Berkeley DB函数库本身虽然只有300KB左右，但却能够用来管理多达256TB的数据，并且在许多方面的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并发操作来说，Berkeley DB能够很轻松地应付几千个用户同时访问同一个数据库的情况。此外，如果想在资源受限的嵌入式系统上进行数据库管理，Berkeley DB可能就是惟一正确的选择了。 </p>
				<p>　　Berkeley DB作为一种嵌入式数据库系统在许多方面有着独特的优势。首先，由于其应用程序和数据库管理系统运行在相同的进程空间当中，进行数据操作时可以避免繁琐的进程间通信，因此耗费在通信上的开销自然也就降低到了极低程度。其次，Berkeley DB使用简单的函数调用接口来完成所有的数据库操作，而不是在数据库系统中经常用到的SQL语言。这样就避免了对结构化查询语言进行解析和处理所需的开销。 </p>
				<p>6. SQLite</p>
				<p>SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的，不具有外部依赖性。它是作为 PHP V4.3 中的一个选项引入的，构建在 PHP V5 中。SQLite 支持多数 SQL92 标准，可以在所有主要的操作系统上运行，并且支持大多数计算机语言。SQLite 还非常健壮。其创建者保守地估计 SQLite 可以处理每天负担多达 100,00 次点击率的 Web 站点，并且 SQLite 有时候可以处理 10 倍于上述数字的负载。SQLite 的网址是，最新版本是2005年9月24日发布的3.2.7 。SQLite的标志是一只羽毛，见图－5。</p>
				<p>
						<img src="http://imgs.ccw.com.cn/resources/2005_11/2005_11_28/200511282711135752302541.jpg" border="0" />
						<br />图6 SQLite标志</p>
				<p>SQLite的技术特点：</p>
				<p>SQLite 对 SQL92 标准的支持包括索引、限制、触发和查看。SQLite 不支持外键限制，但支持原子的、一致的、独立和持久 (ACID) 的事务（后面会提供有关 ACID 的更多信息）。这意味着事务是原子的，因为它们要么完全执行，要么根本不执行。事务也是一致的，因为在不一致的状态中，该数据库从未被保留。事务还是独立的，所以，如果在同一时间在同一数据库上有两个执行操作的事务，那么这两个事务是互不干扰的。而且事务是持久性的，所以，该数据库能够在崩溃和断电时幸免于难，不会丢失数据或损坏。SQLite 通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据，但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前，必须获得独占锁定。在发出独占锁定后，其他的读或写操作将不会再发生。</p>
				<p>总结：</p>
				<p>目前的开源数据库还不能在功能和处理能力方面追上商业级产品，但价格的侵蚀力无法回避，开源数据库迅速增长的市场份额甚至让数据库领域的三巨头，Oracle、IBM、<a href="http://topic.ccw.com.cn/corpCenter/507.html" target="_blank"><font color="#0000cc"><b>微软</b></font></a>都感到忐忑不安。开源数据库的用户在增长，并正在被越来越多的用户所采用。在嵌入式数据库领域，开源数据库优势更加明显。分析师称开放源码正在迅速被数据库技术所采用。开放源码“从2000年被怀疑到2005年已经发展成为全球的主流技术”。低成本甚至免费的开源数据库时代即将来临。</p>
		</font><img src ="http://www.cnitblog.com/tilan/aggbug/19440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tilan/" target="_blank">Joinclass Inc</a> 2006-11-21 14:33 <a href="http://www.cnitblog.com/tilan/articles/19440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Heartbeat_2.0.3配置MySQL5.0.18为高可用集群</title><link>http://www.cnitblog.com/tilan/articles/19439.html</link><dc:creator>Joinclass Inc</dc:creator><author>Joinclass Inc</author><pubDate>Tue, 21 Nov 2006 06:26:00 GMT</pubDate><guid>http://www.cnitblog.com/tilan/articles/19439.html</guid><wfw:comment>http://www.cnitblog.com/tilan/comments/19439.html</wfw:comment><comments>http://www.cnitblog.com/tilan/articles/19439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tilan/comments/commentRss/19439.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tilan/services/trackbacks/19439.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 13px">测试环境为：rehdat linux 9.0<br />hostname       eth0                   eth1      <br />mysql5         192.168.0.50/24        10.4.66.35/24<br />mysql6         192.168.0.60/24        10.4.66.36/24<br /><br />heartbeat interface eth0, with crosscab<br />service ip 10.4.66.88/24, by eth1, default gateway 10.4.66.2<br /><br />共享存储采用NAS服务器，数据访问地址为10.4.66.251:/data<br />在服务器本地的挂在目录也是/data<br /><br />1. 安装MySQL5.0，安装到默认目录<br />清除准备安装MySQL的服务器上linux自带的mysql-server，<br />[root@c0101 bin]# rpm -e mysql-server<br />[root@c0101 bin]# rpm -qa|grep mysql<br />mysql-3.23.54a-11<br /><br />[root@c0101 bin]# userdel mysql<br />[root@c0101 bin]# mv /etc/my.cnf /etc/my.cnf.bak<br /><br />(1)首先在第一台服务器（HA系统的主节点服务器），<br />开始安装<br />1056  useradd mysql<br />1057  tar xzvf mysql-max-5.0.18-linux-i686-glibc23.tar.gz<br />1059  mv mysql-max-5.0.18-linux-i686-glibc23 /usr/local/mysql<br />1060  cd /usr/local/mysql<br />1088  chown -R root .<br />1089  chown -R mysql ./data/<br />1090  chgrp -R mysql .<br /><br />设置数据路径，把数据库数据文件放在共享的NFS目录下(NAS服务器),<br />PID和innioDB文件要放到服务器本地目录上，才能正常启动、停止服务：<br />1125  vi /etc/my.cnf<br />[mysqld]<br />#Where to install a database data<br />datadir=/data/mysqldata<br /><br />#Where to install a innoDB engine<br />innodb_data_home_dir = /usr/local/mysql/data<br />innodb_log_group_home_dir= /usr/local/mysql/data<br />innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend<br /><br />1106  cp ./support-files/mysql.server /etc/rc.d/init.d/<br />vi /etc/rc.d/init.d/mysql.server<br />编译第222开始的相关的两行，把PID文件放在服务器本地目录上：<br />pid_file=/usr/local/mysql/data/mysqlmanager-`/bin/hostname`.pid<br />server_pid_file=/usr/local/mysql/data/`/bin/hostname`.pid<br /><br />安装MySQL的基本数据库：<br />1123  mount 10.4.66.251:/data /data<br />1124  mkdir /data/mysqldata<br />1127  ./scripts/mysql_install_db --user=mysql<br />1145  chown -R mysql.mysql /data/mysqldata/<br /><br />如果正常的话,可以看到mysql正常启动了；<br /><br />1146  /etc/rc.d/init.d/mysql.server  start<br />1146  /etc/rc.d/init.d/mysql.server  stop<br /><br />配置HA高可用，不要设置NFS挂载和mysql服务在启动服务器时自动运行；<br /><br /><br />(2)然后在第二台服务器（HA系统的备份节点服务器），<br /><br />1090  tar xzvf mysql-max-5.0.18-linux-i686-glibc23.tar.gz<br />1092  mv mysql-max-5.0.18-linux-i686-glibc23 /usr/local/mysql<br />1093  cd /usr/local/mysql/<br />1095  chown -R root .<br />1096  chown -R mysql ./data/<br />1097  chgrp -R mysql .<br />  <br />设置数据路径，把数据库数据文件放在共享的NFS目录下(NAS服务器),<br />PID和innioDB文件要放到服务器本地目录上，才能正常启动、停止服务：<br />1125  vi /etc/my.cnf<br />[mysqld]<br />#Where to install a database data<br />datadir=/data/mysqldata<br /><br />#Where to install a innoDB engine<br />innodb_data_home_dir = /usr/local/mysql/data<br />innodb_log_group_home_dir= /usr/local/mysql/data<br />innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend<br /><br />1106  cp ./support-files/mysql.server /etc/rc.d/init.d/<br />vi /etc/rc.d/init.d/mysql.server<br />编译第222开始的相关的两行，把PID文件放在服务器本地目录上：<br />pid_file=/usr/local/mysql/data/mysqlmanager-`/bin/hostname`.pid<br />server_pid_file=/usr/local/mysql/data/`/bin/hostname`.pid<br /><br />在NFS目录/data/下，已经有了基本数据库，所以只需要<br />设置一下，就可以启动了，<br />1123  mount 10.4.66.251:/data /data<br />1149  /etc/rc.d/init.d/mysql.server start<br /><br />如果首次启动失败，察看一下日志，<br />使用ps -A命令查看进程，杀掉失败的进程，应该可以正常启动的；<br />killall -9 mysqld_safe<br />killall -9 mysqld<br /><br />(3)保证在两台服务器上，都可以正常启动、停止MySQL服务,<br />由于数据共享的原因，要注意保证，同时只有1台服务器启动MySQL服务<br />/etc/rc.d/init.d/mysql.server start<br />/etc/rc.d/init.d/mysql.server stop<br /><br />2.安装Heartbeat HA，安装到默认目录，<br />两台服务器安装方法相同：<br /><br />(1)安装libnet，这是编译Heartbeat HA需要的:<br />1046  tar xzvf libnet.tar.gz<br />1047  cd libnet<br />1048  ls<br />1049  ./configure<br />1051  make<br />1052  make install<br /><br />(2)编译安装Heartbeat HA<br />1019  groupadd haclient<br />1020  useradd hacluster -g haclient<br />1058  tar xzvf heartbeat-2.0.3.tar.gz<br />1059  ls<br />1060  cd heartbeat-2.0.3<br />1061  ls<br />1062  ./ConfigureMe configure<br />1063  make<br />1064  make install<br /><br />3. 编辑Heartbeat HA的三个配置文件,配置MySQL的HA服务<br />两台服务器配置方法相同：<br /><br />1067  cd /etc/ha.d<br />1068  cp /root/heartbeat-2.0.3/doc/ha.cf .<br />1069  vi ha.cf<br />logfile /var/log/ha-log # Log file<br />keepalive 2             # Heartbeat interval<br />deadtime 30             # How long to say the server's death<br />warntime 10<br /><br />udpport 694             # Heartbeat port<br />bcast   eth0            # Linux Heartbeat interface<br /><br />auto_failback on        # How to do when the failure server comes back<br />node mysql5             # How many servers in the HA system<br />node mysql6<br />ping 10.4.66.2          #ping a robust server to ensure the server's health;<br />                         #here is the default gateway<br />respawn hacluster /usr/lib/heartbeat/ipfail<br /><br />配置心跳的加密，本次测试因为采用交叉电缆，所以采用最简单的crc方式：<br />1076  cp /root/heartbeat-2.0.3/doc/authkeys .<br />1077  vi authkeys<br />auth 1<br />1 crc<br /><br />1078  chmod 600 authkeys<br /><br />1073  cp /root/heartbeat-2.0.3/doc/haresources .<br /><br />配置资源，本次测试mysql服务的迁移，配置资源文件是关键<br />1074  vi haresources<br />mysql5 IPaddr::10.4.66.88/24/eth1 Filesystem::10.4.66.251:/data::/data::nfs mysql.server<br />这一行配置了3个资源，第一个是IP地址，第二个是NFS共享数据，<br />第三个是mysql.server服务，文件在/etc/rc.d/init.d/目录，<br />可以使用mysql.server start或stop来启动或停止服务。<br /><br />4.设置Heartbeat HA服务自动启动，<br />heartbeat会自动把/data目录挂载，会自动启动MySQL Server；<br />配置HA高可用，不要设置NFS挂载和mysql服务在启动服务器时自动运行,<br />也就是说，把与HA相关资源交给Heartbeat HA去自动管理，<br />cd /etc/rc.d/rc0.d ; ln -s ../init.d/heartbeat K05heartbeat<br />cd /etc/rc.d/rc3.d ; ln -s ../init.d/heartbeat S75heartbeat<br />cd /etc/rc.d/rc5.d ; ln -s ../init.d/heartbeat S75heartbeat<br />cd /etc/rc.d/rc6.d ; ln -s ../init.d/heartbeat K05heartbeat<br /><br />可以拔掉主节点服务器的网线，看看有什么情况发生，测试是否正常？<br />然后再把网线插回去，看看HA服务是否运行，MySQL服务能否自动切换回来？<br /></span><img src ="http://www.cnitblog.com/tilan/aggbug/19439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tilan/" target="_blank">Joinclass Inc</a> 2006-11-21 14:26 <a href="http://www.cnitblog.com/tilan/articles/19439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>