MySQL Cluster 与 MongoDB 复制群集分片设计及原理
分布式数据库计算涉及到分布式事务、数据分布、数据收敛计算等等要求 分布式数据库能实现高安全、高性能、高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Cluster从实现上来分析其中的设计思路,用以抽象我们在设计数据库
分布式数据库计算涉及到分布式事务、数据分布、数据收敛计算等等要求
分布式数据库能实现高安全、高性能、高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Cluster从实现上来分析其中的设计思路,用以抽象我们在设计数据库时,可以引用的部分设计方法,应用于我们的生产系统
首先说说关系及非关系数据库的特征
MySQL的Innodb及Cluster拥有完整的ACID属性
<code>A 原子性 整个事务将作为一个整体,要么完成,要么回滚 C 一致性 事务开始之前和事务结束以后,数据库的完整性限制没有被破坏 I 隔离性 两个事务的执行是互不干扰的,两个事务时间不会互相影响 D 持久性 在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的</code>
为了实现ACID,引入了诸如Undo、Redo、MVCC、TAS、信号、两阶段封锁、两阶段提交、封锁等实现,并引入数据存取路径,整个事情变得将极其复杂
MySQL遵循SQL标准、使用SQL标准的情况下,可以做到RDBMS之间的无缝迁移
其丰富的数据类型、完整的业务逻辑控制及表达能力一直作为商业应用的首选
MongoDB使用集合表示数据,不拥有ACID属性,其无类型、快速部署及快速开发得到了普遍的认可 不管是RDBMS还是MongoDB,无一都使用了索引结构,MongoDB支持B树索引,索引根据用户需要进行建立,可以嵌套在各个层次的各个容器之间构建
在数据库中,有两种数据存放方法:
1、堆:数据按照向后插入的方法,一直堆积在文件末尾,使用索引结构访问数据时,将在索引中得到数据指针,然后获取数据,当有数据删除时,将其从对应位置删除,对于频繁更新的堆表,需要定期进行优化,使用堆表,会导致数据顺序访问原则被打破(在DBMS中做了访问优化,性能得到部分提升),由于没有填充因子,在相同压缩算法下,空间能得到很大的节省,堆表很适合于顺序范围访问,如数据仓库等业务场景
2、索引组织:一般索引组织表使用B+作为构造方法,整个结构如同一个倒挂的树(从数据访问流来看),路由信息存放在树枝上,所有的数据存放在叶子节点,通过双向指针将所有叶子根据顺序方式串联起来,由于时空访问局限特性,这能很大提升数据性能,DBMS根据访问存取路径访问及构造数据,访问路径深度直接影响了性能,一般建议访问路径控制在4以内(小于或等于3),原因由于访问多层路径需要消耗更高的代价及维护索引树代价越来越昂贵
我们常见的Innodb、MySQL Cluster等都是索引组织表、MyISAM为堆表,MongoDB的组织结构为堆
拥有AICD属性的数据库拥有索引维护功能,MyISAM存储引擎及MongoDB由于是堆组织结构,且没有ACID的控制,会导致元数据与索引不一致问题,直接导致数据存取失效,造成数据不一致,但由于没有ACID的要求,更新(本文所阐述的更新包括包括所有的写入操作)速度将得到很大的提升,MyISAM存储引擎需要定期进行一致性check,正是因为不具有ACID属性,MyISAM存储引擎需要为数据更新锁定表,造成大并发下更新的低性能
MySQL Cluster 架构
Cluster分为SQL节点、数据节点、管理节点(MySQL Cluster提供了API供内部调用,外部应用程序可以通过API借口访问任意层方法)
SQL节点提供用户SQL指令请求,解析、连接管理,query优化和响、cache管理等、数据merge、sort,裁剪等功能,当SQL节点启动时,将向管理节点同步架构信息,用以数据查询路由
数据节点提供数据存取,持久化、API数据存取访问等功能
管理节点维护着节点活动信息,以及实施数据的备份和恢复等。管理节点会获取整个cluster环境中节点的状态和错误信息,并将各个cluster集群中各个节点的信息反馈给整个集群中其他的所有节点,这对于SQL节点的数据路由规则至关重要,当节扩容时,数据将会被rebuild
数据节点使用分片及多份数据存储,至少存放2份,数据存放于内存中,根据管理节点的规则进行持久化,作为数据存取地,需要大量内存支持SQL节点作为查询入口,需要消耗大量cpu及内存资源,可使用分布式管理节点,并在SQL节点外封装一层请求分发及HA控制机制可解决单点及性能问题,其提供了线性扩展功能管理节点维护着全局规则信息,当节点发生故障时,将会发生故障通告在整个Cluster体系中,任何一个组建都支持动态扩展,线性扩展,提供了高可用,高性能的解决方案
问题:
当新增数据节点时,需要重构存取路径信息,对管理节点将造成数据重构压力,该操作建议在非业务高峰时进行 Cluster使用自动键值识别数据分片方案,用户无需关心数据切片方案(在5.1及以后提供了分区键规则),透明实现分布式数据库,数据分片规则根据1主键、2唯一索引、3自动行标识rowid完成,再集群个数进行分布,其访问数据犹如RAID访问机制一样,能并行从各个节点抽取数据,散列数据,当使用非主键或分区键访问时,将导致所有簇节点扫描,影响性能(这是Cluster面对的核心挑战)
MongoDB 复制集架构,基于MongoDB复制,构造出的分布式数据库解决方案:
MongoDB提供了和MySQL Cluster类似的架构,在mongod、mongos、mongo中,包含:
<code>Mongod: 数据访问借口,将请求分发给Mongos节点 Mongs: 数据访问路由、查询优化、数据merge、sort,裁剪等功能 mongo:数据存取(使用mongo协议还提供直接数据访问)</code>
MongoDB在构建集合时,需要提供数据分片规则,该规则将被记录再mongos中,查询请求mongod将向mongos发起请求,mongos根据存取路径在mongo中访问数据 由于MongoDB为用户提供了一个选择性,将数据如何进行切片,在对用户访问透明的情况下,快速存取数据
MongoDB面临的问题:
以非分片规则访问数据时(索引可以建立在各个分片),将导致所有Mongo簇节点全扫描(可以通过多份冗余拷贝并进行不同的分片规则实现,这也是当前数据分片应用常用的手段) 当新增数据簇时,将导致所有数据节点重构,直接影响性能
总结:
MongoDB使用堆存取路径方法组织数据、不包含ACID特性对于数据大量数据更新及查询(对于拥有MVCC的架构,将降低在高并发、大数据集的响应速度)有很大的提升,但没有ACID保证关键数据的稳定、安全
MongoDB解决了MySQL Cluster的自动分片规则(5.1以后提供了用户定义功能),将MySQL Cluster的SQL节点数据处理工作移交给mongos,MySQL Cluster使用SQL->节点->SQL的访问路径,MongoDB使用Mongod->Mongos->节点->Mongos->Mongod的访问路径,从架构上来说,MySQL Cluster更为简单高效
MySQL Cluster拥有完整的商业支持及通用标准支持,相对丰富的管理工具,MongoDB拥有相对的性能优势,但缺少强大的稳定及安全支撑,丰富的管理工具,两者有各自的优势,但有差不多相同的致命弱点。
MySQL Cluster可以实现基于复制的拓扑架构,在不改变内部拓扑架构的情况下将数据同步至异地,形成星形拓扑,MongoDB在这方面还缺少相关的技术解决方案(当然可以是复制方案,但MySQL Cluster在较高的层次实现,MongoDB在较低层的方面实现,对于管理来说,将面临很大的挑战)
从商业上来说,MySQL Cluster拥有足够的商业使用价值,但缺陷也很明显,MongoDB对MySQL Cluster的改进很值得思考及在日常数据架构设计,模式设计中引入,但作为大面积商业应用,MySQL Cluster和MongoDB都还有很长一段路要走,不管是固有的缺陷还是管理模式上。
来自http://www.mysqlops.com/2012/04/05/mysql-cluster-与-mongodb-复制集分片设计及原理.html
原文地址:MySQL Cluster 与 MongoDB 复制群集分片设计及原理, 感谢原作者分享。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Root로 MySQL에 로그인 할 수없는 주된 이유는 권한 문제, 구성 파일 오류, 암호 일관성이 없음, 소켓 파일 문제 또는 방화벽 차단입니다. 솔루션에는 다음이 포함됩니다. 구성 파일의 BAND-ADDRESS 매개 변수가 올바르게 구성되어 있는지 확인하십시오. 루트 사용자 권한이 수정 또는 삭제되어 재설정되었는지 확인하십시오. 케이스 및 특수 문자를 포함하여 비밀번호가 정확한지 확인하십시오. 소켓 파일 권한 설정 및 경로를 확인하십시오. 방화벽이 MySQL 서버에 연결되는지 확인하십시오.

