轻松学习分布式|系列3|分布式数据库。

我们继续来讲分布式,回到我们的创业游戏。

我们的业务规模上来了,客户也越来越忠诚了。很多客户都通过我们的订票服务,来方便自己的行程。

那对这些老客户,我们的宗旨是:要不断超越客户的期待。

所以,我们要建立我们的客户数据库。

我们要记录下每个客户的偏好的航空公司,偏爱的酒店。下次服务,才能直接更好地服务客户。

怎么办?

最简单的办法,每个客服小姐姐各自用自己的记事本,记录下客户的号码,偏好等信息。

这些记事本就是我们的“客户数据库”。

这些数据都记录在记事本上,会有一个问题,如里同一个客户,每个客服小姐姐都记录一次。是不是很费时费力,还重复记录,浪费资源。

怎么办?

还是跟之前一样,拆分!垂直拆分。

再拆分一组,就叫:客户信息记录组。

如果客户小姐姐要记录客户信息,就把信息写在纸条上,然后直接扔给:客户信息记录组,让这个小组自行处理:去除重复,更新信息。

当然,我们的客户信息记录组,可以用execl把客户信息上记录下来。这样,也方便数据处理。

现在我们的业务架构是这样的:

 

 有同学说,这个架构图好像跟我们的IT软件架构图很像。

没错。其实,所有的IT软件架构,遵从从业务架构设计的。

技术只是工具,业务才是核心。

回到我们的客户信息记录组。这个组也有多个小姐姐记录,如果大家都各自用自己的excel,怎么保证大家的信息没有重复,都是一致的呢?

这个时候,我们就要上数据库系统了。什么是数据库系统,简单来说,就是记录数据的仓库。

好,我们买了一台电脑,招了一个程序员,下载了个mysql,写了一个简单程序,给客户信息记录组的姐姐用。

刚开始,数据不大,问题不大。

当数据越来越多时,一台数据库明显支持不下。怎么办?

很简单,多买几台数据库。能用钱解决的问题,就不是问题。

那现在问题又来了,这些数据库怎么保持数据一致性?

这个就是分布式数据库要解决的问题。什么是分布式数据库?

简单来说,它就是用多台数据库组成一个“整体”,给外界提供数据库服务的数据仓库系统。

有同学会说了,你要很大很大的数据量才能用分布式数据库。你一家小公司,用这个是不是浪费了?

有道理!一般情况下,小公司是用不上分布式。但我们做为有梦想的企业家,一定要提前规划,站在未来看现在!我们才有机会成功!

马云说过:梦想还是要有的,万一实现了呢?

所以,叫那个程序员开始干活!

首先我们要分析一下业务。

客户小姐姐大部分情况下,都 是查询客户信息的比较多,占了80%。新增,和更新信息的情况比较少,占了20%。

如果查询和记录都在一个数据库,经常会造成冲突,造成“锁表”。这会造成严重的性能问题,会造成对客户体验严重的损害!

很自然,我们可以想到,那是不是可以分开两个库,一个用来记录,一个用来查询。

这就是读写分离,读写分离是很重要的设计原则。可以极大地提高查询的效率。如下:

 

尽管采取了读写分离的方式,但随着数据库的压力继续增加,数据库的瓶颈越来越突出。怎么办?

我们分别对读写库的表进行水平拆分,也就是分表。

比如,可以按表中的唯一ID的hash值来分,如果hash值是偶数,就放在“偶数表”,如果hash值是奇数,就放在奇数表。

如下图:

讲到这里,我们基本上就建立了分布式数据库系统。

明天继续讲分布式架构的演进。

 

转载于:https://www.cnblogs.com/gyc567/p/11075381.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux增加端口失败,端口没被占用,怎么会bind失败呢?

今天在一个服务器上部署一个webserver的时候,提示我bind端口失败,我习惯性的用netstat看了下,没有被占用啊!把问题分享出来后,给力的同事们搜索到了ip_local_port_range这个东西这个东西对应的是/proc/sys/net/ipv4/ip…

安装输入发

直接在系统 ——系统管理 ——语言支持 选——中文从新启动 sudo apt-get install scim-pinyin安装JAVA环境支持 sudo apt-get install sun-java-jre()要是 apt -get 命令不能用 可能是你 的 源有问题 可以 更新一下 在系统 -系统管理 源设置 选这台湾的 就可以 …

(第2篇)一篇文章教你轻松安装hadoop

摘要: 这篇文章将会手把手教你安装hadoop,只要你细心按照文章中的步骤操作,hadoop肯定能正确安装,绝对不会让你崩溃 博主福利 给大家赠送一套hadoop视频课程 授课老师是百度 hadoop 核心架构师 内容包括hadoop入门、hadoop生态架构以及大型ha…

python接口自动化2-发送post请求

前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的。登录问题解决了,后面都简单了。 一、查看官方文档 1.学习一个新的模块,其实不用去百度什么的&am…

