标签:mysql集群 数据库中间件 vitess mysql分片 mysql扩展
Vanilla MySQL | Vitess |
---|---|
每个 MySql 连接都有一个内存开销,其范围介于 256KB 到几乎 3MB 之间,这取决于你所使用的 MySql 版本。随着你的用户群的增长,你需要增加内存以支撑增加的那些连接,但增加内存无助于提高查询速度。此外,在获取这些连接的时候还有大量的 CPU 开销。 | Vitess 基于 BSON 的协议创建非常轻量级仅约 32KB 的连接。Vitess 的连接池功能使用了 Go 语言的卓越的并发支持将这些轻量级的连接映射到一个小型的 MySql 连接池。因此,Vitess 可以很容易地同时处理数千个连接。 |
低效的写查询,比如一些没有设置一个限制的写查询,将会对所有用户的数据库性能产生负面影响。 | Vitess 所用的 SQL 解析器使用了一组可配置的规则对可能会降低数据库性能的查询进行重写。 |
分片是一个对你的数据进行分区来提高可扩展性和性能的过程。MySql 不支持分片,要求你自己去编写分片代码并在你自己的应用程序中嵌入分片逻辑。 | Vitess 使用基于范围的分片。它同时支持水平和垂直的重新切分,完成大多数数据的转换只需要仅仅几秒钟的只读的停机时间。Vitess 甚至可以适应你现有的一个自定义分片方案。 |
MySql 集群为保证可用性采用的是主从复制,有一个主数据库和几个副本数据库。主库宕机,某台从库将成为新的主库。这个要求你去管理数据库的生命周期并将当前的系统状态传达给你自己的应用程序。 | Vitess 帮你管理数据库的生命周期。它支持并自动应对各种场景,包括主库故障转移以及数据备份。 |
一个 MySQL 集群可以为不同的工作负载自定义数据库配置,比如一个只写的主库,满足 web 客户端快只读的副本库,可用于批处理作业的慢只读副本库,诸如此类。如果数据库已经水平切分,需要为每个分片重复安装过程,而且应用程序中需要内置如何才能找到合适的库的相关逻辑。 | Vitess 使用一个数据存储一致性的拓扑支持,比如 etcd 或者 ZooKeeper。这也就意味着集群视图始终是最新的而且对于不同的客户端也能始终保证其一致性。Vitess 还提供了一个高效地将查询路由给最适合的 MySql 实例的代理。 |
NoSQL | Vitess |
---|---|
NoSQL 数据库不定义数据库表之间的关系,并且仅支持 SQL 语言的一个子集。 | Vitess 并不是一个简单的键值存储。它支持复杂的查询语句,比如 where 子句、联接查询、聚集功能等等。 |
NoSQL 数据库不支持事务。 | Vitess 支持单个分片内的事务。Vitess 团队也正在探索使用两阶段提交支持跨分片事务的可行性。 |
NoSQL 解决方案拥有定制的 API,导致定制的架构、应用程序和工具。 | Vitess 仅添加了极小的变化到 MySql,一个绝大多数的人们都已经习惯使用的数据库。 |
相比 MySql 来讲,NoSQL 提供的数据库索引支持是有限的。 | Vitess 允许你使用 MySql 的所有索引功能来优化查询性能。 |
深入理解开源数据库中间件 Vitess:核心特性以及如何进行数据存储的堆叠
标签:mysql集群 数据库中间件 vitess mysql分片 mysql扩展
原文地址:http://blog.csdn.net/defonds/article/details/47813071