分类 数据库 下的文章

读用面向对象的思维方式来设计数据库之所想

刷微博的时候无意中看到一篇讲用面向对象的思维方式来设计数据库的文章(链接地址),突然想到之前在AILK呆的三年,不论是电信的资源系统还是后来的电信ITSP3.0大类建模,都是基于面向对象的思维方式来设计的数据库啊。

对某一类型资源的管理,抽象出基础和共有的属性作为主表,对于不同子类型的特有属性则放入扩展表进行管理。扩展表可以是横表(进一步抽象子类型共有属性)和纵扩展表,纵扩展表方便扩展,通过增加属性ID的方式可以给不同类型的资源增加属性数据,动态可扩展。模型这样来设计的话,可以节省很多的代码开发量,接口的设计也更加简单。

回顾之前做过的资源系统,觉得还是有点强大的。这个系统的有个特别的地方,在于它的可配置思想。
系统管理部分,系统菜单和权限、界面的显示控件、不同类型资源的显示内容等等一切都是可以配置的,可以快速开发新的功能响应新的需求。
后面ITSP3.0的大类建模思想又在这个基础上更进一步,综合了几个不同公司的系统模型进行统一和优化。现在想想,如果让我来设计有电信这么多复杂业务的系统,我怕是还得修炼几年。

一个系统的架构设计包含它的技术架构和业务架构,资源系统的技术架构没什么特别的地方,数据模型和业务上的设计才是这个系统的精髓。以前身在其中没有多少感受,现在离开AILK后慢慢回想,渐渐的有所收获。

13年的时候华为打了两次电话没去,留在AILK呆满了三年,现在回想起来还是值得的。

附:
各种大型网站技术架构(文章:51CTO)
大型网站技术架构(书籍:豆瓣)

大数据量表复制

`问题:
一张有1000W行数据的table表需要复制到另一张表中,如何高效的复制?`

方法一:
insert插入语句使用append+nologging和parallel并发执行。
Tips:parallel并发数和硬件软件有关,效率需要测试

insert /*+APPEND parallel (degree 2) */ into tmp nologging select * from table;

方法二:
使用Create table … as 创建unrecoverable临时表
Tips:CTAS因为减少I/O所以比较快,unrecoverable能减少建表时间,同时减少资源占用

Create Table tmp
  tablespace USERS
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
(
  initial 1M
  next 1M
  minextents 1
  maxextents unlimited
  pctincrease 0
) unrecoverable
parallel (degree 2) as select * from table nologging;

扩展阅读:

日志记录模式:LOGGING 、FORCE LOGGING 、NOLOGGING
Oracle大表复制

NoSQL入门

NoSQL释义:
non-relational或者Not Only SQL,泛指非关系型数据库,它的出现,弥补了关系型数据(如MySQL)在某些方面的不足,在某些方面能极大的节省开发和维护成本。
计算机体系结构在数据存储方面要求具备庞大的水平扩展性(只能够连接多个软硬件的特性,可以将多个服务器从逻辑上看是一个实体),而NoSQL致力于改变这一现状。

NoSQL特点:
易扩展:NoSQL数据库去掉了关系型数据库的关系型特性,数据之间无关系,这样就非常容易扩展。
大数据量,高性能:NoSQL数据库都具有非常高的读写性能,大数据量下同样表现优秀。一般MySQL使用Query Cache,每次表更新Cache就失效,是一种大粒度的Cache,在频繁的web交互中这种cache性能不高。而NoSQL的Cache是记录级的细粒度Cache,所以在这个层面上性能就要高很多了。
灵活的数据模型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库中增删字段是一件非常麻烦的事情,大数据量的表更加糟糕。
高可用:NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。

NoSQL数据库:

nosql_database.jpg

扩展阅读:

一网打尽当下NoSQL类型、适用场景及使用公司

NoSQL系列文章——孙立: