如果您想了解NoSql对比分析和nosql数据库对比的知识,那么本篇文章将是您的不二之选。我们将深入剖析NoSql对比分析的各个方面,并为您解答nosql数据库对比的疑在这篇文章中,我们将为您介绍No
如果您想了解NoSql对比分析和nosql数据库对比的知识,那么本篇文章将是您的不二之选。我们将深入剖析NoSql对比分析的各个方面,并为您解答nosql数据库对比的疑在这篇文章中,我们将为您介绍NoSql对比分析的相关知识,同时也会详细的解释nosql数据库对比的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- NoSql对比分析(nosql数据库对比)
- 8 种常用的 NoSQL 数据库系统对比分析
- DB2,PostgreSQL,MySQL对比
- Java和PHP在Web开发方面对比分析,java对比分析
- Java和PHP在Web开发方面对比分析,java对比分析_PHP教程
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数据库根据数据的存储模型和特点分为很多种类。
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
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、MysqL和 Postgresql之间有许多差异。我们先看看这三种数据库服务器在基本体系结构方面的一些差异和相似之处。
Postgresql数据库可以几乎每周都进行特性修改,但是DB2中的特性实现和修改要经过非常仔细的计划,这是因为有众多的业务依赖于使用DB2 产品。请注意,在本文中我们使用MysqL 5.1、Postgresql8.0.3 和 DB2 V8.2进行比较,所以在阅读本文时请考虑到这一点。 图 1、图2 和 图3 是MysqL、Postgresql和 DB2的体系结构图。我们在阅读一些文档之后竭尽我们的能力绘制出Postgresql的体系结构图。如果您发现不符合实际情况的地方,请告诉我们,我们会进行纠正。 MysqL MysqL使用一种基于线程的体系结构,而 DB2 采用基于进程的体系结构。正如在图 1 中看到的,一个 MysqL实例可以管理许多数据库。一个实例中的所有MysqL数据库共享一个公用的系统编目,informatION_SCHEMA。 DB2中的数据库是一个单独的实体,有自己的系统编目、表空间、缓冲池等等。DB2实例管理不同的数据库,但是数据库并不共享表空间、日志、系统编目或临时表空间。 具有许多数据库的一个MysqL 实例可以看作DB2 中的一个数据库,而每个MysqL 数据库相当于DB2 中的一个模式。如果服务器上运行几个MysqL实例,每个实例管理几个数据库,那么可以采用以下迁移方式之一:
注意:当我们提到基于进程的体系结构时,指的是 UNIX®平台,因为 Windows上的模型是基于线程的体系结构。DB2和 Postgresql 都是这样的。 在一个 DB2连接的范围内只能访问一个数据库资源,而MysqL 允许在同一个连接的范围内访问多个数据库资源。 MysqL最有意思的特性之一是可插入的存储引擎。可以选择MyISAM、InnoDB、Archive、Federated、Memory、Merge、Cluster、NDB或 Custom存储引擎。每个存储引擎具有不同的性质,可以根据自己的特定需求选择某一存储引擎。对于比较,我们发现InnoDB 最接近于关系数据库。
MysqL服务器进程(MysqLd)可以创建许多线程:
MysqL使用数据缓存、记录缓存、键缓存、表缓存、主机名缓存和特权缓存来缓存和检索服务器进程中所有线程所使用的不同类型的数据。 另外,MysqL主进程(MysqLd)具有用来处理数据库管理活动的线程,比如备份、恢复、并发控制等等。 Postgresql Postgresql实例(见 图2)可以管理一个数据库集群。每个数据库有自己的系统编目,informatION_SCHEMA和 pg_catalog。所有数据库共享 在逻辑上,Postgresql数据库可以迁移到 DB2数据库。这两种数据库都支持模式对象类型。不能从命名的连接访问其他数据库。 DB2之间最显著的差异与表空间相关。Postgresql表空间可以跨越多个数据库,而 DB2表空间特定于一个数据库。 2. Postgresql体系结构和进程概况Postgresql会话由几个主进程组成:
DB2 图 显示 DB2 的体系结构。这张图解释了DB2如何使用缓冲池在磁盘之间处理数据(文件、原始设备、目录等等)。DB2使用一个连接集中器来处理大量连接。DB2页清理器和预获取器异步地工作,各个进程单独处理重做日志活动。关于DB2 中锁和进程的工作方式的详细描述,请参见参考资料。 3. DB2 体系结构和进程概况DB2会话由几个进程组成:
DB2服务器进程通过称为数据库管理器内存(DatabaseManager Memory)和数据库共享内存(DatabaseShared Memory)的内存区域相互通信,见 图4。 4. DB2数据库管理器(实例)和数据库共享内存体系结构 特性对比 表 对比了 DB2特性。这不是一个完整的列表,但是对比了最常用的特性。
|
||||||
特性 |
MysqL |
Postgresql |
DB2 |
|||
---|---|---|---|---|---|---|
实例 |
通过执行 MysqL命令(MysqLd)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个MysqLd 实例。一个实例管理器可以监视MysqLd 的各个实例。 |
通过执行 Postmaster进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用initdb 创建第一个数据库。 |
实例是一个 DB2安装,它管理一个或多个数据库。在安装期间创建一个默认实例。使用 |
|||
数据库 |
数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个MysqL 实例中的所有数据库共享同一个系统编目。 |
数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享pg_databases。 |
数据库是命名的对象集合,是与其他数据库分离的实体。数据库是在物理上和逻辑上独立的实体,不与其他数据库共享任何东西。一个DB2 实例可以管理一个或多个数据库。 |
|||
数据缓冲区 |
通过 innodb_buffer_pool_size配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的80%。 |
Shared_buffers缓存。在默认情况下分配 64个缓冲区。默认的块大小是 8K。可以通过设置postgresql.conf 文件中的shared_buffers 参数来更新缓冲区缓存。 |
在默认情况下分配一个缓冲池,并可以使用CREATE BUFFERPOOL命令添加其他缓冲池。默认的页大小在创建数据库时决定,可以是4、8、16或 32K。 |
|||
数据库连接 |
客户机使用 CONNECT 或USE 语句连接数据库,这时要指定数据库名,还可以指定用户id 和密码。使用角色管理数据库中的用户和用户组。 |
客户机使用 connect语句连接数据库,这时要指定数据库名,还可以指定用户id 和密码。使用角色管理数据库中的用户和用户组。 |
客户机使用 id 和密码。使用操作系统命令在数据库外创建用户和用户组。 |
|||
身份验证 |
MysqL 在数据库级管理身份验证。 |
Postgresql 的身份验证取决于主机配置。 |
DB2 使用 API通过各种实现(比如 LDAP、ActiveDirectory 和 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-4(Universal)驱动程序。JDBC驱动程序是 DB2产品的一部分。 |
|||
表类型 |
取决于存储引擎。例如,NDB存储引擎支持分区表,内存引擎支持内存表。 |
支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 |
支持用户表、临时表、常规表以及范围、哈希和多维簇类型的分区表。 |
|||
索引类型 |
取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 |
支持 B-树、哈希、R-树和Gist 索引。 |
支持 B-树和位图索引。 |
|||
约束 |
支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 |
支持主键、外键、惟一、非空和检查约束。 |
支持主键、外键、惟一、非空和检查约束。 |
|||
存储过程和用户定义函数 |
支持 CREATE PROCEDURE 和CREATE FUNCTION 语句。存储过程可以用sql 和 C++编写。用户定义函数可以用 sql、C和 C++ 编写。 |
虽然使用术语存储过程,但是只支持 CREATEFUNCTION 语句。用户定义函数可以用PL/pgsql(专用的过程语言)、sql和 C 编写。 |
支持 CREATE PROCEDURE和 CREATE FUNCTION语句。存储过程可以用 sql(sqlPL)、C、Java、COBOL和 REXX 编写。用户定义函数可以用C 和Java 编写。 |
|||
触发器 |
支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 |
支持行前触发器、行后触发器和语句触发器,触发器过程用C 编写。 |
支持行前触发器、行后和语句触发器、insteadof 触发器和包含 sqlPL 复合语句的触发器。可以从触发器调用存储过程。 |
|||
系统配置文件 |
my.conf |
Postgresql.conf |
Database ManagerConfiguration |
|||
数据库配置 |
Database Configuration |
|||||
客户机连接文件 |
pg_hba.conf |
System DatabaseDirectory |
||||
XML 支持 |
有限的 XML 支持。 |
有限的 XML 支持。 |
为访问 XML 数据提供丰富的支持。DB2Viper(V9)是第一个以原生形式存储/检索XML 的混合型数据库。 |
|||
数据访问和管理服务器 |
OPTIMIZE TABLE ——回收未使用的空间并消除数据文件的碎片 |
Vacuum ——回收未使用的空间 |
Reorg ——用来重新整理数据并消除数据碎片 |
|||
并发控制 |
支持表级和行级锁。InnoDB存储引擎支持READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ和 SERIALIZABLE。使用SET TRANSACTION ISOLATIONLEVEL 语句在事务级设置隔离级别。 |
支持表级和行级锁。支持的 ANSI隔离级别是 ReadCommitted(默认 —— 能看到查询启动时数据库的快照)和Serialization(与Repeatable Read 相似—— 只能看到在事务启动之前提交的结果)。使用SET TRANSACTION语句在事务级设置隔离级别。使用 SETSESSION 在会话级进行设置。 |
支持表级和行级锁以及 4个隔离级别:RR(可重复读)、RS(读可靠)、CS(默认—— 游标可靠)和 UR(未提交读)。使用SET ISOLATION 在会话级、使用WITH 子句在 sql语句级或使用数据库配置参数在数据库级设置隔离级别。 |
到目前为止,我们已经看到了DB2在体系结构和特性方面的一些差异。现在就来研究这些数据库服务器在数据类型方面的差异。 MysqL、Postgresql和 DB2 之间的数据类型对比 |
|||||||||||||||||||||
数据类型 |
说明 |
||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BIGINT |
存储有符号或无符号整数,使用 8字节的存储空间。 |
||||||||||||||||||||
BLOB |
存储长度可变的二进制数据,长度最大为 2GB。超过 1 GB的长度不进行日志记录。 |
||||||||||||||||||||
CHAR(n) |
存储固定长度的字符数据,长度最大为 254字节。使用 ‘n’字节的存储空间。 |
||||||||||||||||||||
CHAR(n) FOR BIT DATA |
存储固定长度的二进制值。 |
||||||||||||||||||||
CLOB |
存储长度可变的字符数据,长度最大为 DATE |
存储日历日期,不包含天内的时间。使用 4字节的存储空间。 |
|||||||||||||||||||
DEC(p,s) |
采用精度(p)1到 31 和刻度(s)0到 31 来存储数值。使用(p/2) +1 字节的存储空间。 |
||||||||||||||||||||
DOUBLE |
存储浮点数,使用 8字节的存储空间。 |
||||||||||||||||||||
FLOAT(p) |
采用精度(53 来存储数值。如果p <= 24,那么相当于REAL。如果 p>= 25,那么相当于 DOUBLEPRECISION。 |
||||||||||||||||||||
GRAPHIC(n) |
用于 National LanguageSupport(NLS)和长度固定的字符串(常常是DBCS),长度最大为127 字节。对于双字节字符集,使用n*2 字节的存储空间;对于单字节字符集,使用n 字节的存储空间。 |
||||||||||||||||||||
INT |
存储有符号或无符号整数,使用 4字节的存储空间。 |
||||||||||||||||||||
REAL |
存储浮点数,使用 SMALLINT |
存储有符号和无符号整数,使用 2字节的存储空间。 |
|||||||||||||||||||
TIME |
存储天内的时间,使用 3字节的存储空间。 |
||||||||||||||||||||
TIMESTAMP |
存储日期(年、月、日)和时间(小时、分钟、秒),最大精度6 毫秒。使用 10字节的存储空间。 |
||||||||||||||||||||
VARCHAR(n) |
存储长度可变的字符数据,长度最大为 32,672字节。使用 n+2字节的存储空间。 |
||||||||||||||||||||
VARCHAR(n) FOR BIT DATA |
存储长度可变的二进制数据。使用 n字节的存储空间。 |
||||||||||||||||||||
VArgraphIC(n) |
存储长度可变的双字节字符数据,长度最大为16,336 字符。使用(n*2)+2 字节的存储空间。 |
||||||||||||||||||||
DB2
MysqL可以使用 SERIAL别名作为数据类型,这相当于 BOOL或 BOOLEAN 是tinyint(1) 的同义词。在MysqL 中,DECIMAL的最大位数是 65,支持的最大小数位是30。如果为 DECIMAL指定 UNSIGNED,那么不允许负数。 时间戳列不支持毫秒。 3. MysqL 数据类型 |
|||||||||||||||||||||
数据类型 |
说明 |
||||||||||||||||||||
BIT |
固定长度的位串。 |
||||||||||||||||||||
BOOLEAN |
存储逻辑布尔值(true/false/unkNown),可以是TRUE、true和 1;FALSE、false和 0。 |
||||||||||||||||||||
TINYBLOB |
用于存储二进制对象(比如图形)的原始二进制数据,最大255 字节。 |
||||||||||||||||||||
BLOB |
用于存储二进制对象(比如图形)的原始二进制数据,最大65,535 字节。 |
||||||||||||||||||||
MEDIUMBLOB |
用于存储二进制对象(比如图形)的原始二进制数据,最大 LONGBLOB |
用于存储二进制对象(比如图形)的原始二进制数据,最大4GB。 |
|||||||||||||||||||
CHAR(n) |
包含固定长度的字符串,用空格填充到长度 n。 |
||||||||||||||||||||
DATE |
用 3 字节的存储空间存储日历日期(年、月、日)。 |
||||||||||||||||||||
DATETIME |
用 8 字节的存储空间存储日历日期和天内的时间。 |
||||||||||||||||||||
YEAR |
用 1 字节的存储空间存储两位或四位格式的年份。 |
||||||||||||||||||||
DECIMAL(p,s) |
存储精确的数值,精度(p)最高为65,刻度(s)为30 或更高。 |
||||||||||||||||||||
FLOAT |
存储浮点数,限制由硬件决定。单精度浮点数精确到大约7 位小数。UNSIGNED属性不允许负数。 |
||||||||||||||||||||
DOUBLE |
存储双精度浮点数,限制由硬件决定。双精度浮点数精确到大约15 位小数。tinyint |
存储有符号或无符号 1字节整数。 |
|||||||||||||||||||
SMALLINT |
存储有符号或无符号 2字节整数。 |
||||||||||||||||||||
MEDIUMINT |
存储有符号或无符号 3字节整数。 |
||||||||||||||||||||
INTEGER |
存储有符号或无符号 4字节整数。 |
||||||||||||||||||||
BIGINT |
存储有符号或无符号 8字节整数。 |
||||||||||||||||||||
TINYTEXT |
用于存储最多 255字节的字符串数据。 |
||||||||||||||||||||
TEXT |
用于存储最多 MEDIUMTEXT |
用于存储最多 LONGTEXT |
用于存储最多 4GB的字符串数据。 |
||||||||||||||||||
TIME |
用 3 字节的存储空间存储天内的时间。 |
||||||||||||||||||||
TIMESTAMP |
用 4字节的存储空间存储日期和时间。如果没有提供有效值的话,TIMESTAMP列会自动设置为最近操作的日期和时间。 |
||||||||||||||||||||
VARCHAR(n) |
存储长度可变的字符串,最大长度由 n指定。末尾的空格不存储。 |
||||||||||||||||||||
ENUM |
一种串对象,它的值只能是从值列表 ‘value1’,‘value2’,...,NULL 中选择的一个值。 |
||||||||||||||||||||
SET |
一种串对象,它可以具有零个或更多的值,这些值必须从值列表‘ BINARY |
与 CHAR类型相似,但是存储二进制字节串而不是字符串。 |
|||||||||||||||||||
VARBINARY |
与 VARCHAR类型相似,但是存储二进制字节串而不是字符串。 |
||||||||||||||||||||
|
|||||||||||||||||||||
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) |
CHAR(n) |
在 DB2 中,‘n’的最大值为 254。 |
|||||||||||||||||||
DATE |
DATE |
- |
|||||||||||||||||||
DATETIME |
TIMESTAMP |
可以使用特殊寄存器 CURRENTTIMEZONE 对日期进行转换。 |
|||||||||||||||||||
YEAR |
SMALLINT |
可以使用检查约束实施 YEAR规则。 |
|||||||||||||||||||
如果 p 大于31,那么使用DOUBLE。 |
|||||||||||||||||||||
FLOAT |
REAL |
_ |
|||||||||||||||||||
DOUBLE |
DOUBLE |
SMALLINT |
SMALLINT |
使用检查约束限制值小于 256。 |
|||||||||||||||||
SMALLINT |
MEDIUMINT |
INTEGER |
如果需要,使用检查约束限制最大长度。 |
||||||||||||||||||
INTEGER |
INTEGER |
BIGINT |
BIGINT |
TINYTEXT |
VARCHAR(255) |
对于少于 32K 的数据,使用VARCHAR 比较高效。 |
|||||||||||||||
TEXT |
CLOB(64K) |
DB2 允许为 CLOB或 BLOB指定长度参数。指定需要的长度,而不要使用TINY、MEDIUM或 LONG CLOB。 |
|||||||||||||||||||
MEDIUMTEXT |
CLOB(16M) |
LONGTEXT |
CLOB(2G) |
最大长度是 2GB。如果使用LOGGED,那么 BLOB或 CLOB 的最大长度为1GB。使用 NOTLOGGED 选项可以提高性能。 |
|||||||||||||||||
TIME |
TIME |
TIMESTAMP |
TIMESTAMP |
VARCHAR(n) |
VARCHAR(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
Postgresql使用特殊的网络地址类型,比如 Postgresql还支持几何数据类型。迁移工具不处理几何数据类型。目前,我们假设不太需要支持对这种数据类型进行转换。如果您使用几何数据类型,那么请告诉我们,我们将在工具中提供补丁。 处理 Postgresql中的位串数据类型需要在应用程序中做一些修改。目前,工具不提供这种支持。如果需要这种支持,请告诉我们。 Postgresql还支持多维数组,它们最好迁移成 DB2中的子表。但是,工具目前不支持多维数组。 5. Postgresql 数据类型 |
|||||||||||||||||||||
数据类型 |
说明 |
||||||||||||||||||||
BIGSERIAL |
存储自动递增的惟一整数,最多 8字节。 |
||||||||||||||||||||
BIT |
固定长度的位串。 |
||||||||||||||||||||
BIT varying(n) |
可变长度的位串,长度为 n位。 |
||||||||||||||||||||
BOOLEAN |
存储逻辑布尔值(t、true、y、yes和 1,或者f、false、n、no和 0。 |
||||||||||||||||||||
BYTEA |
用于存储大型二进制对象(比如图形)的原始二进制数据。使用的存储空间是4 字节加上二进制串的长度。 |
||||||||||||||||||||
CHAR(n) |
包含固定长度的字符串,用空格填充到长度 n。 |
||||||||||||||||||||
DATE |
用 4 字节的存储空间存储日历日期(年、月、日)。 |
||||||||||||||||||||
DATETIME |
存储日历日期和天内的时间。 |
||||||||||||||||||||
存储精确的数值,精度(p)和刻度(0 或更高。 |
|||||||||||||||||||||
FLOAT4 |
存储浮点数,精度为 8或更低和 6 个小数位。 |
||||||||||||||||||||
FLOAT8 |
存储浮点数,精度为 16或更低和 15 个小数位。 |
||||||||||||||||||||
SMALLINT |
存储有符号或无符号 2字节整数。 |
||||||||||||||||||||
INTEGER |
存储有符号或无符号 4字节整数。 |
||||||||||||||||||||
INT8 |
存储有符号或无符号 8字节整数。 |
||||||||||||||||||||
SERIAL |
存储自动递增的惟一整数值,最多 4字节存储空间。 |
||||||||||||||||||||
TEXT |
存储长度可变的大型字符串数据,最多 1GB。Postgresql 自动压缩TEXT 字符串。 |
||||||||||||||||||||
TIME (WITHOUT TIME ZONE| |
存储天内的时间。如果不存储数据库服务器的时区,就使用8 字节的存储空间;如果存储时区,就使用12 字节。 |
||||||||||||||||||||
TIMESTAMP (WITHOUT TIMEZONE | |
存储日期和时间。可以存储或不存储数据库服务器的时区,使用8 字节存储空间。 |
||||||||||||||||||||
VARCHAR(n) |
存储可变长度的字符串,最大长度为 n。不存储末尾的空格。 |
||||||||||||||||||||
6. Postgresql 数据类型到DB2 的映射 |
|||||||||||||||||||||
POSTGREsql |
DB2 |
说明 |
|||||||||||||||||||
BIGSERIAL |
BIGINT |
使用 IDENTITY 属性模拟自动递增特性。 |
|||||||||||||||||||
BIT |
CHAR(n) FOR BIT DATA |
对于长度最大为 254字节的字符串。 |
|||||||||||||||||||
BIT varying(n) |
VARCHAR(n) FOR BIT DATA |
用于 BYTEA |
BLOB |
用于 32K 和 2GB字节之间的数据。 |
|||||||||||||||||
BOOLEAN |
无布尔类型 |
使用 CHAR(1) 或SMALLINT。 |
|||||||||||||||||||
CHAR(n) |
CHAR(n) |
最多 254 字节。 |
|||||||||||||||||||
DATE |
DATE |
可以使用特殊寄存器 CURRENTTIMEZONE 对日期进行转换。 |
|||||||||||||||||||
DATETIME |
TIMESTAMP |
可以使用特殊寄存器 如果精度大于 DOUBLE。 |
|||||||||||||||||||
FLOAT4 |
REAL |
可以使用 NUMERIC 或FLOAT。 |
|||||||||||||||||||
FLOAT8 |
DOUBLE PRECISION |
对于大数值使用 DOUBLEPRECISION,如果精度小于 NUMERIC。 |
|||||||||||||||||||
SMALLINT |
SMALLINT |
_ |
|||||||||||||||||||
INTEGER |
INTEGER |
INT8 |
BIGINT |
VARCHAR(n) |
VARCHAR(n) |
如果 ‘n’ 小于等于32K。DB2要求指定 ‘n’,而Postgresql 不要求指定‘n’ 的值。 |
|||||||||||||||
SERIAL |
INTEGER |
使用 IDENTITY 属性。 |
|||||||||||||||||||
TEXT |
VARCHAR(n) |
如果长度小于 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对比分析
比较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和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开发的系统的价格要高。
以上就是本文的全部内容了,希望对大家能够有所帮助。
关于NoSql对比分析和nosql数据库对比的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于8 种常用的 NoSQL 数据库系统对比分析、DB2,PostgreSQL,MySQL对比、Java和PHP在Web开发方面对比分析,java对比分析、Java和PHP在Web开发方面对比分析,java对比分析_PHP教程的相关知识,请在本站寻找。
本文标签: