数据存储的随想

2023-11-12

数据分布的演变

数据分布就是一个关于数据存放在哪里的问题。数据存储的地方不是固定的。随着应用规模的扩大,为了治理的方便,会适时地调整,其中就会包括数据存储的调整:

  • 数据与应用部署在同一台设备。
    在早期以及我们现在刚入门学习编程的时候,都会把数据存储在本地,比如:本地文件或者本地的小型数据库。随着数据的扩大,对数据运算的次数将会急剧增多。应用本身需要运算,再叠加上数据运算,这必然导致设备的资源使用率高升。因此,出现下一阶段的演变。

  • 数据与应用分别部署。
    这种部署方式使得应用运算与数据运算互不干扰,应用服务器只处理应用的运算,数据库服务器只负责数据运算,因此,这两台设备的资源占用率又下降到相对低的水平。
    然而,这种方式是基于网络来连接两台设备,应用服务器需要发送运算指令给数据库服务器去执行,而数据库服务器执行完运算指令后,将结果返回给应用服务器。这个过程会面临网络不通的风险。它造成的后果有可能是数据运算指令到达不了数据库服务器,也有可能是运算结果返回不到使用服务器。对于后者,造成的危害会更大,因为应用端可能因为收不到结果而重复发送运算指令(最可怕的是比如:重复向同一个账户转账)。不过,这种情况可以通过程序设计来规避。而对于前者,网络不通会造成新的事务一直无法完成,这就是所谓的单点故障。当数据库服务器宕机后,整个系统就运作不了了。所以,随后就在应用与数据分离的基础上,发展出主备结构的部署模式。

  • 主备结构
    这种部署方式需要主与备机的数据保持一致。毕竟是两台独立的设备,所以数据同步会存在一定的延迟。
    对于应用程序,它配置数据源的时候需要配置两个,当主的数据库宕机,它能够使用备的数据库继续工作。
    假如一个事务在处理过程中,主的数据库宕机了,应用程序必然会接收到异常(请看《Mysql Connector/J 源码分析(普通Connection)》),因此该事务必然中止。在应用未能够成功切换数据源到备机的这一片刻,新来的事务必然也是无法成功。当新的数据源建立好连接并且成功切换后,新来的事务就有可能被成功处理。说“有可能”成功是因为有可能关键数据在宕机前未来得及同步到备机,而造成数据非预期的改变。
    主备结构对于应用程序来说,可能就象字面一样,一个是主设备,一个是备设备。平时备设备同步主设备,当主设备宕机后应用切换数据源到备机。但也存在另一种使用方式,就是两台设备互为主备。这种情况下对于应用程序来说可以实现负载均衡。但是,无论哪一种方式,都无法掩盖数据同步的延迟带来的风险。要解决未来得及同步更新数据就宕机的情况,写日志是可选的方式。每一笔成功的事务都需要写日志。当出现数据的非期望的更改时,至少有日志可作为佐证。

  • 分布式存储、
    随着业务数据的不断增长,就会面临因为数据量过大而极大的增加事务处理耗时。这时候,分布式存储出现了。分布式的核心就是依据某种规则将数据分布在不同的设备(即:场地),这些场地数据的并集才是数据的全量。这种规则比较常见的是以ID作为解释对象。可能是某一段范围ID的数据放置在这个场,另一段范围ID的数据放置在另一个场;也可能通过hash计算,将某些ID的数据放在一个场,某些ID的数据放在另一个场这样。随着ID的不断增长,可以安排到新的场。这样就确保了每个场的数据量不会太多而影响运算性能。
    但是,这种模式下同样面临数据同步延迟带来的风险。数据同步的操作来源于:
    1)对每个场同步全局数据
    2)为解决每个场的单点问题,而进行多机部署

本节介绍了数据分布的演变。其内在的驱动演变的动力在于降低每台设备的资源消耗,包括CPU,内存,以及硬盘空间。做法就是让每台设备只负责一部分数据的存储和计算,从面达到降低每台设备的资源消耗,同时保证运算耗时不太长。

数据的使用

我自已觉得数据的使用存在层级的关系,具体点就是下层的数据为上层提供依据。
比如,在一开始的时候,我的系统只服务器广东省,数据库存放的都是广东省内员工、业务信息。平时数据操作主要就是增删改查本省的数据,并且会统计少量的指标值。随着公司业务的发展,业务延伸到广西省,这时候我就有可能要考虑在广西部署一套服务于广西的系统。广西系统的数据操作也主要是增删改查,并且会统计少量的指标值。当我决定要开拓广西的业务时,自然而然会想到:将来还有可能拓展到更多的地域。当真的从一个点开拓出更多点后,从管理上,伴随而来的需求就是对各个点进行综合比较,分析出产生差异的原因,从而制定更宏观的政策以及对各个点的差异发展规划。
这时候,就会诞生新的管理系统,它为客户功能提供的功能不再是在增删改某个员工的信息,或者分页查询员工信息。它要展示的内容将会变成各个点的员工数量变化的对比,各个点的业务增速等。不难发展,这些数据以指标类为主。
所以,从抽象的角度讲,底层的数据为上层数据服务。这种理念会对数据的分布产生影响。既然上层需要的是指标类数据,那么就没必要把各个点的数据都同步到上层系统去,各个点只要计算出自己的指标然后上传给上层系统就行了。上层用户如果希望查看形生某个指标值的原始数据,上层系统可向下层系统发送指令,下层系统接受到指令后返回原始数据给上层系统。这样的处理即满足的客户的查看需要,又节约了上层系统的存储空间。
现在我们知道上层系统存放的是下层系统的指标类数据,那么数据存储的分布也同样的适用于上一章节所描述的方式。
可能有人会问,既然下层系统提供了指标类数据,按道理上层系统的数据应该是极少的,不应该存在分布式部署的方式呀。确实,仅从下层系统上传的指标类数据是不会太多,但是仅依赖这些指标也不足以挖掘出更多有经济效益的数据,因此,更多的可能是需要从下层系统同步一些有挖掘价值的数据到上层系统。这样上层系统就需要有足够的存储空间,同时也要保证系统功能的响应时间了。上层系统有了这些待挖掘数据后,才有可能发现某种规律或者现象,为领导的决策或者发展方针的制定或者调整提供数据上的支撑。

总结

