该选择哪个开源数据库有哪些

叶蓬 的BLOG
用户名:叶蓬
文章数:531
评论数:658
访问量:616970
注册日期:
阅读量:24883
阅读量:271852
阅读量:1004447
阅读量:152431
51CTO推荐博文
【按:此文是与我的《》同期发表在内刊上的我的同事们的作品,转载于此。这些基础性的研究和测试对比分析,对于我们的BDSA技术路线选定大有帮助。】引言&大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS、Map-Reduce、
Bigtable被称为云计算底层技术三大基石。GFS、Map-Reduce技术直接支持了Apache
Hadoop项目的诞生。Bigtable和Amazon
Dynamo直接催生了NoSQL这个崭新的数据库领域,撼动了RDBMS在商用数据库和数据仓库方面几十年的统治性地位。FaceBook的Hive项
目是建立在Hadoop上的数据仓库基础构架,提供了一系列用于存储、查询和分析大规模数据的工具。当我们还浸淫在GFS、Map-Reduce、
Bigtable等Google技术中,并进行理解、掌握、模仿时,Google在2009年之后,连续推出多项新技术,包括:Dremel、
Pregel、Percolator、Spanner和F1。其中,Dremel促使了实时计算系统的兴起,Pregel开辟了图数据计算这个新方
向,Percolator使分布式增量索引更新成为文本检索领域的新标准,Spanner和F1向我们展现了跨数据中心数据库的可能。在Google的第
二波技术浪潮中,基于Hive和Dremel,新兴的大数据公司Cloudera开源了大数据查询分析引擎Impala,Hortonworks开源了
Stinger,Fackbook开源了Presto。类似Pregel,UC Berkeley
AMPLAB实验室开发了Spark图计算框架,并以Spark为核心开源了大数据查询分析引擎Shark。由于某电信运营商项目中大数据查询引擎选型需
求,本文将会对Hive、Impala、Shark、Stinger和Presto这五类主流的开源大数据查询分析引擎进行简要介绍以及性能比较,最后进
行总结与展望。Hive、Impala、Shark、Stinger和Presto的进化图谱如图1所示。&650) this.width=650;" alt="" src=".cn/UserFiles/Impala%E3%80%81Shark%E3%80%81Stinger%E5%92%8CPresto%E7%9A%84%E8%BF%9B%E5%8C%96%E5%9B%BE%E8%B0%B1.jpg" height="299" width="382" />&图1. Impala、Shark、Stinger和Presto的进化图谱当前主流引擎简介&基于Map-Reduce模式的Hadoop擅长数据批处理,不是特别符合即时查询的场景。实时查询一般使用MPP (Massively
Processing)的架构,因此用户需要在Hadoop和MPP两种技术中选择。在Google的第二波技术浪潮中,一些基于Hadoop架构的快速
SQL访问技术逐步获得人们关注。现在有一种新的趋势是MPP和Hadoop相结合提供快速SQL访问框架。最近有四个很热门的开源工具出
来:Impala、Shark、Stinger和Presto。这也显示了大数据领域对于Hadoop生态系统中支持实时查询的期望。总体来
说,Impala、Shark、Stinger和Presto四个系统都是类SQL实时大数据查询分析引擎,但是它们的技术侧重点完全不同。而且它们也不
是为了替换Hive而生,Hive在做数据仓库时是非常有价值的。这四个系统与Hive都是构建在Hadoop之上的数据查询工具,各有不同的侧重适应
面,但从客户端使用来看它们与Hive有很多的共同之处,如数据表元数据、Thrift接口、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储
资源池等。Hive与Impala、Shark、Stinger、Presto在Hadoop中的关系如图2所示。Hive适用于长时间的批处理查询分
析,而Impala、Shark、Stinger和Presto适用于实时交互式SQL查询,它们给数据分析人员提供了快速实验、验证想法的大数据分析工
具。可以先使用Hive进行数据转换处理,之后使用这四个系统中的一个在Hive处理后的结果数据集上进行快速的数据分析。下面,从问题域出发简单介绍
Hive、Impala、Shark、Stinger和Presto:&1)&Hive,披着SQL外衣的Map-Reduce。Hive是为方便用户使用Map-Reduce而在外面封装了一层SQL,由于Hive采
用了SQL,它的问题域比Map-Reduce更窄,因为很多问题,SQL表达不出来,比如一些数据挖掘算法,推荐算法、图像识别算法等,这些仍只能通过
编写Map-Reduce完成。&2)&Impala:Google Dremel的开源实现(Apache Drill类似),因为交互式实时计算需求,Cloudera推出了Impala系统,该系统适用于交互式实时处理场景,要求最后产生的数据量一定要少。&3)&Shark/Spark:为了提高Map-Reduce的计算效率,Berkeley的AMPLab实验室开发了Spark,Spark可看
做基于内存的Map-Reduce实现,此外,伯克利还在Spark基础上封装了一层SQL,产生了一个新的类似Hive的系统Shark。&4)&Stinger Initiative(Tez optimized
Hive):Hortonworks开源了一个DAG计算框架Tez,Tez可以理解为Google
Pregel的开源实现,该框架可以像Map-Reduce一样,可以用来设计DAG应用程序,但需要注意的是,Tez只能运行在YARN上。Tez的一
个重要应用是优化Hive和PIG这种典型的DAG应用场景,它通过减少数据读写IO,优化DAG流程使得Hive速度提供了很多倍。&5)&Presto:FaceBook于2013年11月份开源了Presto,一个分布式SQL查询引擎,它被设计为用来专门进行高速、实时的数
据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window
functions)。Presto设计了一个简单的数据存储的抽象层,来满足在不同数据存储系统(包括HBase、HDFS、Scribe等)之上都可
以使用SQL进行查询。&650) this.width=650;" alt="" src=".cn/UserFiles/Hive%E4%B8%8EImpala%E3%80%81Shark%E3%80%81Stinger%E3%80%81Presto%E5%9C%A8Hadoop%E4%B8%AD%E7%9A%84%E5%85%B3%E7%B3%BB.jpg" height="267" width="277" />&图2. Hive与Impala、Shark、Stinger、Presto在Hadoop中的关系&当前主流引擎架构&HiveHive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为
Map-Reduce任务进行运行,十分适合数据仓库的统计分析。其架构如图3所示,Hadoop和Map-Reduce是Hive架构的根基。Hive
架构包括如下组件:CLI(Command Line Interface)、JDBC/ODBC、Thrift Server、Meta
Store和Driver(Complier、Optimizer和Executor)。&650) this.width=650;" alt="" src=".cn/UserFiles/Hive%E6%9E%B6%E6%9E%84.jpg" height="228" width="344" />图3. Hive架构Impala架构&Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,它可以看成是Google
Dremel架构和MPP (Massively Parallel
Processing)结构的结合体。Impala没有再使用缓慢的Hive&Map-Reduce批处理,而是通过使用与商用并行关系数据库中
类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec
Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟,其架构如图4所
示,Impala主要由Impalad,State
Store和CLI组成。Impalad与DataNode运行在同一节点上,由Impalad进程表示,它接收客户端的查询请求(接收查询请求的
Impalad为Coordinator,Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计
划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由
Coordinator返回给客户端。同时Impalad也与State
Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作。Impala State
Store跟踪集群中的Impalad的健康状态及位置信息,由state-stored进程表示,它通过创建多个线程来处理Impalad的注册订阅和
与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State
Store离线后,因为Impalad有State
Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。
CLI提供给用户查询使用的命令行工具,同时Impala还提供了Hue,JDBC,ODBC,Thrift使用接口。&650) this.width=650;" alt="" src=".cn/UserFiles/Impala%E6%9E%B6%E6%9E%84.jpg" height="158" width="344" />&图4. Impala架构&Shark架构&Shark是UC Berkeley
AMPLAB开源的一款数据仓库产品,它完全兼容Hive的HQL语法,但与Hive不同的是,Hive的计算框架采用Map-Reduce,而
Shark采用Spark。所以,Hive是SQL on Map-Reduce,而Shark是Hive on
Spark。其架构如图4所示,为了最大程度的保持和Hive的兼容性,Shark复用了Hive的大部分组件,如下所示:&1)&SQL Parser&Plan generation:
Shark完全兼容Hive的HQL语法,而且Shark使用了Hive的API来实现query Parsing和 query Plan
generation,仅仅最后的Physical Plan execution阶段用Spark代替Hadoop Map-Reduce;&2)&metastore:Shark采用和Hive一样的meta信息,Hive里创建的表用Shark可无缝访问;&3)&SerDe: Shark的序列化机制以及数据类型与Hive完全一致;&4)&UDF:
Shark可重用Hive里的所有UDF。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD(Resilient
Distributed
Dataset),实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询
和运算分析能结合在一起,最大化RDD的重复使用;&5)&Driver:Shark在Hive的CliDriver基础上进行了一个封装,生成一个SharkCliDriver,这是shark命令的入口;&6)&ThriftServer:Shark在Hive的ThriftServer(支持JDBC/ODBC)基础上,做了一个封装,生成了一个SharkServer,也提供JDBC/ODBC服务。&650) this.width=650;" alt="" src=".cn/UserFiles/Shark%E6%9E%B6%E6%9E%84.jpg" height="237" width="359" />&图5. Shark架构&Spark是UC Berkeley AMP lab所开源的类Hadoop
Map-Reduce的通用的并行计算框架,Spark基于Map-Reduce算法实现的分布式计算,拥有Hadoop
Map-Reduce所具有的优点;但不同于Map-Reduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark
能更好地适用于数据挖掘与机器学习等需要迭代的Map-Reduce的算法。其架构如图6所示:&650) this.width=650;" alt="" src=".cn/UserFiles/Spark%E6%9E%B6%E6%9E%841.jpg" height="186" width="344" />&图6. Spark架构与Hadoop的对比,Spark的中间数据放到内存中,对于迭代运算效率更高,因此Spark适用于需要多次操作特定数据集的应用场合。需要反复操作的
次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。Spark比Hadoop更通用,Spark提供的数据
集操作类型有很多种(map, filter, flatMap, sample, groupByKey, reduceByKey, union,
join, cogroup, mapValues,
sort,partionBy等),而Hadoop只提供了Map和Reduce两种操作。Spark可以直接对HDFS进行数据的读写,同样支持
YARN。Spark可以与Map-Reduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。Stinger架构&Stinger是Hortonworks开源的一个实时类SQL即时查询系统,声称可以提升较Hive
100倍的速度。与Hive不同的是,Stinger采用Tez。所以,Hive是SQL on Map-Reduce,而Stinger是Hive
Tez。Tez的一个重要作用是优化Hive和PIG这种典型的DAG应用场景,它通过减少数据读写IO,优化DAG流程使得Hive速度提供了很多倍。
其架构如图7所示,
Stinger是在Hive的现有基础上加了一个优化层Tez(此框架是基于Yarn),所有的查询和统计都要经过它的优化层来处理,以减少不必要的工作
以及资源开销。虽然Stinger也对Hive进行了较多的优化与加强,Stinger总体性能还是依赖其子系统Tez的表现。而Tez是
Hortonworks开源的一个DAG计算框架,Tez可以理解为Google
Pregel的开源实现,该框架可以像Map-Reduce一样,用来设计DAG应用程序,但需要注意的是,Tez只能运行在YARN上。&650) this.width=650;" alt="" src=".cn/UserFiles/Stinger%E6%9E%B6%E6%9E%84.jpg" height="240" width="344" />&图7. Stinger架构&Presto架构&2013年11月Facebook开源了一个分布式SQL查询引擎Presto,它被设计为用来专门进行高速、实时的数据分析。它支持标准的
SQL子集,包括复杂查询、聚合、连接和窗口函数。其简化的架构如图8所示,客户端将SQL查询发送到Presto的协调器。协调器会进行语法检查、分析
和规划查询计划。调度器将执行的管道组合在一起,将任务分配给那些里数据最近的节点,然后监控执行过程。客户端从输出段中将数据取出,这些数据是从更底层
的处理段中依次取出的。Presto的运行模型与Hive有着本质的区别。Hive将查询翻译成多阶段的Map-Reduce任务,一个接着一个地运行。
每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。然而Presto引擎没有使用Map-Reduce。它使用了一个定制的查询执行引擎和响应
操作符来支持SQL的语法。除了改进的调度算法之外,所有的数据处理都是在内存中进行的。不同的处理端通过网络组成处理的流水线。这样会避免不必要的磁盘
读写和额外的延迟。这种流水线式的执行模型会在同一时间运行多个数据处理段,一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。
这样的方式会大大的减少各种查询的端到端响应时间。同时,Presto设计了一个简单的数据存储抽象层,来满足在不同数据存储系统之上都可以使用SQL进
行查询。存储连接器目前支持除Hive/HDFS外,还支持HBase、Scribe和定制开发的系统。&650) this.width=650;" alt="" src=".cn/UserFiles/Presto%E6%9E%B6%E6%9E%84.jpg" height="169" width="344" />图8. Presto架构&性能评测总结&通过对Hive、Impala、Shark、Stinger和Presto的评测和分析,总结如下:&1)&列存储一般对查询性能提升明显,尤其是大表是一个包含很多列的表。例如,从Stinger(Hive 0.11 with ORCFile)VS Hive,以及Impala的Parquet VS Text file;&2)&绕开MR计算模型,省去中间结果的持久化和MR任务调度的延迟,会带来性能提升。例如,Impala,Shark,Presto要好于Hive和Stinger,但这种优势随着数据量增加和查询变复杂而减弱;&3)&使用MPP数据库技术对连接查询有帮助。例如,Impala在两表,多表连接查询中优势明显;&4)&充分利用缓存的系统在内存充足的情况下性能优势明显。例如,Shark,Impala在小数据量时性能优势明显;内存不足时性能下降严重,Shark会出现很多问题;&5)&数据倾斜会严重影响一些系统的性能。例如,Hive、Stinger、Shark对数据倾斜比较敏感,容易造成倾斜;Impala受这方面的影响似乎不大;对于Hive、Impala、Shark、Stinger和Presto这五类开源的分析引擎,在大多数情况下,Imapla的综合性能是最稳定的,时间
性能也是最好的,而且其安装配置过程也相对容易。其他分别为Presto、Shark、Stinger和Hive。在内存足够和非Join操作情况
下,Shark的性能是最好的。&总结与展望&对大数据分析的项目来说,技术往往不是最关键的,关键在于谁的生态系统更强,技术上一时的领先并不足以保证项目的最终成功。对于Hive、
Impala、Shark、Stinger和Presto来讲,最后哪一款产品会成为事实上的标准还很难说,但我们唯一可以确定并坚信的一点是,大数据分
析将随着新技术的不断推陈出新而不断普及开来,这对用户永远都是一件幸事。举个例子,如果读者注意过下一代Hadoop(YARN)的发展的话就会发现,
其实YARN已经支持Map-Reduce之外的计算范式(例如Shark,Impala等),因此将来Hadoop将可能作为一个兼容并包的大平台存
在,在其上提供各种各样的数据处理技术,有应对秒量级查询的,有应对大数据批处理的,各种功能应有尽有,满足用户各方面的需求。除了Hive、Impala、Shark、Stinger和Presto这样的开源方案外,像Oracle,EMC等传统厂商也没在坐以待毙等着自己的市
场被开源软件侵吞。像EMC就推出了HAWQ系统,并号称其性能比之Impala快上十几倍,而Amazon的Redshift也提供了比Impala更
好的性能。虽然说开源软件因为其强大的成本优势而拥有极其强大的力量,但是传统数据库厂商仍会尝试推出性能、稳定性、维护服务等指标上更加强大的产品与之
进行差异化竞争,并同时参与开源社区、借力开源软件来丰富自己的产品线、提升自己的竞争力,并通过更多的高附加值服务来满足某些消费者需求。毕竟,这些厂
商往往已在并行数据库等传统领域积累了大量的技术和经验,这些底蕴还是非常深厚的。总的来看,未来的大数据分析技术将会变得越来越成熟、越来越便宜、越来
越易用;相应的,用户将会更容易更方便地从自己的大数据中挖掘出有价值的商业信息。
了这篇文章
类别:┆阅读(0)┆评论(0)天极传媒:天极网全国分站
您现在的位置:
& &&主流开源数据库的技术特点点评
主流开源数据库的技术特点点评天极网 10:40
&&& 随着开放软件的使用越来越广泛,像Linux一样,开放源代码数据库的出现也有其必然性。在当Oracle、IBM、Microsoft、Sybase 等几大数据库厂商在数据库领域处于垄断地位的时候,出现了以、PostgreSQL为代表的开放源代码的数据库系统,推动了开源软件事业的发展。开源数据库系统并不是一个新事物,如Postgres(PostgreSQL的前身)已经有20年的发展历史了,而著名的MySQL今年4月刚刚度过了其10周年纪念活动。
&&& MysQL是瑞典的T.c.X公司负责开发和维护的,它是一个真正的多用户、多线程SQL数据库。MysQL是以一个客户机/服务器结构实现其功能的,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。MySQL主要特点是快速、健壮和易用。MySQL的官方发音是“My Ess Que Ell”(不是MY-SEQUEL)。目前MySQL的最新版本是5.0,MySQL的网址是:,MySQL的标志是一个小海豚。见图-1。
图-1 Mysql 标志
MySQL的技术特点:
1. 它使用的核心线程是完全多线程,支持多处理器。
2. 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
3. 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何分配。没有内存漏洞。
4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。
5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
6. 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。
7. MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、、Python和TCL API。
&&& MaxDB是2003年SAP公司和MySQL AB公司合作之后SAP DB新的名称。MaxDB是一款重量级的、获得SAP R/3认证,适宜于联机事务处理和联机分析处理等多种业务类型的高可用性、高可靠性和极具伸缩性的数据库,支持大容量的用户和并发业务操作,采用多线程多进程的服务器设计,支持多处理器的,并通过集群和热部署提供高可靠性,支持TB级的海量数据,支持企业级的数据同步和复制等复杂应用。
2. PostgreSQL
&&& PostgreSQL是一种运行在Unix和Linux操作系统(在NT平台借助Cygnus也可以运行)平台上的免费的开放源码的关系数据库。最早是由美国加州大学伯克利分校开发的,开始只是作为一个演示系统发表,但是随着时间的推移,逐步分发,得到很多实际的应用,才逐步流行起来。PostgreSQ的网址是http://www.postgresql.org/,最新版本是日发布的8.0.4。PostgreSQL的官方发音是:Post-gres-Q-L。 PostgreSQ的标志是一个大象,见图-2。
 图2 PostgreSQL 标志
