谈应用形态和分区分库

标签: 随笔文章 | 发表时间:2012-06-13 22:00 | 作者:人月神话
出处:http://blog.sina.com.cn/cmmi
对于业务系统,主要分为两种主要的形态,一种是以核心数据主导的业务系统,一种是以工单流程主导的业务系统。对于前一种典型的主要是资产系统,资源系统等,其中资产和资源都是核心数据,其余的所有业务功能都围绕核心业务数据展开,改变核心数据的属性状态或关联关系。而对于OA,电子运维等系统则是工单流程驱动型系统,这种系统往往并没有一个全局的核心数据层,不同业务类型下的单据相互之间相对独立。

对于第一种情况在进行业务模块划分的时候往往有一个公用的基础数据层或全局模型层,然后才会到具体的业务层,而业务层本身又根据核心业务对象的全生命周期展开进行划分。而对于第二种情况则相对简单,全局模型很薄,往往完全可以根据业务域或业务单据类型进行纵向划分即可。

对于第一种情况的分区和分库,一般我们会按照底层数据层模块,中间各业务生命周期来划分不同的业务模块,但是在这种情况下可以看到上层的业务模块往往全部需要依赖底层的数据提供业务模块。这样在对于整个业务系统来看的时候,无法真正的做到各个业务模块相互独立。数据层模块在这种情况下已经下沉为平台层数据提供业务组件,该组件为所有上层业务模块提供服务,和上层业务模块强耦合。在这种情况下业务对象管理模块发生任何变化都可能对上层模块造成影响。或者讲业务对象管理模块已经变化为整个应用的核心的领域层,承载了关键的领域逻辑,并为上层提供领域服务。

对于第二种情况,可以看到在进行业务模块切分的时候可以完全的做到全纵向切分,没有任何需要依赖的底层业务模块。传统情况下我们在进行组件化设计和开发的时候,往往只考虑了应用逻辑层的组件划分和隔离,而没有真正去考虑数据层数据表之间的分区和隔离,不同组件仍然可以随意的访问其他业务组件的底层数据表和对象。而在真正的组件化架构下,底层数据库各种数据对象仍然需要进行分区和隔离,比如对于不同的组件数据表进行分Schema存放。

业务组件按道理不应该清楚其它业务组件底层的数据库细节,因此跨业务组件间的协同应该在业务逻辑层完成,而不是组件到数据库的交叉访问。只有真正做到这一点后,才可能很好的支持后续业务系统的垂直分库操作。当单点出现性能瓶颈的时候,可以很方便的将原有的业务系统垂直划分为多个业务子系统,并分别进行部署和管理。在传统模式下,我们却很难真正的做到这一点。

在前面两种情况说明清楚后可以看到,对于第一种情况谈到的共享底层业务对象,我们可以考虑建立读写分离集群。而对于第二种工单流程型的业务系统,由于单据数据会随着业务工单不断增长,更加适合采用数据表的水平shading来满足可扩展性的问题。当同时存在两种情况的时候,往往则是读写分离+cluster的集合。

对于大型业务系统构建,一开始就需要考虑到后续业务增长情况,进行提前组件划分,对数据库进行分Schema设置,对于跨组件的方式进行接口设计和服务识别,确保业务组件间的交互只能通过服务进行,所有这些准备都是为了保证后续更好的进行大应用拆分。

   青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [应用 分区] 推荐:

谈应用形态和分区分库

- - 人月神话的BLOG
对于业务系统,主要分为两种主要的形态,一种是以核心数据主导的业务系统,一种是以工单流程主导的业务系统. 对于前一种典型的主要是资产系统,资源系统等,其中资产和资源都是核心数据,其余的所有业务功能都围绕核心业务数据展开,改变核心数据的属性状态或关联关系. 而对于OA,电子运维等系统则是工单流程驱动型系统,这种系统往往并没有一个全局的核心数据层,不同业务类型下的单据相互之间相对独立.

hiveQL分区表

- - CSDN博客云计算推荐文章
2、加载数据时显示指定分区值. 4、show partitions 可以查看表的分区. 注意:partitioned by 子句中定义的列,数据文件中并不包含这些列值. 5、select 使用分区列查询,hive会对输入做修剪;. 作者:u011984824 发表于2013-11-7 13:25:38 原文链接.

mysql分区举例---子分区

- - ITeye博客
mysql允许RANGE和LIST分区上再进行HASH和KEY的子分区. 建立ts3表和ts2一模一样. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

mysql分区举例---HASH分区

- - ITeye博客
    hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据数量大致一致. 在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;而在HASH分区中,MYSQL自动完成这些工作,用户所要做的只是基于将要被散列的列值指定一个列值或者表达式,以及指定呗分区的表将要被分割成的分区数量.

Oracle分区表及分区索引

- - Oracle - 数据库 - ITeye博客
分区表的几种分类:. 1、Range(范围)分区. 是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的. 比如按照时间划分,2012 年1 季度的数据放到a 分区,12年2 季度的数据放到b分区,. 因此在创建的时候呢,需要你指定基于的列,以及分区的范围值,如果某些记录暂无法预测范围,.

oracle分区详解

- - Oracle - 数据库 - ITeye博客
此文从以下几个方面来整理关于分区表的概念及操作:.         1.表空间及分区表的概念.         2.表分区的具体作用.         3.表分区的优缺点.         4.表分区的几种类型及操作方法.         5.对表分区的维护性操作. (1.) 表空间及分区表的概念.

MySQL分区技术

- - 数据库 - ITeye博客
mysql分区技术是mysql5.1以后出现的新技术,能替代分库分表技术,它的优势在于只在物理层面来降低数据库压力. 常用的MySQL分区类型:. 1.RANGE分区:基于属于一个给定的连续区间的列值,把多行分配给分区(基于列). 2.LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合的某个值来进行选择(基于列值是固定值的).

GUID分区表的学习

- 蛋布丁 - 标点符
先说说目前广泛使用的磁盘分区表方案. 传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容.

Partitioner分区过程分析

- - CSDN博客架构设计推荐文章
            Partition的中文意思就是分区,分片的意思,这个阶段也是整个MapReduce过程的第三个阶段,就在Map任务的后面,他的作用就是使key分到通过一定的分区算法,分到固定的区域中,给不同的Reduce做处理,达到负载均衡的目的. 他的执行过程其实就是发生在上篇文章提到的collect的过程阶段,当输入的key调用了用户的map函数时,中间结果就会被分区了.

oracle表分区详解

- - 博客园_首页
此文从以下几个方面来整理关于分区表的概念及操作:.         1.表空间及分区表的概念.         2.表分区的具体作用.         3.表分区的优缺点.         4.表分区的几种类型及操作方法.         5.对表分区的维护性操作.. (1.) 表空间及分区表的概念.