GVKun编程网logo

NoSql对比分析(nosql数据库对比)

24

如果您想了解NoSql对比分析和nosql数据库对比的知识,那么本篇文章将是您的不二之选。我们将深入剖析NoSql对比分析的各个方面,并为您解答nosql数据库对比的疑在这篇文章中,我们将为您介绍No

如果您想了解NoSql对比分析nosql数据库对比的知识,那么本篇文章将是您的不二之选。我们将深入剖析NoSql对比分析的各个方面,并为您解答nosql数据库对比的疑在这篇文章中,我们将为您介绍NoSql对比分析的相关知识,同时也会详细的解释nosql数据库对比的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

NoSql对比分析(nosql数据库对比)

NoSql对比分析(nosql数据库对比)

博客:http://elf8848.iteye.com

传统“关系型数据库”在应付互联网WEB2.0应用已显示的力不从心,由其是超大规模和高并发的SNS类型的WEB2.0网站。

主要需要应对以下三方面难题:

1、对数据库高并发读写的要求。

2、对数据库高可扩展性和高可用性的要求。

3、对海量数据高效存储和访问的要求。

”关系型数据库“固有的特性确用处不大

1、对数据库事务一致性要求低。很多WEB应用不要求严格的数据库事务,有些对读一致性要求不高,更有些对写一致性也要求不高。

2、对数据库写实时性和读实时性要求低。如发送消息给订阅者,可以接受延迟。

3、对复杂SQL查询的要求低。如非常忌讳多张大表关联查询。

为了解决以上问题,”非关系型数据库“(Nosql -- not only sql)应运而生,再很短的时间内涌现出众多的Nosql产品。他们各有各的适用场景,你是否对这些特性有所了解?你是否在选型时一片茫然? 本文将解答你的疑惑,帮助你选择正确的Nosql产品,让你少走些弯路。

Nosql数据库分类:

1、key-value存储型--满足极高读写要求。

2、文档存储型--海量存储和访问的数据库。

3、列存储型--高可扩展性,可用性,面向分布式计算的数据库。

4、图存储型--适合存储关系

Nosql数据库根据数据的存储模型和特点分为很多种类。

类型

@H_301_56@

部分代表

@H_301_56@

特点

@H_301_56@

列存储

@H_301_56@

Hbase

Cassandra

Hypertable

@H_301_56@

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

@H_301_56@

文档存储

@H_301_56@

MongoDB

CouchDB

@H_301_56@

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

@H_301_56@

key-value存储

@H_301_56@

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

@H_301_56@

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

@H_301_56@

图存储

@H_301_56@

Neo4J

FlockDB

InfoGrid

@H_301_56@

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

@H_301_56@

对象存储

@H_301_56@

db4o

Versant

@H_301_56@

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

@H_301_56@

xml数据库

@H_301_56@

Berkeley DB XML

BaseX

@H_301_56@

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

@H_301_56@
来自: http://www.infoq.com/cn/news/2011/01/relation-db-nosql-db

不合理的性能比较:
以下数据来自网络,因不知道测试环境的情况,如数量大小,并发数量,硬件情况等,以下数据没有说服力,只供不能亲自测试时的参考。

Memcached 读写速度 1.6万/秒


Memcachedb 读写速度 8000/秒


Redis 读写 1万次/秒

MongoDB 读写 8000次/秒 (数据量达到50G后,是MysqL的10倍)(使用笔记本的5400转硬盘测试时 4000次写/s)

Oracle 插入 5000行/秒

MysqL(内存表)插入5000行/秒

MysqL 表 插入4000行/秒

sqlServer 插入2600行/秒

Cassandra (5000 OPS 每条数据1.5K,50%读,50%写,单节点)OPS =operations per second

Cassandra (2000 OPS 每条数据15K,50%读,50%写,单节点)OPS =operations per second

---------------------------------------------------------------------------------------------------------------
参考文档:
Nosql数据库探讨之一 - 为什么要用非关系数据库?
http://www.iteye.com/topic/524977
Nosql数据库笔谈
http://sebug.net/paper/databases/nosql/Nosql.html
对Cassandra的初体验
http://www.iteye.com/topic/784054
基于应用场景的Nosql选型与实践_李刚(奇艺)
http://wenku.it168.com/d_000096483.shtml
Nosql数据库选型,DBA该考虑什么
http://database.51cto.com/art/201107/274036.htm

8 种常用的 NoSQL 数据库系统对比分析

8 种常用的 NoSQL 数据库系统对比分析

Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章。

虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。

但是NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库。针对这种情况,这里对 Cassandra、Mongodb、CouchDB、Redis、 Riak、Membase、Neo4j 和 HBase 进行了比较:

(编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具 备庞大的水平扩 展性,而NoSQL致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。 参见NoSQL词条。)

1. CouchDB

所用语言: Erlang
特点:DB一致性,易于使用
使用许可: Apache
协议: HTTP/REST
双向数据复制,
持续进行或临时处理,
处理时带冲突检查,
因此,采用的是master-master复制(见编注2)
MVCC – 写操作不阻塞读操作
可保存文件之前的版本
Crash-only(可靠的)设计
需要不时地进行数据压缩
视图:嵌入式 映射/减少
格式化视图:列表显示
支持进行服务器端文档验证
支持认证
根据变化实时更新
支持附件处理
因此, CouchApps(独立的 js应用程序)
需要 jQuery程序库
 

最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

例如: CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。

(编注2:master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)

2. Redis

