标签:
Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer
Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能 获得更高的性能 。
Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。
因此提供更高的可用性,NDB的特点是数据全部存放在内存中,因此主键查找的速度极快,并且通过添加NDB数据存储节点可以线性的提高数据库性能,是高可用的集群系统。但是NDB存储引擎的链接操作是在mysql数据库层完成的,而不是在存储引擎层完成的,意味着复杂的连接操作需要巨大的网络开销,因此查询速度很慢。
Memory存储引擎(之前称为heap存储引擎):
将表中的数据存放在内存中,如果数据库重启或者发生崩溃,表中的数据都将消失,非常适用于存储临时数据的临时表,默认使用哈希索引,而不是B+树索引。只支持表锁,并发性能较差,而且存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存。
Archive存储引擎:
只支持insert和select操作,从mysql5.1开始支持索引,非常适合存储归档数据,如日志信息,其设计目标是提供高速的插入和压缩功能。
Federated存储引擎:
存储引擎表并不存放数据,他只是指向一台远程mysql数据库服务器上的表,只支持mysql数据库表,不支持异构数据库表(异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DBMS。)
Maria存储引擎:
设计目标是主要用来取代原有的mysql存储引擎,特点是支持缓存数据和索引文件,应用了行锁设计,提供了mvcc(多版本并发控制)功能,支持事务和非事务安全的选项,以及更好的blob字符类型的处理性能,
在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型。
下面给出几点区别:
一、主要差别
TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而 是把图片上传到服务器然后正文里使用<img>标签引用,这样的博客就可以使用TEXT类型。而BLOB就可以把图片换算成二进制保存到数据 库中。
二、类型区别
BLOB有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
TEXT也有4种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些类型同BLOB类型一样,有相同的最大长度和存储需求。
三、字符集
BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较
四、大小写
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,都一样!
五、严格模式
运行在非严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告。
六、其它
当保存或检索BLOB和TEXT列的值时不删除尾部空格。
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。
BLOB和TEXT列不能有默认值。
当排序时只使用该列的前max_sort_length个字节。max_sort_length的 默认值是1024。
当你想要使超过max_sort_length的字节有意义,对含长值的BLOB或TEXT列使用GROUP BY或ORDER BY的另一种方式是将列值转换为固定长度的对象。标准方法是使用SUBSTRING函数。
BLOB或TEXT对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。
除了以上的存储引擎,mysql还有很多其他的存储引擎,包括merge、csv、sphinx、infobright,他们都有各自的使用场所,
标签:
原文地址:http://blog.csdn.net/xulu_258/article/details/51066031