位置:搜学搜课 > 新闻 > 洛阳发布数据库架构分区技术应用注意事项
实战讲师
课程主题 | 课程内容 | 课程目标 |
阶段(Java基础) | ||
Java语言的特性 | 静态导入、自动封箱拆箱、可变参数、增强for、枚举、类加载器、反射、内省、泛型、注解、动态代理回 | 掌握Java语言的特性 |
Java多线程 | 多线程加强、线程池、Thread Local | 掌握Java线程池技术,掌握线程的Join、notify、notifyAll等机制 |
XML | Dom解析、Sax解析、Pull解析 Schema |
基于Xml的解析与维护 |
Web | Html,Css,Js | 掌握简单的Html,Css,Js的编写 |
实训项目一:易买网项目 | ||
第二阶段(Web阶段,易买网项目贯穿) | ||
JAVAWEB前端技术 | 项目介绍、项目开发流程 Html、CSS、JS |
了解真实项目开发流程 掌握前端开发基本技术 |
JAVAWEB基础技术 | Tomcat、HTTP协议、Servlet、Jsp、EL、JSTL、自定义标签 MVC、JAVAWEB三层架构 软件分层、耦合、解耦 AJAX |
掌握JAVAWEB基础知识 深入理解软件分层思想 AJAX实现异步刷新 |
JAVAWEB技术 | Filter、Listener 文件上传、下载 在线支付 |
过滤器、监听器及常见应用场景 文件上传、下载 在线支付功能实现 aa |
JAVAWEB框架加强 | 面向切面编程 通过注解控制事务 java基础加强、框架加强 |
JAVA特性 熟悉常见设计模式 通过模拟实现框架功能,为后续学习SSH打基础 |
实训项目二:国际物流项目 | ||
第三阶段(Struts,Hibernate,Spring,SSH项目贯穿) | ||
Struts2 | 分析Servlet缺点,进行重构 Struts.xml配置文件 ValueStack Ognl表达式 属性驱动、模型驱动、拦截器、文件上传、token机制等 |
掌握Struts2在项目开发时用到的各种知识点,能够应用 该框架熟练的开发 |
Hibernate | ORM的概念、CRUD的完成、Hibernate常用的配置、API详细的分析、对象的三种状态、关联关系、检索、优化、缓存机制 | 熟练掌握利用Hibernate框架完成项目的开发,深入理解ORMapping的概念,深入理解缓存机制 |
Spring | IOC、DI、动态代理模式、AOP、基于Spring的数据库编程、Spring的声明式事务处理,Struts2与Hibernate与Spring的整合 | 深入理解SpringIOC、DI在软件架构中的作用,深入理解SpringAOP的实现机制和应用场景,Struts2的特性(对象工厂、静态注入、插件机制、ThreadLocal针对ActionContext的封装、Struts2的核心流程、结果集架构)、深入理 解SSH整合的原理 |
JQuery | JQuery常见选择器的应用 | 利用JQuery控制Web界面 |
JS | JS面向对象的特征 | 对象、原型、闭包、JQuery内部结构解析等 |
Maven | Maven的概念、使用、原理、 Module的概念、仓库 |
能用Maven搭建项目环境 熟练使用Maven的依赖和继承机制 |
SSH项目:国际物流 | 项目背景、系统USE CASE图、系统功能结构图、系统框架图、国际物流核心业务货运管理、购销合同业务、购销合同下货物、出口报运单、装箱单、委托书、发票、财务统计、海量数据导出、出口报运、装箱业务、Shiro安全框架、工作流Activiti5 | 掌握画USECASE图、系统结构图、系统框架图。 面试能顺畅讲述国际物流核心业务,包括:购销合同、出口报运、装箱、委托、发票、财务。 了解大型数据库设计思路,及数据库在设计上如何优化。 熟练实现合同、货物、附件两级主从结构。 熟练POI制式表单应用。 熟练应用Shiro安全框架。 熟练应用工作流Activiti5实现货运管理流程控制。 |
实训项目三:易买电商项目 | ||
第四阶段(SpringMVC,Mybaties,SSM项目贯穿) | ||
SpringMVC | 模拟SpringMVC的核心部件写一个例子、核心分发器、处理器映射、适配器、控制器、注解开发实例、标签机制、拦截器机制、AJAX与JSON调用 | 熟练掌握SpringMVC的各个组件,理解SpringMVC的架构原理,利用SpringMVC开发项目 |
MyBaties | CRUD操作、SqlSessionFactory对象、SqlSession对象、集合参数、动态SQL语句、代码优化、Mapper的接口、关联关系、缓存机制、拦截器、MyEclipse插件的使用 | 熟练掌握SpringMVC的各个组件,理解SpringMVC的架构原理,利用SpringMVC开发项目 |
SSM项目(易买电商) | 项目需求讲解、环境的搭建、后台系统实现、前台系统搭建、内容管理实现、Redis缓存解决前台访问性能问题、单点登录、异步订单系统处理、Lucene与Solor实现文件的检索、ActivityMQ实现消息的异步通信、MySQL的数据库的读写分离、分布式环境的部署和实施 | 了解电商项目的需求分析,掌握用pom.xml文件构建项目,实现电商项目的前台的内容管理、菜单管理、购物等。掌握Redis缓存如何提供性能、利用Solor做全文检索、利用ActivityMQ的异步机制把缓存中的改动同步到 各个环节、掌握MySQL的主从复制和读写分离。利用lvs,keepalived,nginx,tomcat搭建高并发的web环境 |
实训项目四:电信项目 | ||
第五阶段(分布式、高并发、集群、电信项目贯穿) | ||
网络编程 | Socket、Io、Nio、Mina、RPC技术、多线程、线程池 | 把电信项目的部分环节利用mina、RPC技术实现 |
数据仓库 | 数据仓库基础知识 ETL MySQL的导入工具、分表,分区、读写分离、存储过程级多维分析 |
掌握数据仓库的知识内容,这是云计算分析的基础 |
分布式缓存 | 学习MemoryCache与Redis两种缓存 | 掌握两种缓存的原理、以及操作 |
Zookeeper | Zookeeper的选举、数据的同步、Zookeeper的部署、Follow与Leader | 了解Zookeeper的选举算法、同步机制、掌握Zookeeper的集群的搭建 |
集群 | Keepalived的Loadblancing机制、Nginex反向代理服务器、Tomcat集群、Lvs | 利用Lvs、Keepalived、Nginx、Tomcat搭建高并发、分布式的Web服务器 |
SOA | Rest风格的服务架构、基于Rest风格的WebService的使用、dubbo服务框架的使用 | 利用服务性框架使得系统的耦合性更弱,扩展性更强 |
云计算 | 云计算的概念、Iaas、 Paas、Saas的理解、虚拟化的概念 | 理解云计算 |
电信项目 | 把上面所学的知识点全部结合起来做电信行业的日志分析系统 | 通过项目掌握MySQL的集群、读写分离、优化、掌握Mina框架的通信机制、掌握Zookeeper的高可用机制、利用MySql掌握数据仓库的概念、利用分布式缓存提高系统的性能 |
实训项目五:电信项目 | ||
第六阶段(Hadoop,Spark,电信项目贯穿) | ||
Hadoop的分布式文件系统HDFS | HDFS的概念、HDFS的API的应用、NameNode与SecondaryNameNode与DataNode的原理与通信机制、数据块Block的概念、NameNode的文档目录树、NameNode与DataNode的关联 | Hadoop伪分布式的搭建、利用HDFS的API对分布式文件系统进行操作、掌握NameNode与SecondaryNameNode的通信原理、掌握NameNode与DataNode的通信原理 |
Hadoop的计算框架MapReduce | 利用MapReducer的计算框架实现电信日志的分析、深入理解Shuffle机制、FileOutPutFormat、FileInPutFormat | 熟练Map、Reducer、Sort、Partition的编程、深入理解Shuffle机制、深入理解OutPutFormat与InputFormat、基于Hadoop的对象序列化机制 |
Hadoop的资源管理与资源调度 Yarn框架 |
深入理解MapReducer的通信机制:利用Yarn的资源管理和资源调度机制。理解进程ResourceManager,NodeManager,ApplicationMaster等进程的作用 | 深入理解Yarn的资源管理与资源调度机制。掌握整个MapReducer的计算流程和资源调度流程 |
HBase | 搭建NOSQL数据库HBase的集群、利用Zookeeper做HBase的HA机制 | 掌握HBase的集群的的搭建 |
HIVE | 数据仓库基础知识、Hive定义、Hive体系结构简介、Hive集群、客户端简介、 HiveQL定义、HiveQL与SQL的比较、数据类型、外部表和分区表、表的操作与CLI客户端演示、数据导入与CLI客户端演示、查询数据与CLI 客户端演示、数据的连接与CLI客户端演示、用户自定义函数(UDF)的开发与演示 | 利用HIVE做日志分析的查询 |
Spark | Spark介绍:Spark应用场景、Scala编程语言、Scala编程、Spark集群部署等 | 利用Spark流式编程做日志的分析 |
电信项目 | 把第四阶段的电信项目用Hadoop与Spark实现 | 熟练应用Hadoop的MapReducer,Hive与Spark |
1、分区与复制
分区一般和复制搭配使用,即每个分区的多个节点都有副本。这意味着,某条记录属于特定的分区,而同样内容会存储在不同的节点上,以提高系统容错性。
一个节点可能存储多个分区。主从复制模型和分区组合时数据的分布情况。每个分区都有自己的主副本,如被分配给某节点,而从库副本被分配给其他节点。一个节点可能是某些分区的主副本,同时也是其他分区的从副本。
2、KV数据的分区
分区的主要目标:将数据和查询负载均匀分布在各节点。若每个节点平均分担数据和负载,则理论上10个节点能处理10倍的数据量和10倍于单节点的读写吞吐量(暂忽略复制)。
但若分区不均,则会导致某些分区节点比其他分区有更多数据量或查询负载,即倾斜,这会导致分区效率下降很多。极端情况下,所有负载可能压在一个分区节点,其余9个节点空闲,系统瓶颈落在这忙的节点。这时的高负载分区即是系统热点。
3、避免热点
简单的,将记录随机分配给所有节点。这能在所有节点比较均匀分布数据,但缺点是:试图读取特定数据时,不知道保存在哪个节点,必须并行查询所有节点。
可以优化该方案。假设数据是简单的KV数据模型,即总能通过K访问记录。如在一本百科全书,可通过标题查找一个条目;而所有条目按字母序排序,因此能找到目标条目。
4、根据K的范围分区(KeyRange分区策略)
一种分区方案,为每个分区指定一块连续的K范围。若知道K区间的边界,就能轻松确定哪个分区包含这些K。若你还知道分区所在的节点,则可直接请求相应节点。
每个分区中,可按K排序保存。范围扫描就很简单,将K作为联合索引来处理,从而在一次查询中获取多个相关记录。假设有个程序存储网络传感器的数据,K是测量的时间戳(年月日-时分秒)。范围扫描此时很有用,可获取某月内的所有数据。
缺点
某些访问模式会导致热点。若K是时间戳,则分区对应于一个时间范围,如每天一个分区。测量数据从传感器写入DB时,所有写入操作都集中在同一分区(即当天的分区),导致该分区在写入时处于高负载,而其他分区始终空闲。
为避免该问题,需要使用时间戳之外的内容作为K的一项。可考虑每个时间戳前添加传感器名称,这样先按传感器名称,再按时间进行分区。假设多个传感器同时运行,则写入负载终会均匀分布在多个节点。当想要获取一个时间范围内、多个传感器的数据,可根据传感器名称,各自执行单独的范围查询。
5、根据键的Hash分区
由于数据倾斜和热点问题,许多分布式系统采用基于K散列函数来分区。
好的散列函数可处理倾斜数据并使其均匀分布。
数据分区目的的hash函数无需健壮的加密能力,如Cassandra和MongoDB使用MD5。许多编程语言也有内置的简单哈希函数(主要用于哈希表),但可能不适合分区:如Java的Object.hashCode(),同一K可能在不同进程中有不同哈希值。
6、一致性哈希
一种平均分配自己负载的方法,初用于内容分发网络(CDN)等互联网缓存系统。采用随机选择的分区边界来规避中央控制或分布式共识。此处的一致性与副本一致性或D一致性无任何关联,它只描述了数据动态平衡的一种方法。
正如“分区再平衡”中所见,这种特殊分区方法对于DB实际上效果并非很好,所以目前很少使用(虽然某些DB的文档仍会使用一致性哈希说法。
但通过hash分区,失去的执行范围查询的能力:即使相邻的K,经过hash后也会分散在不同分区。MongoDB中,若使用hash分区,则范围查询都必须发送到所有分区。而Couchbase或Voldemort干脆直接不支持K的范围查询。
7、负载偏斜与热点消除
hash分区可减少热点,但无法完全避免:极端情况下,所有读/写操作都是针对同一K,则所有请求都会被路由到同一分区。
大多数据系统仍无法自动消除这种高度偏斜的负载,只能通过应用层来减少倾斜。如某K被确认为热点,简单方法是在K的开始或结尾添加一个随机数。只要一个两位数的十进制随机数就能将主键分散为100种不同的K,从而存储在不同分区。
尊重原创文章,转载请注明出处与链接:http://www.soxsok.com/wnews768699.html 违者必究! 以上就是关于“洛阳发布数据库架构分区技术应用注意事项”的全部内容了,想了解更多相关知识请持续关注本站。