所用语言:C/C++
特点:运行异常快
使用许可: BSD
协议:类 Telnet
有硬盘存储支持的内存数据库,
但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)
Master-slave复制(见编注3)
虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。
INCR & co (适合计算极限值或统计数据)
支持 sets(同时也支持 union/diff/inter)
支持列表(同时也支持队列;阻塞式 pop操作)
支持哈希表(带有多个域的对象)
支持排序 sets(高得分表,适用于范围查询)
Redis支持事务
支持将数据设置成过期数据(类似快速缓冲区设计)
Pub/Sub允许用户实现消息机制


最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
例如:股票价格、数据分析、实时数据搜集、实时通讯。
(编注3:Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为 Master-slave复制,通常应用在需要提供高可用性的服务器集群。)

3. MongoDB

所用语言:C++
特点:保留了SQL一些友好的特性(查询,索引)。
使用许可: AGPL(发起者: Apache)
协议: Custom, binary( BSON)
Master/slave复制(支持自动错误恢复,使用 sets 复制)
内建分片机制
支持 javascript表达式查询
可在服务器端执行任意的 javascript函数
update-in-place支持比CouchDB更好
在数据存储时采用内存到文件映射
对性能的关注超过对功能的要求
建议最好打开日志功能(参数 –journal)
在32位操作系统上,数据库大小限制在约2.5Gb
空数据库大约占 192Mb
采用 GridFS存储大数据或元数据(不是真正的文件系统)
 
最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用 CouchDB但因为数据改变太频繁而占满内存的应用程序。
例如:你本打算采用 MySQL或 PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。

4. Riak

所用语言:Erlang和C,以及一些Javascript
特点:具备容错能力
使用许可: Apache
协议: HTTP/REST或者 custom binary
可调节的分发及复制(N, R, W)
用 JavaScript or Erlang在操作前或操作后进行验证和安全支持。
使用JavaScript或Erlang进行 Map/reduce
连接及连接遍历:可作为图形数据库使用
索引:输入元数据进行搜索(1.0版本即将支持)
大数据对象支持( Luwak)
提供“开源”和“企业”两个版本
全文本搜索,索引,通过 Riak搜索服务器查询( beta版)
支持Masterless多站点复制及商业许可的 SNMP监控
 

最佳应用场景:适用于想使用类似 Cassandra(类似Dynamo)数据库但无法处理 bloat及复杂性的情况。适用于你打算做多站点复制,但又需要对单个站点的扩展性,可用性及出错处理有要求的情况。
例如:销售数据搜集,工厂控制系统;对宕机时间有严格要求;可以作为易于更新的 web服务器使用。

5. Membase

所用语言: Erlang和C
特点:兼容 Memcache,但同时兼具持久化和支持集群
使用许可: Apache 2.0
协议:分布式缓存及扩展
非常快速(200k+/秒),通过键值索引数据
可持久化存储到硬盘
所有节点都是唯一的( master-master复制)
在内存中同样支持类似分布式缓存的缓存单元
写数据时通过去除重复数据来减少 IO
提供非常好的集群管理 web界面
更新软件时软无需停止数据库服务
支持连接池和多路复用的连接代理
 
最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序
例如:低延迟数据访问比如以广告为目标的应用,高并发的 web 应用比如网络游戏(例如 Zynga)

6. Neo4j

所用语言: Java
特点:基于关系的图形数据库
使用许可: GPL,其中一些特性使用 AGPL/商业许可
协议: HTTP/REST(或嵌入在 Java中)
可独立使用或嵌入到 Java应用程序
图形的节点和边都可以带有元数据
很好的自带web管理功能
使用多种算法支持路径搜索
使用键值和关系进行索引
为读操作进行优化
支持事务(用 Java api)
使用 Gremlin图形遍历语言
支持 Groovy脚本
支持在线备份,高级监控及高可靠性支持使用 AGPL/商业许可
 
最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别
例如:社会关系,公共交通网络,地图及网络拓谱

7. Cassandra

所用语言: Java
特点:对大型表格和 Dynamo支持得最好
使用许可: Apache
协议: Custom, binary (节约型)
可调节的分发及复制(N, R, W)
支持以某个范围的键值通过列查询
类似大表格的功能:列,某个特性的列集合
写操作比读操作更快
基于 Apache分布式平台尽可能地 Map/reduce
我承认对 Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为 Java的问题(配置,出现异常,等等)
 
最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用 Java编写(没有人因为选用 Apache的软件被解雇)
例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析

8. HBase

(配合 ghshephard使用)

所用语言: Java
特点:支持数十亿行X上百万列
使用许可: Apache
协议:HTTP/REST (支持 Thrift,见编注4)
在 BigTable之后建模
采用分布式架构 Map/reduce
对实时查询进行优化
高性能 Thrift网关
通过在server端扫描及过滤实现对查询操作预判
支持 XML, Protobuf, 和binary的HTTP
Cascading, hive, and pig source and sink modules
基于 Jruby( JIRB)的shell
对配置改变和较小的升级都会重新回滚
不会出现单点故障
堪比MySQL的随机访问性能
 
最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

例如: Facebook消息数据库(更多通用的用例即将出现)
编注4:Thrift 是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源。
当然,所有的系统都不只具有上面列出的这些特性。这里我仅仅根据自己的观点列出一些我认为的重要特性。与此同时,技术进步是飞速的,所以上述的内容肯定需要不断更新。我会尽我所能地更新这个列表。

您可能感兴趣的文章:
  • Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法(总结篇)
  • NoSQL 数据库你应该了解的 10 件事
  • NoSQL开篇之为什么要使用NoSQL
  • 深入解析NoSQL数据库的分布式算法(图文详解)
  • NoSQL数据库的分布式算法详解
  • SQL和NoSQL之间的区别总结

