IMDB数据库管理系统
简介
该数据库是一种特性非常齐全的对象-关系型国产化数据库管理系统,ImDB支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,imdb也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。
功能优势
(1) imdb是一种特性非常齐全的对象-关系型数据库管理系统,imdb支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。imdb也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。
(2) 操作系统支持WINDOWS、Linux、UNIX、MAC OS X、BSD。
(3) 从基本功能上来看,支持ACID、关联完整性、数据库事务、Unicode多国语言。
(4) 表和视图方面,ImDB支持临时表,而物化视图,可以使用PL/Perl、PL/Python或其他过程语言的存储过程和触发器模拟。
(5) 索引方面,全面支持R-/R+tree索引、哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN(用来加速全文检索)、支持位图索引。
(6) 其他对象上,支持数据域,支持存储过程、触发器、函数、外部调用、游标
(7) 数据表分区方面,支持4种分区,即范围、哈希、混合、列表。
(8) 从事务的支持度上看,对事务的支持与MySQL相比,经历了更为彻底的测试。
(9) My ISAM表处理方式方面,MySQL对于无事务的MyISAM表,采用表锁定,1个长时间运行的查询很可能会阻碍对表的更新,而imdb不存在这样的问题。
(10) 从存储过程上看,imdb支持存储过程。因为存储过程的存在也避免了在网络上大量原始的SQL语句的传输,这样的优势是显而易见的。
(11) 用户定义的函数的扩展方面,imdb可以更方便地使用UDF(用户定义函数)进行扩展。
(12) imdb的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足的进步,然而很多Mysql用户都遇到过Server级的数据库丢失的场景—Mysql系统库是MyISAM的,相较而言,imdb数据库在这方面要好一些。
(13) 任何系统都有他的性能极限,在高并发读写,负载逼近极限下,imdb的性能指标仍然可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而MySQL明细出现一个波峰后下滑。
(14) imdb因为它有丰富的几何类型,实际上不止几何类型,imdb中有大量的字典、数组、bitmap等数据类型,相比之下MaySQL就差很多,insagram就是因为imdb的空间数据库扩展POSTGIS远远强于MySQL的my spatial而采用imdb的。
(15) imdb的“无锁定”特性非常突出,甚至包括vacuum这样的整理数据空间的操作,这个和imdb的MVCC实现有关系。
(16) imdb的可以使用函数和条件索引,这使得imdb数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
(17) imdb有极其强悍的SQL编程能力,有丰富的统计函数和统计语法支持,比如分析函数,还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MySQL就差的很远,很多分析功能那个都没有,腾讯内部数据存储主要是Mysql,但是主要的数据分析就是Hadoop+imdb。
(18) imdb的有很多中集群架构可以选择,plproxy可以支持语句级的镜像或者分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或者流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
(19) 一般关系型数据库的字符串有限定长度8k左右,无限长Text类型的功能受限,只能作为外部大数据访问。而imdb的TEXT类型可以直接方法,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用imdb的话,文档数据库就可以省略了
(20) 对于web应用来说,复制的特性很重要,Mysql到现在也是异步复制,imdb可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate, 是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,imdb的复制基于wal,可以做到同步复制。同时imdb还提供stream复制。