首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

架构: 数据库架构设计

引言 本文介绍数据库中的架构设计; 通常,单机是无法满足大系统对数据库的读写要求的,必须用集群的方式来解决; 引入集群意味着提升了系统的复杂度,使系统变得复杂和不好维护; 通常采用数据库负载均衡策略、读写分离策略...、分库分表策略等加以优化; 负载均衡 扩展性强:当系统要更高数据库处理速度时,只要简单地增加数据库服务器就可以得到扩展; 可维护性:当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持续工作...IO压力,采取读写分离; 实现原理: 数据库服务器搭建主从集群,一主一从、一主多从都可以; 数据库主机负责读写操作,从机只负责读操作; 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据...)读写操作全部指向主机,非关键业务采用读写分离; 分库分表 分数据库 是指按功能模块拆分到不同的数据库,比如分为订单库、商品库、用户库; join只适用于同一数据库的不同表联合查询,拆分后不同数据库之间无法用...join语句进行查询,只能分几次查询; 事务是同一数据库中的概念,要想在不同数据库之间实现事务的回滚,只能用查询log回滚的方式; 成本高,拆分到不同的数据库意味着需要建立多个备份数据库; 分数据库

93030

架构设计-数据库

之前我们讲过架构设计的一些原则,和架构设计的方法论,今天我们谈谈高性能数据库集群的设计与应用。 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上,下面是其基本架构图。...有的架构师可能会想:如果业务真的发展很快,岂不是很快就又要进行业务分库了?那为何不一开始就设计好呢?...如果我们每个业务上来就按照淘宝、微信的规模去做架构设计,不但会累死自己,还会害死业务。 其次,如果业务真的发展很快,后面进行业务分库也不迟。...上面这个示例比较简单,只考虑了一次切分的情况,实际架构设计过程中并不局限切分的次数,可以切两次,也可以切很多次,就像切蛋糕一样,可以切很多刀。...总结 今天我讲了读写分离方式的原理,以及两个设计复杂度:复制延迟和分配机制,紧接着讲了高性能数据库集群的分库分表架构,包括业务分库产生的问题和分表的两种方式及其带来的复杂度,最后谈了谈为了弥补关系型数据库缺陷而产生的