本文介绍数据分布的演变,最终是以分布式的方向发展。然后从数据的使用角度进行探讨,提出上层系统与下层系统的概念,并且讲述它们间对于数据使用的区别和联系。另外,上层系统必定有新的赋能,它同样需要足够的存储空间来实现新的需求。因此,对于上层系统的数据分布,必然同样会向着分布式的方向发展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据存储的随想 的相关文章

  • React中高阶组件、Render props、hooks

    这三者都是react中解决代码复用的主要方式 1 HOC 在官方解释中 高阶组件 HOC 是 React 中复用组件逻辑的一种高级技巧 HOC自身不是 React API 的一部分 它是一种基于 React 的组合特性而形成的一种设计模式
  • 手写数字识别 (tensorflow==2.4.0)

    import tensorflow as tf from tensorflow import keras fashion mnist keras datasets fashion mnist train images train label
  • windows下apache开启FastCGI

    1 在此链接下载一个合适的mod fcgid 文件 64位下载第一个 32位第二个 http www apachelounge com download 2 将解压后将文件中的 mod fcgid so 复制到apache的modules目
  • 阶段性回顾

    阶段笔记 Day01 1 请你简单介绍下软件开发中系统架构的演变 单一应用 gt 垂直拆分 gt 分布式服务 gt 服务治理 SOA gt 微服务架构 2 远程调用的方式有几种 他们的区别如何 如何选择 远程调用有两种方式 RPC Remo
  • IDEA中Translation插件无法使用怎么办?

    昨天一个小偷 来我家偷钱 我们一起找了一晚上 问题 谷歌翻译退出中国了 导致我的 IDEA 翻译插件 Translation 也不能用了 会出现这样的错误 更新 TKK 失败 请检查网络连接 解决办法 使用百度翻译 很多翻译都收费 百度翻译
  • 树莓派安装卸载软件命令apt-get

    apt get命令用法 1 安装软件 apt get install 软件名 2 卸载软件但不删除配置 apt get remove 软件名 3 卸载软件并且删除相关配置 apt get purge 软件名 4 更新数据库 apt get
  • C++之标准库(STL)容器List的用法

    文章目录 list说明 list定义 list使用 list赋值操作 list数据元素插入和删除操作 list数据存取 list大小操作 list反转排序 list访问 list说明 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元
  • Uniapp零基础开发学习笔记(9) -媒体组件音视频摄像头等的练习使用

    Uniapp零基础开发学习笔记 9 媒体组件音视频摄像头等的练习使用 基础组件部分 最后就只剩余媒体组件以及地图 和画布Canvas 以及浏览器组件web view 此次先看看媒体组件 重点学习前面几个 链接如下 https uniapp
  • 【1024狂欢】力扣经典链表OJ题合集

    现在的力扣题的源代码我会全部一并上传至我的码云仓库里面 点我看仓库 写在前面 首先祝各位程序猿1024狂欢节快乐鸭 这是属于我们的节日 为了致敬1024 今天的力扣系列不再是一题了 而是多个题的组合 也是与我们最近更新的内容梦幻联动 祝大家
  • QT QLabel样式设置

    需要设置error的样式 设置样式 color rgb 255 0 0 font size 12pt font family Microsoft YaHei 字体 颜色也可通过富文本设置在程序中设置 emit LoginError QStr
  • Jenkins以root用户运行

    Jenkins安装完成后默认会创建一个jenkins的用户 并以jenkins用户运行 在我们通过jenkins编写一些命令的时候容易出现权限不足的提示 permision denied 通过为jenkins工作区赋予777的权限以后 也可
  • r语言写九九乘法表并保存为txt文件

    r语言写九九乘法表并保存为txt文件 代码 for i in 1 9 for j in 1 i cat j x i i j t file 九九乘法表 txt append TRUE cat n file 九九乘法表 txt append T
  • 前端面试题--计算机网络

    文章目录 1 七层网络协议体系结构的理解 2 五层协议中各自对应的网络协议 3 ARP 协议的工作原理 4 IP 地址分类的理解 5 TCP 的主要特点 exclamation exclamation Transmission Contro
  • YOLOv4 tensorrt推理 python版【附代码】

    学了几天的tensorRT 又经过了几天的努力终于实现了YOLOv4 tensorRT推理 这篇文章将把这些成果开源出来 供大家免费使用 YOLOv4代码我采用的是b站up主Bubbliiiing 相信大家应该都比较熟悉这位大佬 关于trt
  • [OpenAirInterface实战-14] :OAI nFAPI VNF/PNV持续集成测试的xml配置文件详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120850348 目录 1 nFAPI
  • Java实验三 基于GUI的网络通信程序设计【代码构建逻辑】【双向通信】【超多细节优化!!】

    写在前面 这次实验代码的构建主要是更加熟练的运用socket网络编程 文件输入输出流 GUI设计 容器的使用 多线程的运用等等多方面的知识 是综合类题型 做完受益身心的类型 题目如下 编写程序完成以下功能 1 设计一个基于GUI的客户 服务
  • spring3.0.3+hibernate3.5.4+JOTM2.2.1实现JTA事务管理

    本文参考资料 http java e800 com cn articles 2007 417 1176746498587392322 1 html 实验方法 本文设置两个entity Topic对应test1数据库 Post对应test2数
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • git fetch & git pull 总结

    一 git fetch git pull 图解 最开始 github 上存放着我们的远程仓库代码 然后在本地通过 git clone 命令 将远程仓库拉取到本地仓库 此时 本地仓库的 origin master 的内容 是远程仓库 mast
  • 计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

    vcruntime140 dll是一个非常重要的动态链接库文件 它包含了许多运行时的函数和类 然而 有时候我们可能会遇到vcruntime140 dll无法继续执行代码的问题 这会给我们带来很大的困扰 那么 这个问题是什么原因导致的呢 又应

