1.MongoDB
Mongo
是一个高性能,开源,面向集合的无模式文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键
/
值存储方式。
Mongo
使用
C++
开发。面向集合
,
意思是数据被分组到若干集合
,
这些集合称作聚集
(collections).
在数据库里每个聚集有一个唯一的名字
,
可以包含无限个文档
.
聚集是
RDBMS
中表的同义词
,
区别是聚集不需要进行模式定义
.
模式自由
,
意思是数据库并不需要知道你将存入到聚集中的文档的任何结构信息
.
实际上
,
你可以在同一个聚集中存储不同结构的文档
.
文档型
,
意思是我们存储的数据是键
-
值对的集合
,
键是字符串
,
值可以是数据类型集合里的任意类型
,
包括数组和文档
.
我们把这个数据格式称作
“[BSON]”
即
“Binary Serialized dOcument Notation”.
1)MongoDB
特点
:
Ø
动态查询
Ø
全索引支持,扩展到内部对象和内嵌数组
Ø
查询记录分析
Ø
快速,就地更新
Ø
高效存储二进制大对象 (比如照片和视频)
Ø
复制和故障切换支持
Ø
Auto- Sharding自动分片支持云级扩展性
Ø
MapReduce 支持复杂聚合
2)
适用场合:
Ø
网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
- 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
- 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
- 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
3)
不适用场合:
- 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
- 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
MongoDB
官方网址:
http://www.mongodb.org/
。目前
MongoDB
有很多
PHP
编写的管理工具,如
RockMongo,Opricot,phpMoAdmin
。
2.
PostgreSQL
最早是由美国加州大学伯克利分校开发的,开始只是作为一个演示系统发表,但是随着时间的推移,逐步分发,得到很多实际的应用,才逐步流行起来。如果很粗略地观察PostgreSQL,会觉得这个数据库系统和其它数据库很类似。因为 PostgreSQL 使用 SQL 语言来在执行资料的查询。这些资料通过连外键联系在一起,以一系列表格的形式存在。PostgreSQL 相对于竞争者的主要优势,主要的特征为可编程性:对于使用数据库资料的实际应用,PostgreSQL 让开发与使用的工作,变得更加容易。SQL 数据在"平面表格"中存储简单的数据类型,需要用户使用查询把有关的信息收集在一起。这与应用和用户利用数据自身的方式相对立,典型的使用带有丰富数据类型的高级语言,在其中所有有关的数据作为它自己的一个完整单元来操作。典型的称呼为记录或对象(依据各自语言)。转换来自 SQL 世界的信息到面向对象编程世界体现得很困难,因为两者有非常不同的数据组织的模型。工业界把这个问题称为阻抗不匹配:从一个模型映射到另一个要花费项目开发者 40% 的时间。一些映射解决方案,典型的称为对象-关系映射,致力于这个问题,但是它们花费很多并有自身的问题,导致糟糕的性能或强制所有的数据访问通过映射所支持的一种语言来进行。PostgreSQL 可以直接在数据库中解决很多这种问题。PostgreSQL 允许用户定义基于正规的 SQL 类型的新类型,允许数据库自身理解复杂数据。例如,你可以定义一个 address 来组合一些事物如街道编号、城市和国度的字符串。从这一点上你可以轻易的建立把保存地址的所需要的所有字段包含在一个单一行列中的表。
PostgreSQL的技术特点:
Ø
支持SQL。作为关系数据库,它支持SQL89标准也支持SQL92大部分功能。
Ø
有丰富的数据类型。许多数据类型是一些商业数据库都没有提供的。
Ø
面向对象。它包含了一些面向对象的技术,如继承和类。
Ø
支持大数据库,它不同于一般的桌面数据库,能够支持几乎不受限制大小的数据库,而且性能稳定。
Ø
5. 方便集成web,提供一些接口方便 PHP,Perl等语言操作数据库。
Ø
6. 事务处理。相对一些其他免费数据库如MySQL,他提供了事务处理,可以满足一些商业领域的数据需要。
Ø
7. PostgreSQL
运行速度低于
MySQL
。因为
MySQL
使用了线程,而
PostgreSQL
使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
PostgreSQL
官方网址:
http://www.postgresql.org/
。PostgreSQL可使用Navicat Lite管理工具
3.Firebird
2000
年
7
月,
Borland
(即现在的
Inprise
)公司公布了其数据库产品
Interbase
的源代码。
Firebird
数据库就是从该数据库中派生出来的。当时,
Interbase
是与客户
/
服务器版本的
Delphi
产品捆绑在一些销售的。现在,
Interbase
已经变成了一只开放源码中的
“
火鸟
”
。
Firebird
的技术特点:
Firebird
相对
MySQL
和
PostgreSQL
来说比较小,其
RPM
版本只有
3.0MB
。这也使其可以称得上是理想的
“
嵌入式数据库
”
,可用于与其它应用程序服务器和应用程序捆绑。
Firebird
具有大部分成熟数据库所具有的功能,比如支持存储过程、
SQL
兼容等。如果用户有使用
DB2
或
PostgreSQL
的经验,就会发现
Firebird
与它们的语法非常相似,数据类型和数据处理方式也很类似。
Firebird
的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据,但又不想花太多时间来调整数据性能的开发人员很适用。实际上在很多情况下,我们并不需要存储程序或复杂的表之间的关联。这时会发现
Firebird
在大小和功能之间找到了一个理想的平衡点。
Firebird
的官方网址:
http://www.firebirdsql.org/
。
4.SQLite
SQLite
是
D. Richard Hipp
用
C
语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。它是作为
PHP V4.3
中的一个选项引入的,构建在
PHP V5
中。
SQLite
支持多数
SQL92
标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言。
SQLite
还非常健壮。其创建者保守地估计
SQLite
可以处理每天负担多达
100,00
次点击率的
Web
站点,并且
SQLite
有时候可以处理
10
倍于上述数字的负载。
SQLite的技术特点:
SQLite
对
SQL92
标准的支持包括索引、限制、触发和查看。
SQLite
不支持外键限制,但支持原子的、一致的、独立和持久
(ACID)
的事务(后面会提供有关
ACID
的更多信息)。这意味着事务是原子的,因为它们要么完全执行,要么根本不执行。事务也是一致的,因为在不一致的状态中,该数据库从未被保留。事务还是独立的,所以,如果在同一时间在同一数据库上有两个执行操作的事务,那么这两个事务是互不干扰的。而且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免于难,不会丢失数据或损坏。
SQLite
通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
SQLite
官方主页:
http://www.sqlite.org/
。
SQLite
也可以使用
Navicat Lite工具
5.Berkeley DB
像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。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语言。这样就避免了对结构化查询语言进行解析和处理所需的开销。
各种数据库选型综合性分析:
开源数据库
|
主要特性
|
性能
|
学习难度
|
发展趋势
|
MongoDB
|
面向集合存储,易存储对象类型的数据,模式自由,易部署,动态查询,完整的索引支持,查询监视,复制及自动故障转移等特性
|
MongoDB
读写效率高于
Mysql
,缺点是占用的磁盘空间很大,这是因为它占用的磁盘空间是预分配的
|
一般
|
NOSQL
的主流,社区活跃,有很好的发展性。目前全球最大的分类信息网站
Craigslist
,全球最大的互动娱乐软件开发商
ElectronicArtsInc
都使用
mongoDB
|
PostgreSQL
|
支持大部分
SQL
标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、多版本并发控制。同样,
PostgreSQL
可以用许多方法扩展,比如,
通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言。
|
PostgreSQL
适合
大量数据,密集运算,重型负载应用,在大数据量情况下性能稳定
|
较难
|
具有传统商业数据库系统的功能,同时又含有将在下一代
DBMS
系统的使用的增强特性。
PostgreSQL
是自由免费的,有着活跃的志愿者队伍。巴斯福,世界上最大的化工公司,使用
PostgreSQL
为美国农业综合业电子商务网站存储数据。
|
Firebird
|
语法和
DB2
、
PostgreSQL
很相似,具有跨平台、高并发、高性能等特点,被很多应用系统采用。它非常小,适合轻量级嵌入式数据库
|
支持
C/S
模式,可以作为内嵌数据库,性能方面优于
Access
数据库
|
容易
|
Firebird
可应用于各种领域,胜任关键性任务。其独创的
“
多代版本体系
”
使得系统短小精悍,高效健壮。
Firebird 3.0
发布后,
Jim Starkey
会在
Firebird
中嵌入
Java
虚拟机来支持触发器、存储过程、用户自定义函数。可以预见,在
Jim Starkey
的领导下,未来的
Firebird
会越飞越高
|
SQLite
|
对
SQL92
标准的支持包括索引、限制、触发和查看。
SQLite
不支持外键限制,支持事务,
不需要配置,不需要安装,也不需要管理员,最大支持数据库到
2T
|
SQLite
是文件数据库,它的写操作的性能比
Mysql
差
|
容易
|
从
2000
年,经过多年的发展,直到今天已经成为最流行的嵌入式数据库,包括
Google
在内的公司在其桌面软件中亦使用
sqlite
存储用户数据。
|
Berkeley DB
|
直接链接到应用程序中,数据库操作并不要求进程间通讯,为多种编程语言提供了
API
接口,所有的数据库操作都在程序库内部发生
|
Mysql
后台就是使用
Berkeley DB
实现的,它比
Mysql
快
N
倍
|
容易
|
2.0
版本或以上的
Berkeley DB
由
Sleepycat
公司开发,
2006
年
Sleepycat
公司被
Oracle
公司收购,继续提升
Berkeley DB
在软件行业的声誉
|
总结:
我只列举了这几种主流开源数据库,对于
IBM
提供的
DB2 Express-C
、
ORACLE
提供的
Oracle XE
免费数据库功能上还是受到一些限制,在这里没有列举,
mysql
不完全免费也没有说明。可视化选型一种开源数据库,我个人更倾向于
PostgreSQL
和
Mongodb,
这是因为
PostgreSQL
功能强大支持可编程性,支持很多数据类型,还可以自定义数据类型存储
GIS
图元,支持大数据,虽然它的连接采用进程因而速度比不上
Mysql
快,但是稳定性比
Mysql
好。
PostgreSQL
网上资料很多,社区也比较活跃。
Mongodb
面向集合,无模式的,这种主要可以做到
NOSQL
,集合就相当于关系数据库中的表。
适合实时数据存储,也可用到可视化中。
Firebird
则更适合做嵌入式的数据库,网上的资料不是很多。
SQLite
是嵌入式数据库引擎,更适合做
CMS
(
内容管理系统
)
。
Berkeley DB
现在属于
Oracle
旗下,
2.0
版本以上就不能自由商业应用,而且它的使用不需要数据库连接,数据库操作都是调用它的函数库,不太适合集成到可视化。