31820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    架构设计数据库选型

    架构选型的时候通常涉及数据库的选型,一般会从业务场景(时效性、数据量、成本、数据schema等)、数据库的成熟度、数据库的社区活跃度(可参考网站:https://db-engines.com/en/ranking...)、数据库功能等多角度考虑。...然而,支持数据库实现事务特性的是ACID机制。...数据库分类 下面根据业务使用场景对常用数据库进行通用分类, 关系型数据库 产品:Mysql、Oracle、PostgreSQL为代表,均是结构化的关系型数据库,主要基于SQL进行操作; MYSQL 文档数据库...,支持按照时间维度进行存储和分析 KV数据库 产品:以Redis、Memcached作为代表,主要应用在热点数据的缓存系统,支持典型数据库的快速存储访问 这里给腾讯自研开源数据库Dcache打个call

    50320

    无限容量数据库架构设计

    一、总起 内容: 单库体系架构 数据库分组架构 数据库分片架构 数据库垂直切分 二、实践一 场景:单key业务,如何做到数据库无限容量 内容: 用户中心业务分析 用户中心水平切分方案 “前台与后台分离...”架构设计思想 uid分库,name上的查询四种方案 三、实践二 场景:1对多业务,如何做到数据库无限容量 内容: 帖子中心业务分析 “索引外置”架构设计思想 基因法,uid分库还是tid分库不再纠结...四、实践三 场景:多对多业务,如何做到数据库无限容量 内容: 好友中心业务分析 数据冗余的三种方案 “最终一致性”架构设计思想 保证数据一致性的四种方案 五、实践四 场景:多key业务,如何做到数据库无限容量...内容: 订单中心业务分析 “化繁为简”架构设计思想 订单ID,买家ID,卖家ID究竟应该如何分库 5篇文章超过1万字,架构图超过50副,有点长,可以私信我 建议先收藏,再转发,再细细品味。...关注我:简信回复“架构”获取往期Java高级架构资料、源码、笔记、视频 Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、 高并发等架构技术 资料和思维导图获取方式

    77900

    数据库软件架构设计些什么

    缘起:受@萧田国 萧总邀请,上周五晚上在“高效运维1号群”内分享了《58同城数据库软件架构设计与实践》(这个topic今年在数据库大会上分享过),应组织方要求,发出纪要。...---- 一、基本概念 二、数据库架构设计思路 (1)可用性 (2)读性能 (3)一致性 (4)扩展性 ---- 一、基本概念 概念一“单库” ? 概念二“分片” ?...互联网公司数据库实际软件架构是:又分片,又分组(如下图) ? ---- 二、数据库架构设计思路 数据库软件架构师平时设计些什么东西呢?...常见的缓存架构如下: ? 上游是业务应用,下游是主库,从库(读写分离),缓存。 58同城的玩法是:服务+数据库+缓存一套 ?...---- OK,今天主要分享了58同城,数据库软件架构上: (1)如何保证数据可用性 (2)如何提高数据库读性能 (3)如何保证数据一致性 (4)如何进行秒级扩容 希望大家有收获,谢谢大家!

    921110

    架构设计之「数据库集群方案」

    在之前的文章中,我们知道数据库服务可能已经成为了很多系统的性能关键点,甚至是瓶颈了。也给大家介绍了数据库服务器从主备架构、到主从架构、再到主主架构的基础方案。...今天我们就再来聊一聊,在多机环境下,数据库集群的架构方案。 同样,这里先不看细节,不管底层数据源是什么数据库,我们先谈架构方案。...因为无论底层是 Mysql 还是 Redis、MongoDB,我们在架构设计上都是相通的。...这些问题,在我们进行架构设计的时候,必须提前考虑。不过市面上也有一些工具可以辅助实现,例如 ZooKeeper等。 另外,由于数据集中模式的所有写操作都只到一台主机上,而读操作可以到N台从机上。...这种备份方式,设计稍微复杂一些,扩展性也弱一些,但是可以节约资源。 无论采用哪种方式,都需要结合实际的业务场景来决定。 以上,就是对数据库在多机集群模式下的技术架构的分享,欢迎大家一起交流。

    1.2K30

    58同城数据库架构设计思路

    (1)可用性设计 解决思路:复制+冗余 副作用:复制+冗余一定会引发一致性问题 保证“读”高可用的方法:复制从库,冗余数据,如下图 带来的问题:主从不一致 解决方案:见下文 保证“写”高可用的一般方法:...解决方案见下文 (2)读性能设计:如何扩展读性能 最常用的方法是,建立索引 建立非常多的索引,副作用是: a)降低了写性能 b)索引占内存多了,放在内存中的数据就少了,数据命中率就低了,IO次数就多了...(主从同步完成的经验时间)后再次淘汰 b)发生读请求时,先读缓存,hit则返回,miss则读数据库并将数据入缓存(此时可能旧数据入缓存,但会被二次淘汰淘汰掉,最终不会引发不一致) (4)扩展性设计 (4.1...步骤四、找出全局OFFSET 3是全局offset3332+3333+3331=9996 当当当当,跳过3,3,3,4,于是全局OFFSET 10000 LIMIT 4是[5,5,6,6] 总结:58同城数据库架构设计思路...Codd的12条法则 另外,我们回顾一下数据库之父Codd的12条法则,作为数据库设计的指导性方针: 信息法则 关系数据库中的所有信息都用唯一的一种方式表示——表中的值。

    2.3K70

    架构设计之「数据库集群方案」

    在之前的文章中,我们知道数据库服务可能已经成为了很多系统的性能关键点,甚至是瓶颈了。也给大家介绍了数据库服务器从主备架构、到主从架构、再到主主架构的基础方案。...今天我们就再来聊一聊,在多机环境下,数据库集群的架构方案。 同样,这里先不看细节,不管底层数据源是什么数据库,我们先谈架构方案。...因为无论底层是 Mysql 还是 Redis、MongoDB,我们在架构设计上都是相通的。...这些问题,在我们进行架构设计的时候,必须提前考虑。不过市面上也有一些工具可以辅助实现,例如 ZooKeeper等。 另外,由于数据集中模式的所有写操作都只到一台主机上,而读操作可以到N台从机上。...这种备份方式,设计稍微复杂一些,扩展性也弱一些,但是可以节约资源。 无论采用哪种方式,都需要结合实际的业务场景来决定。 以上,就是对数据库在多机集群模式下的技术架构的分享,欢迎大家一起交流。

    64020

    可验证云数据库架构设计

    再例如,本文要介绍的《Veritas:可验证云数据库和表设计》。...Veritas通过将区块链数据库的概念和可验证表的概念放在一起,得到具有不可变更、可访问的日志,具有干净的可审计功能。 三、Veritas架构设计 Veritas抽象概念背后有哪些实现细节呢?...图4 :可验证表 四、可验证数据库设计 可验证性是区块链数据库的最重要概念。验证者如何使用可验证数据库的日志,并对可验证数据库的状态产生共识? 图5显示了向可验证数据库中添加验证者的一种方法。...在图5的架构中,验证者可以通过批量处理他们的投票来进一步减少他们向区块链写入的次数。 图5 :验证架构 跨广域网络将可验证数据库的日志拆解到验证者的程序中是昂贵而缓慢的。...五、可验证表设计 本质上,上述在可验证数据库中实现信任的所有设计考虑因素都同样适用于共享可验证表的实现。从概念上讲,可验证数据库和可验证表的最大区别在于并发控制。

    88930

    架构设计---数据库的存储优化

    前言: 互联网系统架构中,承受着最大出力压力,最难以被伸缩的,就是数据存储部分,原因主要有两方面,一方面,数据存储需要使用硬盘,而硬盘的处理速度要比其他几种计算资源都要慢,比如说CPU、内存等;数据是一个公司最重要的资产...目前用来改善数据存储能力的主要手段:数据库的主从复制、数据库分片和NoSql数据库。...命令的时候,这个命令会同时在主数据库和从数据库中执行,从而实现了主数据库向从数据库的复制处理,使得从数据库与主数据库保持一致。...编辑 通过主从数据库复制的方式,我们可以实现数据库读写的分离,写操作访问主数据库,读操作访问从数据库,使数据库具有更强大的访问负载能力,支撑更多的用户访问。...编辑 小结: 架构是一门关于权衡的艺术,这一点在数据存储架构上表现的最明显了,由于数据存储的挑战性和复杂性,无论你选择何种技术方案,都会带来一些新的问题和挑战,数据存储架构没有一下子就能处理的解决方案,

    22830

    典型数据库架构设计与实践 | 架构师之路

    转载自微信公众号【架构师之路】 本文,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”数据库为例,讲解数据库架构设计的常见玩法。...单库架构 最常见的架构设计如上: user-service:用户中心服务,对调用者提供友好的RPC接口 user-db:一个库进行数据存储 四、分组架构 ? 分组架构 什么是分组?...一句话总结,分组解决的是“数据库读写高并发量高”问题,所实施的架构设计。 五、分片架构 ? 分片架构 什么是分片?...”问题,所实施的架构设计。...,垂直切分也是一类常见的数据库架构设计,垂直切分一般和业务结合比较紧密。

    62821

    软考系统架构设计师(二):数据库设计

    视图表:由基表或其他视图表导出的表,本身不独立存储,数据库只存放它的定义,常称为虚表。 数据库模式 数据库视图:它一个虚拟表(逻辑上的表),其内容由查询定义(仅保存SQL查询语句)。...表决阶段,目的是形成一个共同的决定 执行阶段,目的是实现这个协调者的决定 两条全局提交规则 只要有一个参与者撤销事务,协调者就必须做出全局撤销决定 只有所有参与者都同意提交事务,协调者才能做出全局提交决定 数据库设计过程...概念结构设计 集成的方法: 多个局部E-R图一次集成。...、 触发器 逻辑结构设计 ER 图的关系模式转换:实体向关系模式的转换;联系向关模式的转换 关系模式的规范化 确定完整性约衷(保证数据的正确性) 用户视图的确定(提高数据的安全性和独立性):根据数据流图确定处理过程使用的视图...;根据用户类别确定不同用户使用的视图; 应用程序设计 关系代数 规范化理论-非规范化存在的问题 非规范化的关系模式,可能存在的问题包括:数据冗余、更新异常(修改操作—致性问题)、插入异常、删除异常。

    85710

    MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计数据库索引优化

    一、数据库结构优化(非常重要) 1.1 数据库结构优化目的 1....总结:要避免异常,需要对数据库结构进行范式化设计。 3. 节约数据存储空间。 4. 提高查询效率。...1.2 数据库结构设计步骤 需求分析:全面了解产品设计的存储需求、数据处理需求、数据安全性与完整性; 逻辑设计(重要):设计数据的逻辑存储结构。数据实体之间的逻辑关系,解决数据冗余和数据维护异常。...数据范式可以帮助我们设计; 物理设计:表结构设计,存储引擎与列的数据类型; 维护优化:****索引优化、存储结构优化。 1.3 数据库范式设计与反范式化 1.4 物理设计 ? ? ?...二、高可用架构设计 ? ? 2.1 读写分离 ? 三、数据库索引优化(非常重要) 3.1 两种主要数据结构:B-tree和Hash 3.1.1 B-tree结构 ? B-tree索引的限制: ?

    81210

    支撑百万并发的数据库架构如何设计

    如果你运气不太好,数据库服务器的配置不是特别的高的话,弄不好你还会经历数据库宕机的情况,因为负载太高对数据库压力太大了。 那么百万并发的数据库架构如何设计呢?多数都是分库分表加主从吧?...在写入数据的时候,需要做两次路由,先对订单 id hash 后对数据库的数量取模,可以路由到一台数据库上,然后再对那台数据库上的表数量取模,就可以路由到数据库上的一个表里了。...但是此时可能就会涉及到表的迁移,因为需要迁移一部分表到新的数据库服务器上去,是不是很麻烦? 其实完全没必要,数据库一般都支持读写分离,也就是做主从架构。...架构大致如下: ? 写入主库的时候,会自动同步数据到从库上去,保证主库和从库数据一致。 然后查询的时候都是走从库去查询的,这就通过数据库的主从架构实现了读写分离的效果了。...所以此时就需要分布式架构下的全局唯一 id 生成的方案了,在分库分表之后,对于插入数据库中的核心 id,不能直接简单使用表自增 id,要全局生成唯一 id,然后插入各个表中,保证每个表内的某个 id,全局唯一

    74930

    支撑百万并发的数据库架构如何设计

    “ 这篇文章,我们来聊一下对于一个支撑日活百万用户的高并系统,他的数据库架构应该如何设计? 看到这个题目,很多人第一反应就是:分库分表啊!...大量分表来保证海量数据下的查询性能 但是上述的数据库架构还有一个问题,那就是单表数据量还是过大,现在订单表才分为了 5 张表,那么如果订单一年有 1 亿条,每个表就有 2000 万条,这也还是太大了。...但是此时可能就会涉及到表的迁移,因为需要迁移一部分表到新的数据库服务器上去,是不是很麻烦? 其实完全没必要,数据库一般都支持读写分离,也就是做主从架构。...然后查询的时候都是走从库去查询的,这就通过数据库的主从架构实现了读写分离的效果了。 现在的好处就是,假如说现在主库写请求增加到 800,这个无所谓,不需要扩容。...高并发下的数据库架构设计总结 从大的一个简化的角度来说,高并发的场景下,数据库层面的架构肯定是需要经过精心的设计的。

    1.2K30

    支撑海量数据的数据库架构如何设计

    如果你运气不太好,数据库服务器的配置不是特别的高的话,弄不好你还会经历数据库宕机的情况,因为负载太高对数据库压力太大了。 那么百万并发的数据库架构如何设计呢?多数都是分库分表加主从吧?...在写入数据的时候,需要做两次路由,先对订单 id hash 后对数据库的数量取模,可以路由到一台数据库上,然后再对那台数据库上的表数量取模,就可以路由到数据库上的一个表里了。...但是此时可能就会涉及到表的迁移,因为需要迁移一部分表到新的数据库服务器上去,是不是很麻烦? 其实完全没必要,数据库一般都支持读写分离,也就是做主从架构。...架构大致如下: ? 写入主库的时候,会自动同步数据到从库上去,保证主库和从库数据一致。 然后查询的时候都是走从库去查询的,这就通过数据库的主从架构实现了读写分离的效果了。...所以此时就需要分布式架构下的全局唯一 id 生成的方案了,在分库分表之后,对于插入数据库中的核心 id,不能直接简单使用表自增 id,要全局生成唯一 id,然后插入各个表中,保证每个表内的某个 id,全局唯一

    1.1K20

    58同城数据库架构设计思路(下)

    《58同城数据库架构设计思路》(下) WOT(World Of Tech)2015,互联网运维与开发者大会将在北京举行,会上58同城分享了《大数据量下,58同城mysql实战(上)》的主题 DTCC(Database...Tech Conference China)2015,中国数据库技术大会举办在即,会上58同城将分享《数据库架构师做什么?...58同城数据库架构设计思路(下)》,大会内容抢先看,一起来看看58同城怎么玩数据库架构设计的。...58同城数据库架构设计思路 (1)可用性设计 解决思路:复制+冗余 副作用:复制+冗余一定会引发一致性问题 保证“读”高可用的方法:复制从库,冗余数据,如下图 ?...步骤四、找出全局OFFSET 3是全局offset3332+3333+3331=9996 当当当当,跳过3,3,3,4,于是全局OFFSET 10000 LIMIT 4是[5,5,6,6] 总结:58同城数据库架构设计思路

    1.3K90

    数据库软件架构,到底要设计些什么?

    数据库软件架构,到底要设计些什么? 强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码 大家好,我是架构君,一个会写代码吟诗的架构师。...今天说一说数据库软件架构,到底要设计些什么?,希望能够帮助大家进步!!! 一、基本概念 概念一:单库 概念二:分片 分片解决“数据量太大”这一问题,也就是通常说的“水平切分”。...互联网公司数据库实际软件架构是“既分片,又分组”: ---- 数据库软件架构,究竟设计些什么呢,至少要考虑以下四点: 如何保证数据可用性 如何提高数据库读性能(大部分应用读多写少,读会先成为瓶颈) 如何保证一致性...如何保证数据库“读”高可用? 冗余读库。 冗余读库带来什么副作用? 读写有延时,数据可能不一致。 上图是很多互联网公司mysql的架构,写仍然是单点,不能保证写高可用。...(2)强制读主 “双主高可用”的架构,主从一致性的问题能够大大缓解。 第二类不一致,是db与缓存间的不一致。 这一类不一致,《缓存架构,一篇足够?》里有非常详细的叙述,本文不再展开。

    39920
    领券