随机推荐

  • 【Mysql】数据库第三讲(表的约束、基本查询语句)

    表的约束和基本查询 1 表的约束 1 1 空属性 1 2默认值 1 3列描述 1 4 zerofill 1 5主键 1 6 自增长 1 7 唯一键 1 8外键 1 表的约束 真正约束字段的是数据类型 但是数据类型约束很单一 需要有一些额外的
  • 腾讯应用宝米大师直购模式支付流程以及服务端php回调校验

    一 米大师简介 1 米大师 Midas 为腾讯官方唯一虚拟支付平台 2 YSDK已经内置了米大师 Midas 支付模块 游戏开发者接入YSDK后 可以通过相应的配置开启米大师的支付功能 并调用YSDK已经封装好的接口 即可快速实现支付能力
  • windows 10 下安装labelme出错

    请大件帮我看看问题在哪 谢了
  • MongoDB的身份验证

    1 当开启了安全检查之后 只有通过身份认证的用户才能进行数据的读写操作 2 admin和local是两个特殊的数据库 它们当中的用户可对任何数据库进行操作 3 经认证后 管理员用户可对任何数据库进行读写操作 同时能执行只有管理员才能执行的命
  • 关于进制(十进制,二进制,八进制,十六进制)

    进制 十进制 在日常生活中使用 满10进1 计数 0 1 2 3 4 5 6 7 8 9 10 11 12 18 19 20 单位数字有10个 0 9 二进制 满2进1 计数 0 1 10 11 100 101 110 111 单位数字有2
  • 新版来啦|ShardingSphere 5.4.0 重磅发布

    Apache ShardingSphere 本周迎来了 5 4 0 版本的发布 该版本历时两个月 共合并了来自全球的团队和个人累计 1271 个 PR 新版本在功能 性能 测试 文档 示例等方面都进行了大量的优化 本次更新包含了不少能够提升
  • CUDA向量加法示例

    CUDA向量相加示例 贺志国 下面以向量加法为例 介绍CUDA实现代码 以下是具体代码vector add cu 我的版本除CUDA相关函数外 其他代码均以C 的方式实现 并且尽可能调用STL库的数据结构和算法 注意 CUDA核函数内部的日
  • delphi 获取有输入焦点的活动窗口信息

    var wintext array 0 MAXBYTE of Char WdChar array of Char focuswhd THandle processId Pointer threadid Cardinal GUITHREADI
  • c语言入门---调试技巧

    目录 什么是bug 调试是什么 调试的基本步骤是什么 调试是什么 调试的基本步骤是什么 Debug和release的区别 windows的调试介绍 调试的准备 调试的操作 1 F5 2 F9 3 F10 4 F11 调试的时候查看程序当前的
  • kali linux基本命令

    文章目录 shell 什么是shell 查看shell shell与终端的区别 VIM编辑器 Linux常用命令 shell 什么是shell 在计算机科学中 shell俗称外壳 能够接收用户的命令并翻译给操作系统执行 是用户与操作系统 内
  • CryptoPP的LC_RNG算法的使用

    随机数发生器是密码学的一个重要原语 密码学库CryptoPP中提供了一些随机数发生器算法 如下图所示 今天 介绍一些其中LC RNG算法的使用 该库中的LC RNG算法就是著名的线性同余发生器算法 该算法由于执行效率高而被广泛使用 C语言库
  • @Conditional 初学

    点击 Conditional Target ElementType TYPE ElementType METHOD Retention RetentionPolicy RUNTIME Documented public interface
  • win10安装Tensorflow1.14.0 CUP版

    安装cpu版本 python3 6 12 tensorflow1 14 0 numpy1 16 0 python tensorflow 和 numpy之间版本要相对应 这很重要 不然可能会装不上 这是尝试了4天后的可行搭配 目 录 预备备
  • 代码题-判断循环依赖

    interface Module name string imports Module const moduleC Module name moduleC const moduleB Module name moduleB imports
  • 【ORACLE性能分析和优化思路学习笔记02:什么时候需要对性能进行干预】

    背景 近期负责的一些单位 一些数据库节点总是出现宕机或者自动重启 之前简单接触过oracle RAC数据库的一些管理 但是对性能分析和优化研究不深 这次实在是没办法了 DBA协调不动 只能自己出马了 好在自己有一定的基础 上手很快 现在对学
  • pytorch常见问题

    1 pytorch 的 dataloader 在读取数据时 设置了较大的 batchsize 和 num workers 然后训练一段时间报错 RuntimeError Too many open files Communication w
  • LeetCode 414. 第三大的数-C语言

    LeetCode 414 第三大的数 C语言 题目描述 解题思路 1 设置数组max 3 用于保存前三大的值 初始化为LONG MIN意为最小值 2 遍历数组对前三大的值进行更新 3 判断max 2 是否存在 若不存在直接返回max 0 代
  • 笔记本电脑切换不到投影仪 问题 解决方法

    我的笔记本是ati显卡的 在某次切换到投影仪的时候 出现问题 无法正确应用您所选择的以下设置 请更改设置并重试 外部监视器或投影仪 电视机 分辨率 颜色质量 无法正确应用您所选择的以下设置 请更改设置并重试 显示配置 解决思路 公司还有一个
  • Neo-reGeorg正向代理配合kali使用

    Neo reGeorg正向代理配合kali使用 一 Neo reGeorg介绍 在了解Neo reGeorg之前 首先应该知道大名鼎鼎的项目 https github com sensepost reGeorg 其用于开启目标服务器到本地的
  • 数据存储的随想

    文章目录 数据分布的演变 数据的使用 总结 数据分布的演变 数据分布就是一个关于数据存放在哪里的问题 数据存储的地方不是固定的 随着应用规模的扩大 为了治理的方便 会适时地调整 其中就会包括数据存储的调整 数据与应用部署在同一台设备 在早期