DB2,PostgreSQL,MySQL对比

DB2,PostgreSQL,MySQL对比

体系结构概述和对比

DB2MysqL Postgresql之间有许多差异。我们先看看这三种数据库服务器在基本体系结构方面的一些差异和相似之处。

  • 体系结构模型

  • MysqL数据库服务器使用一种基于专用服务器线程的体系结构。

  • Postgresql DB2 使用一种专用服务器进程模型体系结构。

  • 存储引擎

  • MysqL数据库使用可插入的存储引擎体系结构。

  • DB2 使用专用的存储引擎。

  • 表空间模型

  • MysqL 对于InnoDB NDB存储引擎使用表空间。

  • Postgresql表空间可以跨越多个数据库。

  • DB2 表空间特定于一个数据库。

  • 模式支持

  • DB2 具有真正的模式支持。

  • MysqL 不具有真正的模式支持。MysqL中的模式可以被看作 MysqL数据库。

  • 数据库对象名是否是大小写敏感的

  • Linux 上的MysqL Postgresql使用大小写敏感的数据库名、表名和列名。

  • 所有平台上的 DB2都使用大小写不敏感的名称。但是,DB2只按照大写存储名称。

  • 数组列

  • DB2不支持数组列。

  • Postgresql 支持数组列。

  • 身份验证

  • DB2使用各种外部安全机制来执行身份验证,比如操作系统、PAMKerberosActiveDirectoryLDAP等等。它还允许插入第三方安全模块。

  • Postgresql按照许多不同方式之一执行身份验证。它可以使用数据库用户/角色、操作系统、Kerberos等等,这取决于主机配置文件(pg_hba.conf)中的设置。

  • MysqL在数据库级实现身份验证并对密码进行加密。

  • 实例体系结构

  • DB2实例管理不同的数据库,在同一台机器上可以有许多DB2 实例。

  • Postgresql的实例概念与数据库集群相似。

  • MysqL实例与 DB2 数据库相似。

Postgresql数据库可以几乎每周都进行特性修改,但是DB2中的特性实现和修改要经过非常仔细的计划,这是因为有众多的业务依赖于使用DB2 产品。请注意,在本文中我们使用MysqL 5.1Postgresql8.0.3 DB2 V8.2进行比较,所以在阅读本文时请考虑到这一点。

1、图2 和 图3 MysqLPostgresqlDB2的体系结构图。我们在阅读一些文档之后竭尽我们的能力绘制出Postgresql的体系结构图。如果您发现不符合实际情况的地方,请告诉我们,我们会进行纠正。

MysqL

MysqL使用一种基于线程的体系结构,而 DB2 采用基于进程的体系结构。正如在图 1 中看到的,一个 MysqL实例可以管理许多数据库。一个实例中的所有MysqL数据库共享一个公用的系统编目,informatION_SCHEMA

DB2中的数据库是一个单独的实体,有自己的系统编目、表空间、缓冲池等等。DB2实例管理不同的数据库,但是数据库并不共享表空间、日志、系统编目或临时表空间。

具有许多数据库的一个MysqL 实例可以看作DB2 中的一个数据库,而每个MysqL 数据库相当于DB2 中的一个模式。如果服务器上运行几个MysqL实例,每个实例管理几个数据库,那么可以采用以下迁移方式之一:

  • 将每个 MysqL实例迁移为同一 DB2实例下的一个 DB2数据库。

  • 将每个 MysqL实例迁移为只包含一个 DB2数据库的 DB2实例,并为每个 MysqL数据库分配不同的模式。

注意:当我们提到基于进程的体系结构时,指的是 UNIX®平台,因为 Windows上的模型是基于线程的体系结构。DB2Postgresql 都是这样的。

在一个 DB2连接的范围内只能访问一个数据库资源,而MysqL 允许在同一个连接的范围内访问多个数据库资源。

MysqL最有意思的特性之一是可插入的存储引擎。可以选择MyISAMInnoDBArchiveFederatedMemoryMergeClusterNDBCustom存储引擎。每个存储引擎具有不同的性质,可以根据自己的特定需求选择某一存储引擎。对于比较,我们发现InnoDB 最接近于关系数据库。


1. MysqL 体系结构和进程概况

MysqL服务器进程(MysqLd)可以创建许多线程:

  • 一个全局线程(每个服务器进程有一个)负责创建和管理每个用户连接线程。

  • 为处理每个新的用户连接创建一个线程。

  • 每个连接线程还执行身份验证和查询。

  • Windows上,有一个命名管道处理器线程,它针对命名管道连接请求执行与连接线程相同的工作。

  • 一个信号线程处理警报并迫使长时间空闲的连接超时。

  • 分配一个线程来处理关闭事件。

  • 有一些线程在复制期间处理主服务器和从服务器的同步。

  • 使用线程处理表刷新、维护任务等等。

MysqL使用数据缓存、记录缓存、键缓存、表缓存、主机名缓存和特权缓存来缓存和检索服务器进程中所有线程所使用的不同类型的数据。

另外,MysqL主进程(MysqLd)具有用来处理数据库管理活动的线程,比如备份、恢复、并发控制等等。

Postgresql

Postgresql实例(见 图2)可以管理一个数据库集群。每个数据库有自己的系统编目,informatION_SCHEMApg_catalog。所有数据库共享pg_databases作为公用系统表。每个数据库是一个单独的实体,数据库的集合称为集群。一个Postgresql实例可以管理一个数据库集群。一台服务器可以运行多个实例。