PostgreSQL的技术特点:
1. 支持SQL。作为关系数据库,它支持SQL89标准也支持部分SQL92大部分功能。
2. 有丰富的数据类型。许多数据类型是一些商业数据库都没有提供的。
3. 面向对象。它包含了一些面向对象的技术,如继承和类。
4. 支持大数据库,它不同于一般的桌面数据库,能够支持几乎不受限制大小的数据库,而且性能稳定。
5. 方便集成web,提供一些接口方便 PHP,Perl等语言操作数据库。
6. 事务处理。相对一些其他免费数据库如MySQL,他提供了事务处理,可以满足一些商业领域的数据需要。
7. PostgreSQL运行速度明显低于MySQL。因为MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
3. Firebird
&&& 2000年7月,Borland(即现在的Inprise)公司公布了其数据库产品Interbase的源代码。Firebird数据库就是从该数据库中派生出来的。当时,Interbase是与客户/服务器版本的Delphi产品捆绑在一些销售的。现在,Interbase已经变成了一只开放源码中的“火鸟”。 Firebird 网址是http://firebird.sourceforge.net/ ,最新版本是日发布的1.5.3。的标志是一只“火鸟”,见图-3。
 图-3 Firebird 标志
Firebird的技术特点
&&& Firebird相对MySQL和PostgreSQL来说比较小,其RPM版本只有3.0MB。这也使其可以称得上是理想的“嵌入式数据库”,可用于与其它应用程序服务器和应用程序捆绑。Firebird具有大部分成熟数据库所具有的功能,比如支持存储过程、SQL兼容等。如果用户有使用DB2或PostgreSQL的经验,就会发现Firebird与它们的语法非常相似,数据类型和数据处理方式也很类似。 Firebird的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据,但又不想花太多时间来调整数据性能的开发人员很适用。实际上在很多情况下,我们并不需要存储程序或复杂的表之间的关联。这时会发现Firebird在大小和功能之间找到了一个理想的平衡点。
&&& 现在有两个版本的Firebird服务器软件可供下载,分别是Firebird Super Server和Firebird Classic Server。简单来说,二者的区别在于设计的方法不同。Super Server使用线程同时为多个客户连接提供服务,而Classic Server使用的则是Interbase的方法,采用为每个连接提供一个独立服务器进程的方式。如果想对二者的区别有更多的了解,可查看/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic。对于“嵌入式数据库”的用户,这两个版本之间没有太大的区别。从理论上讲,如果应用程序的用户很多,那么Super Server将是一个较好的选择。
&&& mSQL(mini SQL)是一个单用户数据库管理系统,个人使用免费,商业使用收费。由于它的短小精悍,使其开发的应用系统特别受到互联网用户青睐。mSQL(mini SQL)是一种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,但在一些网络数据库应用中是足够了。由于mSQL较简单,在运行简单的SQL语句时速度比MySQL略快,而MySQL在线程和索引上下了功夫,运行复杂的SQL语句时比mSQL,PostgreSQL等都要快一些。MSQL的网址是:.au ,最新版本是日发布的3.7。MSQL的标志是一个鹿。见图-2。
图4 mSQL 标志
mSQL的技术特点:
&&& 安全性方面,mSQL通过ACL文件设定各主机上各用户的访问权限,缺省是 全部可读/写。mSQL缺乏 ANSI SQL 的大多数特征,它仅仅实现了一个最最少的API,没有事务和参考完整性。mSQL与Lite(一种类似C的脚本语言,与分发一起发行)紧密结合,可以得到一个称为 W3-mSQL的一个网站集成包,它是JDBC、ODBC、Perl和PHP API。
嵌入式数据库
&&& 嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL 来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照。
5. Berkeley DB
&&& 像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。Berkeley DB正是基于这样的思想提出来的。官方网址是:/ ,最新版本是日发布的4.3。的标志是一只“猫”,见图-4。
图5 Berkeley DB 标志
Berkeley DB的技术特点:
&&& Berkeley DB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。与常用的数据库管理系统(如MySQL和Oracle等)有所不同,在Berkeley DB中并没有数据库服务器的概念。应用程序不需要事先同数据库服务建立起网络连接,而是通过内嵌在程序中的Berkeley DB函数库来完成对数据的保存、查询、修改和删除等操作。
&&& Berkeley DB为许多编程语言提供了实用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。这样无论是系统中的多个进程,或者是相同进程中的多个线程,都可以在同一时间调用访问数据库的函数。而底层的数据加锁、事务日志和存储管理等都在Berkeley DB函数库中实现。它们对应用程序来讲是完全透明的。俗话说:“麻雀虽小五脏俱全。”Berkeley DB函数库本身虽然只有300KB左右,但却能够用来管理多达256TB的数据,并且在许多方面的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并发操作来说,Berkeley DB能够很轻松地应付几千个用户同时访问同一个数据库的情况。此外,如果想在资源受限的嵌入式系统上进行数据库管理,Berkeley DB可能就是惟一正确的选择了。
&&& Berkeley DB作为一种嵌入式数据库系统在许多方面有着独特的优势。首先,由于其应用程序和数据库管理系统运行在相同的进程空间当中,进行数据操作时可以避免繁琐的进程间通信,因此耗费在通信上的开销自然也就降低到了极低程度。其次,Berkeley DB使用简单的函数调用接口来完成所有的数据库操作,而不是在数据库系统中经常用到的SQL语言。这样就避免了对结构化查询语言进行解析和处理所需的开销。
&&& SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。它是作为 PHP V4.3 中的一个选项引入的,构建在 PHP V5 中。SQLite 支持多数 SQL92 标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言。SQLite 还非常健壮。其创建者保守地估计 SQLite 可以处理每天负担多达 100,00 次点击率的 Web 站点,并且 SQLite 有时候可以处理 10 倍于上述数字的负载。SQLite 的网址是,最新版本是日发布的3.2.7 。SQLite的标志是一只羽毛,见图-5。
图6 SQLite标志
SQLite的技术特点:
&&& SQLite 对 SQL92 标准的支持包括索引、限制、触发和查看。SQLite 不支持外键限制,但支持原子的、一致的、独立和持久 (ACID) 的事务(后面会提供有关 ACID 的更多信息)。这意味着事务是原子的,因为它们要么完全执行,要么根本不执行。事务也是一致的,因为在不一致的状态中,该数据库从未被保留。事务还是独立的,所以,如果在同一时间在同一数据库上有两个执行操作的事务,那么这两个事务是互不干扰的。而且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免于难,不会丢失数据或损坏。SQLite 通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
&&& 总结:目前的开源数据库还不能在功能和处理能力方面追上商业级产品,但价格的侵蚀力无法回避,开源数据库迅速增长的市场份额甚至让数据库领域的三巨头,Oracle、IBM、微软都感到忐忑不安。开源数据库的用户在增长,并正在被越来越多的用户所采用。在嵌入式数据库领域,开源数据库优势更加明显。分析师称开放源码正在迅速被数据库技术所采用。开放源码“从2000年被怀疑到2005年已经发展成为全球的主流技术”。低成本甚至免费的开源数据库时代即将来临。
(作者:曹江华责任编辑:郑重)
欢迎在新浪微博上关注我们
办公软件IT新闻整机

我要回帖

更多关于 开源数据库 的文章

 

随机推荐