# it-e-32 Introduction to DBMS

A database management system (DBMS) is an important type of programming system, used
today on the biggest and the smallest computers. [1]As for other major forms of system software,
such as compilers and operating systems, a well-understood set of principles for database
management systems has developed over the years, and these concepts are useful both for
understanding how to use these systems effectively and for designing and implementing DBMS's.
DBMS is a collection of programs that enables you to store, modify, and extract information
from a database. There are many different types of DBMS's, ranging from small systems that run
on personal computers to huge systems that run on mainframes. The following are the location of
database between application programs and end-users.

There are two qualities that distinguish database management systems from other sorts of
programming systems.
1) The ability to manage persistent data, and
2) The ability to access large amounts of data efficiently.

Point 1) merely states that there is a database which exists permanently; the contents of this
database is the data that a DBMS accesses and manages.

Point 2) distinguishes a DBMS from a
file system, which also manages persistent data. A DBMS's capabilities are needed most when
the amount of data is very large, because for small amounts of data, simple access techniques,
such as linear scans of the data, are usually adequate.
[2]While we regard the above two properties of a DBMS as fundamental, there are a number
of other capabilities that are almost universally found in commercial DBMS's. These are:
Support for at least one data model, or mathematical abstraction through which the user can
view the data.

Support for certain high-level languages that allow the user to define the structure of data,
access data, and manipulate data.
Transaction management, the capability to provide correct, concurrent access to the database
by many users at once.
Access control, the ability to limit access to data by unauthorized users, and the ability to
check the validity of data.
Resiliency, the ability to recover from system failures without losing data.
Data Models Each DBMS provides at least one abstract model of data that allows the user
to see information not as raw bits, but in more understandable terms. In fact, it is usually possible
to see data at several levels of abstraction. At a relatively low level, a DBMS commonly allows
us to visualize data as composed of files.
Efficient File Access The ability to store a file is not remarkable: the file system associated
with any operating system does that. The capability of a DBMS is seen when we access the data of
a file. For example, suppose we wish to find the manager of employee "Clark Kent". If the
company has thousands of employees, It is very expensive to search the entire file to find the one
with NAME="Clark Kent". A DBMS helps us to set up "index files," or "indices," that allow us to
access the record for "Clark Kent" in essentially one stroke no matter how large the file is. Likewise,
insertion of new records or deletion of old ones can be accomplished in time that is small and
essentially constant, independent of the file’s length. Another thing a DBMS helps us do is navigate
among files, that is, to combine values in two or more files to obtain the information we want.
Query Languages To make access to files easier, a DBMS provides a query language, or
data manipulation language, to express operations on files. Query languages differ in the level of
detail they require of the user, with systems based on the relational data model generally
requiring less detail than languages based on other models.

Transaction Management

Another important capability of a DBMS is the ability to
manage simultaneously large numbers of transactions, which are procedures operating on the
database. Some databases are so large that they can only be useful if they are operated upon
simultaneously by many computers: often these computers are dispersed around the country or
the world. The database systems used by banks, accessed almost instantaneously by hundreds or
thousands of automated teller machines (ATM), as well as by an equal or greater number of
employees in the bank branches, is typical of this sort of database. An airline reservation system
is another good example.
Sometimes, two accesses do not interfere with each other. For example, any number of
transactions can be reading your bank balance at the same time, without any inconsistency. [3]But
if you are in the bank depositing your salary check at the exact instant your spouse is extracting
money from an automatic teller, the result of the two transactions occurring simultaneously and
without coordination is unpredictable. Thus, transactions that modify a data item must “lock out”
other transactions trying to read or write that item at the same time. A DBMS must therefore
provide some form of concurrency control to prevent uncoordinated access to the same data item

by more than one transaction.
Even more complex problems occur when the database is distributed over many different
computer systems, perhaps with duplication of data to allow both faster local access and to
protect against the destruction of data if one computer crashes.
Security of Data A DBMS must not only protect against loss of data when crashes occur,
as we just mentioned, but it must prevent unauthorized access. For example, only users with a
certain clearance should have access to the salary field of an employee file, and the DBMS must
be able associate with the various users their privileges to see files, fields within files, or other
subsets of the data in the database. Thus a DBMS must maintain a table telling for each user
known to it, what access privileges the user has for each object. For example, one user may be
allowed to read a file, but not to insert or delete data; another may not be allowed to see the file at
all, while a third may be allowed to read or modify the file at will.