Linux查看tar实用程序,linux tar指令常用选项

linux的tar指令经常被用到,因为压缩文件的时候通常需要打包文档,而tar指令就是打包指令,同时gzip压缩程序和bzip2压缩程序都是支持tar指令的,所以tar指令在打包的同时还可以用gzip和bzip进行压缩,这样多文件可以打包的…

DaVinci各版本安装指南

链接: https://pan.baidu.com/s/1g1kaXZxcw-etsJENiW2IUQ?pwd0531 ​ #2024版 1.鼠标右击【DaVinci_Resolve_Studio_18.5(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 DaVinci_Resolve_Studio_18.5(64bit)】。 2.打开解压后的文…

使用 Servlet 读取表单数据

Technorati 标签: servlet;java 一、概述 Servlet 有一个比较好的功能就是可以自动处理表单提交的数据。我们只需要调用HttpServletRequest#getParameter(String name),就可以获得指定参数的值(String),注意此方法是大小写敏感的。…

linux文档权限

1、登录 root 用户:su - mac一开始进入创建的用户是具有管理员权限的用户,但是密码却不是进入 root 用户的密码,可以使用 sudo su - 免密进入 root 用户。 2、退出 root 用户:exit 3、列出档案(包括隐藏的档案&#xf…

linux开启ping服务,Linux 云服务器禁止和开启Ping

原标题:Linux 云服务器禁止和开启Ping在使用Linux服务器的时候,一般系统默认是开启ping的,比如我们可以ping测试网络的延迟质量。当然也有部分服务商是可以通过安全组设置禁止ping的,我们可以设置安全组对应项目开启或禁止ping&am…

红外感应模块+蜂鸣器实现简易报警(转)

拿到了一个红外感应模块HC-SR501,于是就用它和蜂鸣器简单试验了下。主要是试验一下这个红外感应模块的功能,所以代码也写的很随便啦,逻辑上也欠考虑。实现基本功能:运行脚本后,感应模块每隔一定时间检测,如…

linux运行apktool签名,解决Linux中使用ApkTool遇到问题

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?遇到问题在Linux中使用IntelliDroid工具时,按要求配置好环境之后,始终无法成功运行该工具内部的ApkTool,导致后续的安卓静态分析…

python 脚本学习(二)

task1: 在一个文件中,单词之间使用空格、分号、逗号或者句号分隔,请提取全部单词。 代码实例: 1234567891011#!/usr/local/python27/bin/python2.7import sys import re words [] with open(sys.argv[1]) as f: for line in f: #…

2.2 Consumer API官网剖析(博主推荐)

不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 2.2 Consumer API 2.2、消费者API 随着0.9.0版本,我们已经增加了一个新的Java消费者替换我们现有的基于zookeeper的高级和低级消费者。这个客户端还是测试版的质量…

mybatis-generator-gui如何打包成exe

快速阅读: ​ 用wix和inno setup把mybatis-generator-gui 打包成exe和安装文件。 以后使用的时候方便,不用每次打开eclipse运行。 使用inno setup 5 和wix 3.11 基于mybatis generator开发一款界面工具, 非常容易及快速生成Mybatis的Java POJO文件及数据…

NeHe OpenGL教程 第三十课:碰撞检测

转自【翻译】NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改。对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢。 NeHe OpenGL第三十课…

andorid手机电脑操作

之前一直使用androidscreencast在pc上对手机进行操作,好久都没用了,前些天再次用的时候,提演示样例如以下: 决定还是自己写一个吧,由于7月份要做一个小分享,打算讲一些android的东西,须要在电脑上显示手机这边的画面,提供一定的操作. 花了一点时间做好了,给大家截一个图,代码放…

在组策略中使用脚本为域用户添加网络打印机

使用脚本为用户添加网络打印机 如果你想让培训部门的用户登录后就能添加网络打印机,就可以使用登录脚本来实现。其中DCServer是域控制,MarketPC1是市场部门的计算机,韩立辉用户是培训部门的用户。下面就验证使用组策略为培训部门的用户添加网…

为什么我从 Git Flow 开发模式切换到了 Trunk Based 开发模式?

我已经使用 Git Flow 构建我的 Git 分支有几年了。但是,我遇到了 Git Flow 的一些问题,其中大部分来自长期存在的分支。解决这些问题的方案就是 Trunk Based Development。这是一个非常简单的技术,也是有效的持续交付的基础。在这篇文章中&am…

DedeCMS 提示信息! ----------dede_addonarticle

把数据保存到数据库附加表 dede_addonarticle 时出错,请把相关信息提交给DedeCms官方。Duplicate entry ’2532′ for key ‘PRIMARY’出现这种情况其实是你的主键是不可重复的,现在重复插入值为2532的主键了。可以去掉主键唯一,或是设成自增…

搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

一、私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey 和 packagesPath apikey:推送包到nuget服务端 packpage: 上传上来的包存放的服务器位置 4.发布web项目到IIS中&#xff0c…