您的位置:首页 > 数据库

问题5:数据库设计

2016-12-30 15:38 204 查看
数据库设计使用的工具,通过图表可以非常简单易懂理解各个表的关系,一般使用PowerDesigner或ERwin进行表设计,创建ER(实体关系模型)图表,然后导出sql脚本。特别注意,通过工具导出脚本包含外键设计,需要去除外键语句。若是中途接手的项目,没有任何设计文档,可以使用工具逆向工程生成ER图表。

从业务读写特性来看,业务可以实现读写分离。目前二手房,新房,基础数据库采用mha架构,一主多从,非核心业务的读需求可以访问其中一个从库,离线和统计分析,备份等运维操作的读需求访问另外一个从库。还有一个从库专门做数据库热备份。金融是使用drbd+从库方式,可以实现零数据丢失,从库可以实现读写分离。

根据业务性质,区分oltp和olap业务。Olap业务主要是大批量操作,一个操作可以进行几个小时。在机器选型的时候,选择大存储和高性能设备,提高io带宽。业务设计可以根据时间维度(年,月,旬,日,时,分,秒),区域维度(洲,国家,大区域,城市,区,街道),产品维度(新房,二手房,金融,下面细分房点通,经纪人,C端,房佣宝,商户等),可以看到各个维度的汇总情况,也可以看到基于所有的维度交叉分析。

Oltp必须要求实时性强,响应时间非常短(50毫秒以内),这对机器设备和数据库sql编写提出非常高的要求。机器选项的时候,选择高性能设备,必须需要大内存,高iops的设备。ssd是最好的选择,iops比普通sas盘快100倍以上。内存容量一般要达到数据库容量的一半左右,绝大部分热点数据可以保存在高速的cache上,这样可以减少读写磁盘次数。

房多多是互联网公司,符合大部分互联网业务类型,数据库表设计不用全部遵守数据库三个范式,第一范式:每一列都是不可分割的列;第二范式:所有非主列必须完全依赖主键;第三范式:所有列不依赖其他非主属性;表必须创建主键,添加修改字段,经常查询的条件要创建有效的组合索引。建议不超过2个表进行关联,表设计的时候适当冗余。不建议使用存储过程,触发器,视图等数据库功能,使数据库单纯保存和读取数据。例如,新房C端后台服务设计表的时候,适当冗余其他关联表额外的信息,id,姓名,地址,部分统计信息。为了减少多表关联,可以通过id抓取其他表需要的列,减少多表关联,提高sql性能,转换在业务代码实现。

当关系数据库难以处理的类型数据,建议使用nosql保存。文档类型数据采取mongodb数据库,由于nosql没有数据库范式约束,扩展非常方便,附带的高可用功能,目前导流项目,爬虫等项目使用,

缓存和处理键值对数据使用memcached和redis,该数据库属于内存数据库,效率非常高。下面是互联网公司使用案例,我们可以参考。Github使用redis作为持久化的键值对数据库,并使用Resque来实现消息队列;Twitter使用redis来储存用户时间线;StackOverFlow使用redis来进行缓存和消息分发;国内新浪微博使用redis来实现计数器,反向索引,排行榜,消息队列并储存用户关系;知乎使用redis来进行计数,缓存,消息分发和任务调度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库