MySQL이 테이블 구조를 수정하면 메타 데이터 잠금 장치가 일반적으로 사용되므로 테이블을 잠글 수 있습니다. 자물쇠의 영향을 줄이려면 다음과 같은 조치를 취할 수 있습니다. 1. 온라인 DDL과 함께 테이블을 사용할 수 있습니다. 2. 배치에서 복잡한 수정을 수행합니다. 3. 소형 또는 피크 기간 동안 운영됩니다. 4. PT-OSC 도구를 사용하여 더 미세한 제어를 달성하십시오.

MySQL 데이터베이스에서 사용자와 데이터베이스 간의 관계는 권한과 테이블로 정의됩니다. 사용자는 데이터베이스에 액세스 할 수있는 사용자 이름과 비밀번호가 있습니다. 권한은 보조금 명령을 통해 부여되며 테이블은 Create Table 명령에 의해 생성됩니다. 사용자와 데이터베이스 간의 관계를 설정하려면 데이터베이스를 작성하고 사용자를 생성 한 다음 권한을 부여해야합니다.

데이터 통합 단순화 : AmazonRdsMysQL 및 Redshift의 Zero ETL 통합 효율적인 데이터 통합은 데이터 중심 구성의 핵심입니다. 전통적인 ETL (추출, 변환,로드) 프로세스는 특히 데이터베이스 (예 : AmazonRDSMySQL)를 데이터웨어 하우스 (예 : Redshift)와 통합 할 때 복잡하고 시간이 많이 걸립니다. 그러나 AWS는 이러한 상황을 완전히 변경 한 Zero ETL 통합 솔루션을 제공하여 RDSMYSQL에서 Redshift로 데이터 마이그레이션을위한 단순화 된 거의 실시간 솔루션을 제공합니다. 이 기사는 RDSMYSQL ZERL ETL 통합으로 Redshift와 함께 작동하여 데이터 엔지니어 및 개발자에게 제공하는 장점과 장점을 설명합니다.