在逻辑上,Postgresql数据库可以迁移到 DB2数据库。这两种数据库都支持模式对象类型。不能从命名的连接访问其他数据库。

DB2之间最显著的差异与表空间相关。Postgresql表空间可以跨越多个数据库,而 DB2表空间特定于一个数据库。

2. Postgresql体系结构和进程概况Postgresql会话由几个主进程组成:

  • postmaster进程是一个主管进程,它生成其他进程并监听用户连接。

  • 用户进程(比如 psql)用来处理交互式sql 查询。

  • postmaster 生成一个或多个名为postgres 的服务器进程来处理用户的数据请求。

  • 服务器进程通过信号量和共享内存来相互通信。

DB2

显示 DB2 的体系结构。这张图解释了DB2如何使用缓冲池在磁盘之间处理数据(文件、原始设备、目录等等)。DB2使用一个连接集中器来处理大量连接。DB2页清理器和预获取器异步地工作,各个进程单独处理重做日志活动。关于DB2 中锁和进程的工作方式的详细描述,请参见参考资料。

3. DB2 体系结构和进程概况DB2会话由几个进程组成:

  • MysqLPostgresqlDB2之间有什么差异?

    • MysqL使用基于线程的体系结构模型,而Postgresql DB2使用基于进程的体系结构模型。

    • DB2可以在一台服务器上有多个实例。每个实例中可以有许多数据库。每个数据库与其他数据库在物理上和逻辑上隔离。

    • MysqL可以在一台服务器上运行多个 MysqLd实例。每个实例可以管理一个或多个 MysqL数据库。一个实例中的每个数据库并不在物理上或逻辑上隔离。MysqL中的每个数据库可以被看作 DB2中的模式。

    • 可以认为 Postgresql数据库集群相当于 DB2实例。

    db2sysc,主 DB2 系统控制器,即引擎进程。
  • 监听器进程,比如 db2tcpcmdb2ipccm,它们监听用户的连接请求。

  • 一个或多个代表应用程序工作的代理。代理有两种类型:

  • db2agent代表一个应用程序工作,并使用进程间通信或远程通信协议与其他代理通信。

  • db2agntp用来在打开内部并行的情况下满足对数据库的客户机请求。

  • 用户的进程(比如 db2)用来处理来自命令行的交互式查询。

  • db2bp ——一个持久的后台进程,用于 DB2Command Line ProcessorCLP)。

  • db2disp ——一个代理调度器进程,在启用连接集中器的情况下用于将连接分配给可用的协作代理。

  • db2fmcd ——每个服务器的故障监视器协作守护进程。

  • db2fmd ——每个实例的故障监视器守护进程。

  • db2resyn ——一个重新同步管理器进程,用于处理两阶段提交。

  • db2dlock ——一个 DB2 死锁探测器。

  • db2loggr ——数据库日志读取器。

  • db2loggw ——数据库日志写入器。

  • db2pclnr ——缓冲池页清理器。

  • db2pfchr ——缓冲池预获取器。

  • db2fmp ——用于在服务器上 DB2地址空间之外运行用户代码。

  • 等等

DB2服务器进程通过称为数据库管理器内存(DatabaseManager Memory)和数据库共享内存(DatabaseShared Memory)的内存区域相互通信,见 图4

4. DB2数据库管理器(实例)和数据库共享内存体系结构

特性对比

对比了 DB2特性。这不是一个完整的列表,但是对比了最常用的特性。


1. MysqLDB2特性对比

特性

MysqL

Postgresql

DB2

实例

通过执行 MysqL命令(MysqLd)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个MysqLd 实例。一个实例管理器可以监视MysqLd 的各个实例。

通过执行 Postmaster进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用initdb 创建第一个数据库。

实例是一个 DB2安装,它管理一个或多个数据库。在安装期间创建一个默认实例。使用db2start命令启动实例。还可以使用 db2icrt命令在同一台机器上创建多个实例。在创建数据库本身之前,并不分配数据存储。数据库可以使用原始设备自己管理存储,或使用操作系统文件系统。环境变量DB2INSTANCE 决定要连接哪个实例。

数据库

数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个MysqL 实例中的所有数据库共享同一个系统编目。

数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享pg_databases

数据库是命名的对象集合,是与其他数据库分离的实体。数据库是在物理上和逻辑上独立的实体,不与其他数据库共享任何东西。一个DB2 实例可以管理一个或多个数据库。

数据缓冲区

通过 innodb_buffer_pool_size配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的80%

Shared_buffers缓存。在默认情况下分配 64个缓冲区。默认的块大小是 8K。可以通过设置postgresql.conf 文件中的shared_buffers 参数来更新缓冲区缓存。

在默认情况下分配一个缓冲池,并可以使用CREATE BUFFERPOOL命令添加其他缓冲池。默认的页大小在创建数据库时决定,可以是481632K

数据库连接

客户机使用 CONNECT USE 语句连接数据库,这时要指定数据库名,还可以指定用户id 和密码。使用角色管理数据库中的用户和用户组。

客户机使用 connect语句连接数据库,这时要指定数据库名,还可以指定用户id 和密码。使用角色管理数据库中的用户和用户组。

客户机使用 id 和密码。使用操作系统命令在数据库外创建用户和用户组。

身份验证

MysqL 在数据库级管理身份验证。

Postgresql 的身份验证取决于主机配置。

DB2 使用 API通过各种实现(比如 LDAPActiveDirectory PAM)在操作系统级对用户进行身份验证,它的可插入身份验证体系结构允许插入第三方模块。

加密