DBMS Types
Designers developed three different types of database structures: hierarchical, network, and
relational. Hierarchical and network were first developed but relational has become dominant.
While the relational design is dominant, the older databases have not been dropped. Companies
that installed a hierarchical system such as IMS in the 1970s will be using and maintaining these
databases for years to come even though new development is being done on relational systems.
These older systems are often referred to as legacy systems.

1, teller  ['telə]
n. （美）出纳员；讲述者；讲故事者；计票员

2, reservation  [,rezə'veiʃən]
n. 预约，预订；保留
3, at will

Continue reading it-e-32 Introduction to DBMS

# word 标题自动编号

2007开始/段落 第三个按钮

http://blog.sina.com.cn/s/blog_6238dcdb0100qz8j.html

# 业务用例与系统用例的区别

• 一个业务用例描述的是业务过程——而不是软件系统过程。
• 一个业务用例为涉众创造价值。这些涉众要么是业务参与者要么是业务工作者。
• 一个业务用例可以超越组织的边界。有些构架师对于这一点有非常严密的态度。许多业务用例确实超越来组织的边界，但是有些业务用例仅仅关注于一个组织。

• 1．业务用例就是要完成的业务，系统用例是系统要做的事情，两者的域不同。
• 2．业务建模主要描述了该项目涉及的所有业务，需求模型主要是描述为了满足业务需求系统要做什么，因此，需求模型与业务模型相比，它描述的只是业务模型的一个子集。
• 3．比方说我们设计一个自动提款机系统，它可以满足用户的取款、改密、查询等需求，那么这些需求就是业务用例；但是用户又分为借记卡用户和信用卡用户，那么根据业务规则，不同的卡用户的取款、改密、查询的过程是不一样的，所以系统为了满足这种业务需求会包含到两个子用例里实现，这种子用例就是系统用例。也就是说系统用例就是系统为了满足这种业务需求要做什么。

http://www.uml.org.cn/requirementproject/200707024.asp

http://gaojiewyh.iteye.com/blog/408363

# it-e-31 Steganography and Honeytokens

Steganography is a method of embedding electronic messages into a media file (for example, an image or audio file) by altering nonessential lines of code; the changes are imperceptible. The message remains undetected until unencrypted. Honeytokens is any kind of tantalizing false data, including phony patient records at a hospital, lists of invalid social security numbersor even simply a word processing file named "HR-salaries," that's stored in a restricted part of the network. If anyone tries to access the files the security team is alerted to the trespassing before the intruder can do any real damage.

1, imperceptible  [,impə'septəbl]
a. 不能感知的,不知不觉的,微细的

2, steganography  [,stegə'nɔgrəfi]
n. 速记式加密
3, tantalizing  ['tæntəlaiziŋ]
a. 诱人的
4, phony  ['fəuni]
a. 假的,伪造的
5, trespassing
n. 擅自进入
v. 侵入；犯罪（trespass的ing形式）
6, intruder  [in'tru:də]
n. 侵入者,干扰者,妨碍者

Continue reading it-e-31 Steganography and Honeytokens

# ServiceMix环境配置

ServiceMix有三种部署方式：单独程序方式，servlet方式，Geronimo and JBoss.整合方式。这里主要介绍servlet方式，因为这样可以整合到任何servlet容器中。

Servlet部署需要在web.xml中配置spring加载文件，这种spring是和xbean整合的自定义配置文件。

Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>ServiceMix Web Application</display-name>

<description>Deploys ServiceMix inside a Web Application</description>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/jmx.xml /WEB-INF/core.xml /WEB-INF/activemq.xml</param-value>

</context-param>

Spring配置文件

<context-param>

<param-name>contextClass</param-name>

<param-value>org.apache.xbean.spring.context.XmlWebApplicationContext</param-value>

</context-param>

<listener>

</listener>

Spring 监听器

<!-- servlet mappings -->

<!-- the main JMX servlet -->

<servlet>

<servlet-name>JMXServlet</servlet-name>

<servlet-class>org.apache.servicemix.web.jmx.JMXServlet</servlet-class>

</servlet>

<!--  the HTTP binding servlet -->

<!-- START SNIPPET: servicemix-http-->

<servlet>

<servlet-name>HttpManagedServlet</servlet-name>

<servlet-class>

org.apache.servicemix.http.HttpManagedServlet

</servlet-class>

</servlet>

http bean组件(BC)servlet

<servlet-mapping>

<servlet-name>HttpManagedServlet</servlet-name>

<url-pattern>/jbi/*</url-pattern>

</servlet-mapping>

<!-- END SNIPPET: httpBinding -->

<servlet-mapping>

<servlet-name>JMXServlet</servlet-name>

<url-pattern>/jmx/*</url-pattern>

</servlet-mapping>

</web-app>

demo主要功能的配置在core.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:sm="http://servicemix.apache.org/config/1.0"

xmlns:http="http://servicemix.apache.org/http/1.0"

xmlns:my="http://servicemix.apache.org/demo/"

xmlns:foo="http://servicemix.apache.org/demo/">

<!-- the JBI container -->

<sm:container id="jbi"

rootDir="#rootDir"

useMBeanServer="true"

createMBeanServer="false"

MBeanServer="#jmxServer"

installationDirPath="#installDir"

deploymentDirPath="#deployDir"

monitorInstallationDirectory="true"

transactionManager="#transactionManager"

depends-on="broker">

<sm:activationSpecs>

<!--  an example HTTP binding for use by the SpringBindingServlet  -->

<!-- START SNIPPET: http -->

<sm:activationSpec componentName="servicemix-http" service="foo:httpBinding" destinationService="foo:echo">

<sm:component>

<http:component>

<http:configuration managed="true" />

<http:endpoints>

<http:endpoint service="foo:httpBinding"

endpoint="endpoint"

targetService="foo:echo"

role="consumer"

locationURI="http://localhost/exampleUri/

"

defaultMep="http://www.w3.org/2004/08/wsdl/in-out

" />

</http:endpoints>

</http:component>

</sm:component>

</sm:activationSpec>

<!-- END SNIPPET: http -->

<!--  a simple Echo service to test InOut message exchanges using HTTP-->

<sm:activationSpec componentName="echo" service="foo:echo" >

<sm:component>

<bean class="org.apache.servicemix.components.HelloWorldComponent">

<property name="property" value="name"/>

</bean>

</sm:component>

</sm:activationSpec>

SE foo:echo,这是一个简单的helloworld

</beans>

# 【转】几种常见的网络存储技术的比较研究

NAS实际是一种带有瘦服务器的存储设备。这个瘦服务器实际是一台网络文件服务器。NAS设备直接连接到TCP/IP网络上，网络服务器通过TCP/IP网络存取管理数据。NAS作为一种瘦服务器系统，易于安装和部署，管理使用也很方便。同时由于可以允许客户机不通过服务器直接在NAS中存取数据，因此对服务器来说可以减少系统开销。NAS为异构平台使用统一存储系统提供了解决方案。由于NAS只需要在一个基本的磁盘阵列柜外增加一套瘦服务器系统，对硬件要求很低，软件成本也不高，甚至可以使用免费的LINUX解决方案，成本只比直接附加存储略高。NAS存在的主要问题是：(1)由于存储数据通过普通数据网络传输，因此易受网络上其它流量的影响。当网络上有其它大数据流量时会严重影响系统性能;(2)由于存储数据通过普通数据网络传输，因此容易产生数据泄漏等安全问题;（3）存储只能以文件方式访问，而不能像普通文件系统一样直接访问物理数据块，因此会在某些情况下严重影响系统效率，比如大型数据库就不能使用NAS。

SAN实际是一种专门为存储建立的独立于TCP/IP网络之外的专用网络。目前一般的SAN提供2Gb/S到4Gb/S的传输数率，同时SAN网络独立于数据网络存在，因此存取速度很快，另外SAN一般采用高端的RAID阵列，使SAN的性能在几种专业存储方案中傲视群雄。SAN由于其基础是一个专用网络，因此扩展性很强，不管是在一个SAN系统中增加一定的存储空间还是增加几台使用存储空间的服务器都非常方便。通过SAN接口的磁带机，SAN系统可以方便高效的实现数据的集中备份。SAN作为一种新兴的存储方式，是未来存储技术的发展方向，但是，它也存在一些缺点：（1）价格昂贵。不论是SAN阵列柜还是SAN必须的光纤通道交换机价格都是十分昂贵的，就连服务器上使用的光通道卡的价格也是不容易被小型商业企业所接受的;（2）需要单独建立光纤网络，异地扩展比较困难；

通过以上分析，下表总结了这四种方式的主要区别。

# 【转】回车键触发表单提交的问题

### 回车键触发表单提交的问题

1、如果表单里有一个type=”submit”的按钮，回车键生效。
2、如果表单里只有一个type=”text”的input，不管按钮是什么type，回车键生效。
3、如果按钮不是用input，而是用button，并且没有加type，IE下默认为type=button，FF默认为type=submit。
5、type=”image”的input，效果等同于type=”submit”，不知道为什么会设计这样一种type，不推荐使用，应该用CSS添加背景图合适些。

# C/S与B/S架构

1、系统的性能

2、系统的开发
C/S 结构是建立在中间件产品基础之上的，要求应用开发者自己去处理事务管理、消息队列、数据的复制和同步、通信安全等系统级的问题。这对应用开发者提出了较高的要求，而且迫使应用开发者投入很多精力来解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂。如果客户端是在不同的操作系统上，C/S结构的软件需要开发不同版本的客户端软件。但是，与B/S结构相比，C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发人员的掌握水平来看，C/S技术应是更成熟、更可靠的。
3、系统的升级维护
C/S系统的各部分模块中有一部分改变，就要关联到其它模块的变动，使系统升级成本比较大。B/S与C/S处理模式相比，则大大简化了客户端，只要客户端机器能上网就可以。对于B/S而言，开发、维护等几乎所有工作也都集中在服务器端，当企业对网络应用进行升级时，只需更新服务器端的软件就可以，这减轻了异地用户系统维护与升级的成本。如果客户端的软件系统升级比较频繁，那么B/S架构的产品优势明显——所有的升级操作只需要针对服务器进行，这对那些点多面广的应用是很有价值的，例如一些招聘网站就需要采用B/S模式，客户端分散，且应用简单，只需要进行简单的浏览和少量信息的录入。
4、C/S 模式的优点和缺点
★ C/S 模式的优点
● 由于客户端实现与服务器的直接相连，没有中间环节，因此响应速度快。

● C/S结构的管理信息系统具有较强的事务处理能力，能实现复杂的业务流程。
★ C/S 模式的缺点
● 需要专门的客户端安装程序，分布功能弱，针对点多面广且不具备网络条件的用户群体，不能够实现快速部署安装和配置。

5、B/S模式的优点和缺点
★ B/S 模式的优点

● 业务扩展简单方便，通过增加网页即可增加服务器功能。
● 维护简单方便，只需要改变网页，即可实现所有用户的同步更新。
● 开发简单，共享性强。
★ B/S 模式的缺点
● 个性化特点明显降低，无法实现具有个性化的功能要求。
● 操作是以鼠标为最基本的操作方式，无法满足快速操作的要求。
● 页面动态刷新，响应速度明显降低。
● 无法实现本地分页缓存显示，给数据库访问造成较大的压力。

c/s,b/s混用

# JAVA内存泄漏——内存泄漏原因和内存泄漏检测工具

[memory ] 10.109-10.235: GC 65536K->16788K (65536K), 126.000 ms

Figure 1. The JRockit Management Console

java.lang.OutOfMemoryError这个错都见过，这就是内存泄露的结果。

public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[—size]; //这里仍存在对pop出去对象的强引用，问题来了
}
/**
* Ensure space for at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}

public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}

unintentional object retentions 非故意对象闭留

# 在ie下，button 标记恐怕还存在几个不大不小的问题。

1. 在一个表单里，如果有一个以上"submit"类型的<button>标签存在，在表单被提交时，不管你点击哪个<button>，所有<button>的值都会被post/get。
2. <button>的缺省type属性被设置为"button"，但是在A级别浏览器下，应该设置为"submit"才对
3. 如果你用javascript去访问<button>的value属性，IE却返回了<button>的innerHTML属性，很让人恼火。 (可以使用"getAttributeNode"方法来避免.)

CODE:
1. <form>
2. <button type="submit" value="1" name="action-1">text 1</button>
3. <button type="submit" value="2" name="action-2">text 2</button>
4. </form>

Powered by Hydejack v6.6.1