1. 올바른 색인을 사용하여 스캔 한 데이터의 양을 줄임으로써 데이터 검색 속도를 높이십시오. 테이블 열을 여러 번 찾으면 해당 열에 대한 인덱스를 만듭니다. 귀하 또는 귀하의 앱이 기준에 따라 여러 열에서 데이터가 필요한 경우 복합 인덱스 2를 만듭니다. 2. 선택을 피하십시오 * 필요한 열만 선택하면 모든 원치 않는 열을 선택하면 더 많은 서버 메모리를 선택하면 서버가 높은 부하 또는 주파수 시간으로 서버가 속도가 느려지며, 예를 들어 Creation_at 및 Updated_at 및 Timestamps와 같은 열이 포함되어 있지 않기 때문에 쿼리가 필요하지 않기 때문에 테이블은 선택을 피할 수 없습니다.

MySQL은 Android에서 직접 실행할 수는 없지만 다음 방법을 사용하여 간접적으로 구현할 수 있습니다. Android 시스템에 구축 된 Lightweight Database SQLite를 사용하여 별도의 서버가 필요하지 않으며 모바일 장치 애플리케이션에 매우 적합한 작은 리소스 사용량이 있습니다. MySQL 서버에 원격으로 연결하고 데이터 읽기 및 쓰기를 위해 네트워크를 통해 원격 서버의 MySQL 데이터베이스에 연결하지만 강력한 네트워크 종속성, 보안 문제 및 서버 비용과 같은 단점이 있습니다.

MySQL에는 무료 커뮤니티 버전과 유료 엔터프라이즈 버전이 있습니다. 커뮤니티 버전은 무료로 사용 및 수정할 수 있지만 지원은 제한되어 있으며 안정성이 낮은 응용 프로그램에 적합하며 기술 기능이 강합니다. Enterprise Edition은 안정적이고 신뢰할 수있는 고성능 데이터베이스가 필요하고 지원 비용을 기꺼이 지불하는 응용 프로그램에 대한 포괄적 인 상업적 지원을 제공합니다. 버전을 선택할 때 고려 된 요소에는 응용 프로그램 중요도, 예산 책정 및 기술 기술이 포함됩니다. 완벽한 옵션은없고 가장 적합한 옵션 만 있으므로 특정 상황에 따라 신중하게 선택해야합니다.

MySQL 데이터베이스 성능 최적화 안내서 리소스 집약적 응용 프로그램에서 MySQL 데이터베이스는 중요한 역할을 수행하며 대규모 트랜잭션 관리를 담당합니다. 그러나 응용 프로그램 규모가 확장됨에 따라 데이터베이스 성능 병목 현상은 종종 제약이됩니다. 이 기사는 일련의 효과적인 MySQL 성능 최적화 전략을 탐색하여 응용 프로그램이 고 부하에서 효율적이고 반응이 유지되도록합니다. 실제 사례를 결합하여 인덱싱, 쿼리 최적화, 데이터베이스 설계 및 캐싱과 같은 심층적 인 주요 기술을 설명합니다. 1. 데이터베이스 아키텍처 설계 및 최적화 된 데이터베이스 아키텍처는 MySQL 성능 최적화의 초석입니다. 몇 가지 핵심 원칙은 다음과 같습니다. 올바른 데이터 유형을 선택하고 요구 사항을 충족하는 가장 작은 데이터 유형을 선택하면 저장 공간을 절약 할 수있을뿐만 아니라 데이터 처리 속도를 향상시킬 수 있습니다.