可以在表级指定密码来对数据进行加密。还可以使用AES_ENCRYPT AES_DECRYPT 函数对列数据进行加密和解密。可以通过SSL 连接实现网络加密。

可以使用 pgcrypto库中的函数对列进行加密/解密。可以通过SSL 连接实现网络加密。

可以使用 DB2提供的加密和解密方法对列数据进行加密/解密。如果在实例级选择DATA_ENCRYPT身份验证方法,那么可以对客户机和服务器之间的网络通信进行加密。

审计

可以对 querylog 执行grep

可以在表上使用 PL/pgsql触发器来进行审计。

DB2 提供的db2audit实用程序可以提供详细的审计,而不需要实现基于触发器或日志的审计。

查询解释

使用 EXPLAIN 命令查看查询的解释计划。

使用 EXPLAIN 命令查看查询的解释计划。

DB2 提供的 GUI和命令行工具可以用来查看查询的解释计划。它还可以从sql缓存捕获查询并生成解释计划。可以使用工具查看所有存储过程中的sql 的解释计划。

备份、恢复和日志

InnoDB使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。

在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。

使用写前日志记录。支持完全、增量、delta和表空间级在线/离线备份和恢复。支持崩溃、时间点和事务恢复。

JDBC 驱动程序

可以从 参考资料 下载 JDBC驱动程序。

可以从 参考资料 下载 JDBC驱动程序。

支持 Type-2 Type-4Universal)驱动程序。JDBC驱动程序是 DB2产品的一部分。

表类型

取决于存储引擎。例如,NDB存储引擎支持分区表,内存引擎支持内存表。

支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。

支持用户表、临时表、常规表以及范围、哈希和多维簇类型的分区表。

索引类型

取决于存储引擎。MyISAMBTREEInnoDBBTREE

支持 B-树、哈希、R-树和Gist 索引。

支持 B-树和位图索引。

约束

支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。

支持主键、外键、惟一、非空和检查约束。

支持主键、外键、惟一、非空和检查约束。

存储过程和用户定义函数

支持 CREATE PROCEDURE CREATE FUNCTION 语句。存储过程可以用sql C++编写。用户定义函数可以用 sqlCC++ 编写。

虽然使用术语存储过程,但是只支持 CREATEFUNCTION 语句。用户定义函数可以用PL/pgsql(专用的过程语言)、sqlC 编写。

支持 CREATE PROCEDURECREATE FUNCTION语句。存储过程可以用 sqlsqlPL)、CJavaCOBOLREXX 编写。用户定义函数可以用C Java 编写。

触发器

支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。

支持行前触发器、行后触发器和语句触发器,触发器过程用C 编写。

支持行前触发器、行后和语句触发器、insteadof 触发器和包含 sqlPL 复合语句的触发器。可以从触发器调用存储过程。

系统配置文件

my.conf

Postgresql.conf

Database ManagerConfiguration

数据库配置

Database Configuration

客户机连接文件

pg_hba.conf

System DatabaseDirectory
Node Directory

XML 支持

有限的 XML 支持。

有限的 XML 支持。

为访问 XML 数据提供丰富的支持。DB2ViperV9)是第一个以原生形式存储/检索XML 的混合型数据库。

数据访问和管理服务器

OPTIMIZE TABLE ——回收未使用的空间并消除数据文件的碎片
myisamchk-analyze ——
更新查询优化器所使用的统计数据(MyISAM存储引擎)
MysqL——
命令行工具
MysqLAdministrator ——
客户机 GUI工具

Vacuum ——回收未使用的空间
Analyze——
更新查询优化器所使用的统计数据
psql——
命令行工具
pgAdmin——
客户机 GUI 工具

Reorg ——用来重新整理数据并消除数据碎片
Runstat——
收集优化器所使用的统计数据
CLP——
命令行工具
ControlCenter ——
客户机 GUI工具

并发控制

支持表级和行级锁。InnoDB存储引擎支持READ_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READSERIALIZABLE。使用SET TRANSACTION ISOLATIONLEVEL 语句在事务级设置隔离级别。

支持表级和行级锁。支持的 ANSI隔离级别是 ReadCommitted(默认 —— 能看到查询启动时数据库的快照)和Serialization(与Repeatable Read 相似—— 只能看到在事务启动之前提交的结果)。使用SET TRANSACTION语句在事务级设置隔离级别。使用 SETSESSION 在会话级进行设置。

支持表级和行级锁以及 4个隔离级别:RR(可重复读)、RS(读可靠)、CS(默认—— 游标可靠)和 UR(未提交读)。使用SET ISOLATION 在会话级、使用WITH 子句在 sql语句级或使用数据库配置参数在数据库级设置隔离级别。

到目前为止,我们已经看到了DB2在体系结构和特性方面的一些差异。现在就来研究这些数据库服务器在数据类型方面的差异。

MysqL、Postgresql和 DB2 之间的数据类型对比

sqlANSI标准规定了关系数据库系统中使用的数据类型的规则。但是,并非每种数据库平台都支持标准委员会定义的每个数据类型。而且,特定数据类型的厂商实现可能与标准的规定不同,甚至在所有数据库厂商之间互不相同。因此,尽管许多MysqL、Postgresql和 DB2数据类型在名称和/或含义方面是相似的,但是也有许多需要注意的差异。

表 2 列出最常用的 DB2数据类型。我们在后面的小节中提供 MysqL和 Postgresql 数据类型与DB2 最接近的匹配。

尽管 DB2对 sql有一些限制(比如对约束名的长度限制、数据类型限制等等),但是各个新版本正在系统化地消除这些限制。


表2. DB2 数据类型

数据类型

说明

BIGINT

存储有符号或无符号整数,使用 8字节的存储空间。

BLOB
BLOB(n)

存储长度可变的二进制数据,长度最大为 2GB。超过 1 GB的长度不进行日志记录。

CHAR(n)
CHaraCTER(n)

存储固定长度的字符数据,长度最大为 254字节。使用 ‘n’字节的存储空间。

CHAR(n) FOR BIT DATA

存储固定长度的二进制值。

CLOB
CLOB(n)

存储长度可变的字符数据,长度最大为 DATE

存储日历日期,不包含天内的时间。使用 4字节的存储空间。

DEC(p,s)
DECIMAL(p,s)
NUM(p,s)
NUMERIC(p,s)

采用精度(p131 和刻度(s031 来存储数值。使用(p/2) +1 字节的存储空间。

DOUBLE
DOUBLEPRECISION
FLOAT

存储浮点数,使用 8字节的存储空间。

FLOAT(p)

采用精度(53 来存储数值。如果p <= 24,那么相当于REAL。如果 p>= 25,那么相当于 DOUBLEPRECISION

GRAPHIC(n)

用于 National LanguageSupportNLS)和长度固定的字符串(常常是DBCS),长度最大为127 字节。对于双字节字符集,使用n*2 字节的存储空间;对于单字节字符集,使用n 字节的存储空间。

INT
INTEGER

存储有符号或无符号整数,使用 4字节的存储空间。

REAL

存储浮点数,使用 SMALLINT

存储有符号和无符号整数,使用 2字节的存储空间。

TIME

存储天内的时间,使用 3字节的存储空间。

TIMESTAMP

存储日期(年、月、日)和时间(小时、分钟、秒),最大精度6 毫秒。使用 10字节的存储空间。

VARCHAR(n)
CHARvarying(n)
CHaraCTER varying(n)

存储长度可变的字符数据,长度最大为 32,672字节。使用 n+2字节的存储空间。

VARCHAR(n) FOR BIT DATA

存储长度可变的二进制数据。使用 n字节的存储空间。

VArgraphIC(n)

存储长度可变的双字节字符数据,长度最大为16,336 字符。使用(n*2)+2 字节的存储空间。



DB2

理解MysqL DB2 之间的数据类型问题

  • 从性能方面考虑,将少于 32K BLOB CLOB 迁移为VARCHAR(n) WITH BIT DATA VARCHAR(n)。迁移工具通过研究表中的实际数据处理这一转换。

  • 迁移工具处理 UNSIGNED数据类型。

  • Boolean 数据类型迁移到SMALLINT CHAR(1)

  • 如果小数精度大于 31,那么迁移工具将列转换为双精度数据类型。

  • 自动递增的列迁移为数值数据类型并使用IDENTITY 子句。

下面的表中描述 MysqL 和 DB2 数据类型的定义和差异。表3 描述最常用的 MysqL 数据类型。表 4 将 MysqL数据类型映射到最接近的 DB2 数据类型。

MysqL可以使用 SERIAL别名作为数据类型,这相当于 BIGINTUNSIGNED NOT NULL AUTO_INCREMENT UNIQUE

BOOLBOOLEAN tinyint(1) 的同义词。在MysqL 中,DECIMAL的最大位数是 65,支持的最大小数位是30。如果为 DECIMAL指定 UNSIGNED,那么不允许负数。

时间戳列不支持毫秒。

3. MysqL 数据类型

数据类型

说明

BIT

固定长度的位串。

BOOLEAN

存储逻辑布尔值(true/false/unkNown),可以是TRUEtrue1FALSEfalse0

TINYBLOB

用于存储二进制对象(比如图形)的原始二进制数据,最大255 字节。

BLOB

用于存储二进制对象(比如图形)的原始二进制数据,最大65,535 字节。

MEDIUMBLOB

用于存储二进制对象(比如图形)的原始二进制数据,最大

LONGBLOB

用于存储二进制对象(比如图形)的原始二进制数据,最大4GB

CHAR(n)
CHaraCTER(n)

包含固定长度的字符串,用空格填充到长度 n

DATE

3 字节的存储空间存储日历日期(年、月、日)。

DATETIME

8 字节的存储空间存储日历日期和天内的时间。

YEAR

1 字节的存储空间存储两位或四位格式的年份。

DECIMAL(p,s)

存储精确的数值,精度(p)最高为65,刻度(s)为30 或更高。

FLOAT

存储浮点数,限制由硬件决定。单精度浮点数精确到大约7 位小数。UNSIGNED属性不允许负数。

DOUBLE
REAL

存储双精度浮点数,限制由硬件决定。双精度浮点数精确到大约15 位小数。tinyint

存储有符号或无符号 1字节整数。

SMALLINT

存储有符号或无符号 2字节整数。

MEDIUMINT

存储有符号或无符号 3字节整数。

INTEGER

存储有符号或无符号 4字节整数。

BIGINT

存储有符号或无符号 8字节整数。

TINYTEXT

用于存储最多 255字节的字符串数据。

TEXT

用于存储最多

MEDIUMTEXT

用于存储最多

LONGTEXT

用于存储最多 4GB的字符串数据。

TIME

3 字节的存储空间存储天内的时间。

TIMESTAMP

4字节的存储空间存储日期和时间。如果没有提供有效值的话,TIMESTAMP列会自动设置为最近操作的日期和时间。

VARCHAR(n)
CHaraCTERvarying(n)
CHaraCTER varying

存储长度可变的字符串,最大长度由 n指定。末尾的空格不存储。

ENUM

一种串对象,它的值只能是从值列表 ‘value1’,‘value2’,...,NULL 中选择的一个值。

SET

一种串对象,它可以具有零个或更多的值,这些值必须从值列表‘

BINARY

CHAR类型相似,但是存储二进制字节串而不是字符串。

VARBINARY

VARCHAR类型相似,但是存储二进制字节串而不是字符串。



4. MysqL 数据类型到DB2 的映射

MysqL

DB2

说明

BIT

CHAR(n) FOR BIT DATA

关于用来简化迁移的 UDF的细节,请参阅 参考资料。

BOOLEAN

SMALLINT CHAR(1)

使用检查约束来实施规则。

TINYBLOB

VARCHAR(255) FOR BIT DATA

可以使用 BLOB(255) VARCHAR(255) FOR BITDATA。在这种情况下,使用 VARCHAR效率比较高。

BLOB

BLOB(64K)

如果长度小于 32K,那么考虑使用VARCHAR(n) FOR BIT DATA

MEDIUMBLOB

BLOB(16M)

可以使用 NOT LOGGED改进性能。

LONGBLOB

BLOB(2G)

支持的 BLOB 最大长度是2GB

CHAR(n)
CHaraCTER(n)

CHAR(n)
CHaraCTER(n)

DB2 中,‘n’的最大值为 254

DATE

DATE

-

DATETIME

TIMESTAMP

可以使用特殊寄存器 CURRENTTIMEZONE 对日期进行转换。

YEAR

SMALLINT

可以使用检查约束实施 YEAR规则。

如果 p 大于31,那么使用DOUBLE

FLOAT

REAL

_

DOUBLE
REAL

DOUBLE

SMALLINT

SMALLINT

使用检查约束限制值小于 256

SMALLINT

MEDIUMINT

INTEGER

如果需要,使用检查约束限制最大长度。

INTEGER

INTEGER
INT

BIGINT

BIGINT

TINYTEXT

VARCHAR(255)

对于少于 32K 的数据,使用VARCHAR 比较高效。

TEXT

CLOB(64K)

DB2 允许为 CLOBBLOB指定长度参数。指定需要的长度,而不要使用TINYMEDIUMLONG CLOB

MEDIUMTEXT

CLOB(16M)

LONGTEXT

CLOB(2G)

最大长度是 2GB。如果使用LOGGED,那么 BLOB CLOB 的最大长度为1GB。使用 NOTLOGGED 选项可以提高性能。

TIME

TIME

TIMESTAMP

TIMESTAMP

VARCHAR(n)
CHaraCTERvarying(n)

VARCHAR(n)
CHaraCTERvarying(n)

如果长度小于 32K,那么使用VARCHAR

ENUM

VARCHAR(n)

使用检查约束来实施规则。

SET

BINARY

CHAR(n) FOR BIT DATA

如果 n 小于254,那么使用CHAR(n) FOR BIT DATA;否则使用VARBINARY

VARCHAR(n) FOR BIT DATA

如果 ‘n’ 小于VARCHAR;否则使用BLOB

DB2

DB2的数据类型问题

  • Postgresql中可以使用 TEXT数据类型替代 CHAR(n)VARCHAR(n)。如果存储的值的最大长度小于32K,那么将TEXT 列迁移为CLOB数据类型可能不是最好的选择。迁移工具通过检查数据对TEXT 列进行正确的转换。

  • Postgresql 可以使用精度大于31 NUMERIC。将精度大于31 NUMERIC迁移为 DB2 DOUBLE 数据类型。

  • Boolean 数据类型迁移为CHAR(1)。这可能要求在应用程序中做一些修改。

  • BIGSERIAL 数据类型映射到DB2 BIGINT并加上 IDENTITY属性。

  • Postgresql支持对混合表达式中的数据类型进行隐式转换。DB2支持对混合表达式中的数据类型进行显式转换。

下面两个表描述 DB2 和 Postgresql 数据类型的定义和差异。表5 描述最常用的 Postgresql 数据类型。表 6 将Postgresql 数据类型映射到最接近的 DB2 数据类型。

Postgresql使用特殊的网络地址类型,比如inetcidrmacaddr。这些数据类型迁移到DB2 中的 VARCHAR数据类型。

Postgresql还支持几何数据类型。迁移工具不处理几何数据类型。目前,我们假设不太需要支持对这种数据类型进行转换。如果您使用几何数据类型,那么请告诉我们,我们将在工具中提供补丁。

处理 Postgresql中的位串数据类型需要在应用程序中做一些修改。目前,工具不提供这种支持。如果需要这种支持,请告诉我们。

Postgresql还支持多维数组,它们最好迁移成 DB2中的子表。但是,工具目前不支持多维数组。

5. Postgresql 数据类型

数据类型

说明

BIGSERIAL
SERIAL8

存储自动递增的惟一整数,最多 8字节。

BIT

固定长度的位串。

BIT varying(n)
VARBIT(n)

可变长度的位串,长度为 n位。

BOOLEAN

存储逻辑布尔值(ttrueyyes1,或者ffalsenno0

BYTEA

用于存储大型二进制对象(比如图形)的原始二进制数据。使用的存储空间是4 字节加上二进制串的长度。

CHAR(n)
CHaraCTER(n)

包含固定长度的字符串,用空格填充到长度 n

DATE

4 字节的存储空间存储日历日期(年、月、日)。

DATETIME

存储日历日期和天内的时间。

存储精确的数值,精度(p)和刻度(0 或更高。

FLOAT4
REAL

存储浮点数,精度为 8或更低和 6 个小数位。

FLOAT8
DOUBLE PRECISION

存储浮点数,精度为 16或更低和 15 个小数位。

SMALLINT

存储有符号或无符号 2字节整数。

INTEGER

存储有符号或无符号 4字节整数。

INT8
BIGINT

存储有符号或无符号 8字节整数。

SERIAL
SERIAL4

存储自动递增的惟一整数值,最多 4字节存储空间。

TEXT

存储长度可变的大型字符串数据,最多 1GBPostgresql 自动压缩TEXT 字符串。

TIME (WITHOUT TIME ZONE|
WITH TIME ZONE)

存储天内的时间。如果不存储数据库服务器的时区,就使用8 字节的存储空间;如果存储时区,就使用12 字节。

TIMESTAMP (WITHOUT TIMEZONE |
WITH TIME ZONE)

存储日期和时间。可以存储或不存储数据库服务器的时区,使用8 字节存储空间。

VARCHAR(n)
CHaraCTERvarying(n)
CHaraCTER varying

存储可变长度的字符串,最大长度为 n。不存储末尾的空格。

6. Postgresql 数据类型到DB2 的映射

POSTGREsql

DB2

说明

BIGSERIAL
SERIAL8

BIGINT

使用 IDENTITY 属性模拟自动递增特性。

BIT

CHAR(n) FOR BIT DATA

对于长度最大为 254字节的字符串。

BIT varying(n)
VARBIT(n)

VARCHAR(n) FOR BIT DATA

用于

BYTEA

BLOB

用于 32K 2GB字节之间的数据。

BOOLEAN

无布尔类型

使用 CHAR(1) SMALLINT

CHAR(n)
CHaraCTER (n)

CHAR(n)

最多 254 字节。

DATE

DATE

可以使用特殊寄存器 CURRENTTIMEZONE 对日期进行转换。

DATETIME

TIMESTAMP

可以使用特殊寄存器

如果精度大于 DOUBLE

FLOAT4
REAL

REAL

可以使用 NUMERIC FLOAT

FLOAT8
DOUBLE PRECISION

DOUBLE PRECISION

对于大数值使用 DOUBLEPRECISION,如果精度小于 NUMERIC

SMALLINT

SMALLINT

_

INTEGER

INTEGER

INT8
BIGINT

BIGINT

VARCHAR(n)
CHaraCTERvarying(n)
CHaraCTER varying

VARCHAR(n)

如果 ‘n’ 小于等于32KDB2要求指定 ‘n’,而Postgresql 不要求指定‘n’ 的值。

SERIAL
SERIAL4

INTEGER

使用 IDENTITY 属性。

TEXT

VARCHAR(n)
CLOB

如果长度小于 VARCHAR;如果大于BLOB

TIME (WITHOUT TIME ZONE |WITH TIME ZONE)

TIME

没有时区。

TIMESTAMP (WITHOUT TIMEZONE | WITH TIME ZONE)

TIMESTAMP

没有时区。

Postgresql中,即使在引用的表中数据类型不同,也可以创建外键约束。例如,如果父表的惟一键的数据类型是整数,那么可以在子表中数据类型为char(10)的列上创建外键。工具将转换这个约束,但是会失败,因为DB2 不允许数据类型不同。

Java和PHP在Web开发方面对比分析,java对比分析

Java和PHP在Web开发方面对比分析,java对比分析

java和php在web开发方面对比分析,java对比分析

比较php和jsp这两个web开发技术,在目前的情况是其实是比较php和java的web开发。以下是我就几个主要方面进行的比较:

  一、 语言比较

  PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。
  Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的Web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的Web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。
  Java的Web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的Web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

  二、 数据库访问比较

  Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
  PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

  三、 系统设计架构比较

  采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

立即学习“PHP免费学习笔记(深入)”;

  四、 跨平台性

  Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。

  五、 开发成本比较

  PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的Web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
  Java的Web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。

  六、 分布式多层架构比较

  PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的Web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。
  下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

  七、 源代码安全

  PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。
  Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

  八、性能比较

  有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。
  在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。
  数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。

  综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。

以上就是本文的全部内容了,希望对大家能够有所帮助。

Java和PHP在Web开发方面对比分析,java对比分析_PHP教程

Java和PHP在Web开发方面对比分析,java对比分析_PHP教程

java和php在web开发方面对比分析,java对比分析

比较php和jsp这两个web开发技术,在目前的情况是其实是比较php和java的web开发。以下是我就几个主要方面进行的比较:

  一、 语言比较

  PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。
  Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的Web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的Web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。
  Java的Web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的Web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

  二、 数据库访问比较

  Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
  PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

  三、 系统设计架构比较

  采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

立即学习“PHP免费学习笔记(深入)”;

  四、 跨平台性

  Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。

  五、 开发成本比较

  PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的Web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
  Java的Web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。

  六、 分布式多层架构比较

  PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的Web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。
  下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

  七、 源代码安全

  PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。
  Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

  八、性能比较

  有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。
  在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。
  数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。

Java和PHP在Web开发方面的比较

  综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。

以上就是本文的全部内容了,希望对大家能够有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/962095.htmlTechArticleJava和PHP在Web开发方面对比分析,java对比分析 比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个...

关于NoSql对比分析nosql数据库对比的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于8 种常用的 NoSQL 数据库系统对比分析、DB2,PostgreSQL,MySQL对比、Java和PHP在Web开发方面对比分析,java对比分析、Java和PHP在Web开发方面对比分析,java对比分析_PHP教程的相关知识,请在本站寻找。

本文标签: