[ 更换 ]
热门城市
北京上海广州深圳成都杭州南京武汉天津西安重庆青岛沈阳长沙大连厦门无锡福州济南宁波昆明苏州郑州长春合肥南昌哈尔滨常州烟台南宁温州石家庄太原珠海南通扬州贵阳东莞徐州大庆佛山威海洛阳淮安呼和浩特镇江潍坊桂林中山临沂咸阳包头嘉兴惠州泉州三亚赣州九江金华泰安榆林许昌新乡舟山慈溪南阳聊城海口东营淄博漳州保定沧州丹东宜兴绍兴唐山湖州揭阳江阴营口衡阳郴州鄂尔多斯泰州义乌汕头宜昌大同鞍山湘潭盐城马鞍山襄樊长治日照常熟安庆吉林乌鲁木齐兰州秦皇岛肇庆西宁介休滨州台州廊坊邢台株洲德阳绵阳双流平顶山龙岩银川芜湖晋江连云港张家港锦州岳阳长沙县济宁邯郸江门齐齐哈尔昆山柳州绍兴县运城齐河衢州太仓张家口湛江眉山常德盘锦枣庄资阳宜宾赤峰余姚清远蚌埠宁德德州宝鸡牡丹江阜阳莆田诸暨黄石吉安延安拉萨海宁通辽黄山长乐安阳增城桐乡上虞辽阳遵义韶关泸州南平滁州温岭南充景德镇抚顺乌海荆门阳江曲靖邵阳宿迁荆州焦作丹阳丽水延吉茂名梅州渭南葫芦岛娄底滕州上饶富阳内江三明淮南孝感溧阳乐山临汾攀枝花阳泉长葛汉中四平六盘水安顺新余晋城自贡三门峡本溪防城港铁岭随州广安广元天水遂宁萍乡西双版纳绥化鹤壁湘西松原阜新酒泉张家界黔西南保山昭通河池来宾玉溪梧州鹰潭钦州云浮佳木斯克拉玛依呼伦贝尔贺州通化朝阳百色毕节贵港丽江安康德宏朔州伊犁文山楚雄嘉峪关凉山雅安西藏四川广东河北山西辽宁黑龙江江苏浙江安徽福建江西山东河南湖北湖南海南贵州云南陕西甘肃青海台湾内蒙古广西宁夏香港澳门
培训资讯网 - 为兴趣爱好者提供专业的职业培训资讯知识

架构师日记-从数据库发展历程到数据结构设计探析

发展 发展历程 数据 设计

一、数据库发展史

起初,数据的管理方式是文件系统,数据存储在文件中,数据管理和维护都由程序员完成。

后来发展出树形结构和网状结构的数据库,但都存在着难以扩展和维护的问题。

直到七十年代,关系数据库理论的提出,以表格形式组织数据,数据之间存在关联关系,具有了良好的结构化和规范化特性,成为主流数据库类型。

先来看一张数据库发展史图鉴:

随之高并发大数据时代的来临,数据库按照各种应用场景进行了更细粒度的拆分和演进,数据库细分领域的典型代表:

类型

产品代表

适用场景

层次数据库(NDB)

IMS/IDMS

以树形结构组织数据,数据之间存在父子关系,查询速度快,但难以扩展和维护

关系型数据库(RDBMS)

Oracle/MySQL

事务的一致性需求场景

键值数据库(KVDB)

Redis/Memcached

针对高性能并发读写场景

文档数据库(DDB)

MongoDB/CouchDB

针对海量复杂数据访问场景

图数据库(GDB)

Neo4j

以点、边为基础存储单元,高效存储、查询图数据场景

时序数据库(TSDB)

InfluxDB/OpenTSDB

针对时序数据的持久化和多维度的聚合查询等场景

对象数据库(ODB)

Db4O

支持完整的面向对象(OO)概念和控制机制,目前使用场景较少

搜索引擎(SE)

ElasticSearch/Solr

适合于以搜索为主的业务场景

列数据库(WCDB)

HBase/ClickHouse

分布式存储的海量数据存储和查询场景

XML数据库(NXD)

MarkLogic

支持对XML格式文档进行存储和查询等操作场景

内容仓库(CDB)

Jackrabbit

大规模高性能的内容仓库

二、数据库名词概念

RDBS

1970年的6月,IBM 公司的研究员埃德加·考特 (Edgar Frank Codd) 发表了那篇著名的《大型共享数据库数据的关系模型》(A Relational Model of Data for Large Shared Data Banks)的论文,拉开了关系型数据库(Relational DataBase Server)软件革命的序幕(之前是层次模型和网状模型数据库为主)。直到现在,关系型数据库在基础软件应用领域仍是最主要的数据存储方式之一。

关系型数据库建立在关系型数据模型的基础上,是借助于集合代数等数学概念和方法来处理数据的数据库。在关系型数据库中,实体以及实体间的联系均由单一的结构类型来表示,这种逻辑结构是一张二维表。关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表,一组表组成了数据库。

NoSQL

NoSQL(Not Only SQL) 数据库也即非关系型数据库,它是在大数据的时代背景下产生的,它可以处理分布式、规模庞大、类型不确定、完整性没有保证的“杂乱”数据,这是传统的关系型数据库远远不能胜任的。NoSQL数据库并没有一个统一的模型,是以牺牲事务机制和强一致性机制,来获取更好的分布式部署和横向扩展能力,使其在不同的应用场景下,对特定业务数据具有更强的处理性能。常用数据模型示例如下:

类型

产品代表

应用场景

数据模型

优缺点

键值数据库

Redis/Memcached

内容缓存,如会话,配置文件等; 频繁读写,拥有简单数据模型的应用;

键值对,通过散列表来实现

优点: 扩展性和灵活性好,性能高; 缺点: 数据无结构化,只能通过键来查询

列簇数据库

HBase/ClickHouse

分布式数据存储管理

以列簇存储,将同一列存在一起

优点: 简单,扩展性强,查询速度快 缺点: 功能局限,不支持事务的强一致性

文档数据库

MongoDB/CouchDB

Web应用,存储面向文档或半结构化数据

键值对,value是JSON结构文档

优点: 数据结构灵活 缺点: 缺乏统一查询语法

图形数据库

Neo4j/InfoGrid

社交网络,应用监控,推荐系统等专注构建关系图谱

图结构

优点: 支持复杂的图形算法 缺点: 复杂性高,支持数据规模有限

NewSQL

NewSQL 是一类新的关系型数据库, 是各种新的可扩展和高性能的数据库的简称。它不仅具有 NoSQL 数据库对海量数据的存储管理能力,同时还保留了传统数据库支持的 ACID 和 SQL 特性,典型代表有TiDB和OceanBase。

OLTP

联机事务处理过程(On-Line Transaction Processing):也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。

OLAP

联机分析处理(On-Line Analytical Processing)是一种面向数据分析的处理过程,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。

关于OLTP和OLAP的区别,借用一张表格对比如下:

HTAP

HTAP (Hybrid Transactional/Analytical Processing) 混合型数据库基于新的计算存储框架,能够同时支撑OLTP和OLAP场景,避免传统架构中大量数据交互造成的资源浪费和冲突。

三、领域数据库

列式数据库

传统的以行形式保存的数据主要满足OLTP应用,列形式保存的数据主要满足以查询为主的OLAP应用。在列式数据库中,数据按列存储,而每个列中的数据类型相同。这种存储方式使列式数据库能够更高效地处理大量的数据,特别是需要进行大规模的数据分析和处理时(如金融、医疗、电信、能源、物流等行业)。

两种存储结构的区别如下图:



列式数据库的主要优点:

  • 更高的压缩比率:由于每个列中的数据类型相同,列式数据库可以使用更高效的压缩算法来压缩数据(压缩比可达到5~20倍),从而减少存储空间的使用。
  • 更快的查询速度:列式数据库可以只读取需要的列,而不需要读取整行数据,从而加快查询速度。
  • 更好的扩展性:列式数据库可以更容易地进行水平扩展,即增加更多的节点和服务器来处理更大规模的数据。
  • 更好的数据分析支持:由于列式数据库可以处理大规模的数据,它可以支持更复杂的数据分析和处理操作,例如数据挖掘、机器学习等。

列式数据库的主要缺点:

  • 更慢的写入速度:由于数据是按列存储,每次写入都需要写入整个列,而不是单个行,因此写入速度可能较慢。
  • 更复杂的数据模型:由于数据是按列存储,数据模型可能比行式数据库更复杂,需要更多的设计和开发工作。

列式数据库的应用场景:

  • 金融:金融行业的交易数据和市场数据,例如股票价格、外汇汇率、利率等。列式数据库可以更快速地处理这些数据,并且支持更复杂的数据分析和处理操作,例如风险管理、投资分析等。
  • 医疗:医疗行业的病历数据、医疗图像和实验数据等。列式数据库可以更高效地存储和处理这些数据,并且支持更复杂的医学研究和分析操作。
  • 电信:电信行业的用户数据和通信数据,例如电话记录、短信记录、网络流量等。列式数据库可以更快速地处理这些数据,并且支持更复杂的用户行为分析和网络优化操作。
  • 能源:能源行业的传感器数据、监测数据和生产数据等。列式数据库可以更高效地存储和处理这些数据,并且支持更复杂的能源管理和控制操作。
  • 物流:物流行业的运输数据、库存数据和订单数据等。列式数据库可以更快速地处理这些数据,并且支持更复杂的物流管理和优化操作。

总之,列式数据库是一种高效处理大规模数据的数据库管理系统,但需要权衡写入速度、数据模型复杂度和成本等因素。 随着传统关系型数据库与新兴的分布式数据库不断的发展,列式存储与行式存储会不断融合,数据库系统呈现双模式数据存放方式。

时序数据库

时序数据库全称为时间序列数据库 ( Time Series Database),用于存储和管理时间序列数据的专业化数据库,是优化用于摄取、处理和存储时间戳数据的数据库。其跟常规的关系数据库SQL相比,最大的区别在于:时序数据库是以时间为索引的规律性时间间隔记录的数据库。

时序数据库在物联网和互联网应用程序监控(APM)等场景应用比较多,以监控数据采集来举例,如果数据监控数据采集时间间隔是1s,那一个监控项每天会产生86400个数据点,若有10000个监控项,则一天就会产生864000000个数据点。在物联网场景下,这个数字会更大,整个数据的规模,是TB甚至是PB级的。

时序数据库发展史:

当下最常见的Kubernetes容器管理系统中,通常会搭配普罗米修斯(Prometheus)进行监控,Prometheus就是一套开源的监控&报警&时间序列数据库的组合。

图数据库

图数据库(Graph Database)是基于图论实现的一种新型NoSQL数据库。它的数据存储结构和数据的查询方式都是以图论为基础的。图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系。

图数据库在反欺诈多维关联分析场景,社交网络图谱,企业关系图谱等场景中可以做一些非常复杂的关系查询。这是由于图数据结构表现的是实体联系本身,它表现了现实世界中事物联系的本质,它的联系在节点创建时就已经建立,所以在查询中能以快捷的路径返回关联数据,从而表现出非常高效的查询性能。

目前市面上较为流行的图数据库产品有以下几种:

与传统的关系数据库相比,图数据库具有以下优点:

  • 更快的查询速度:图数据库可以快速遍历图数据,找到节点之间的关联和路径,因此查询速度更快。
  • 更好的扩展性:图数据库可以轻松地扩展到大规模的数据集,因为它们可以分布式存储和处理数据。
  • 更好的数据可视化:图数据库可以将数据可视化为图形,使用户更容易理解和分析数据。
  • 更好的数据一致性:图数据库可以确保数据的一致性,因为它们可以在节点和边之间建立强制性的关系。

四、数据结构设计

前面简单介绍了数据库相关的基础知识,下面再介绍几种我们常见的数据结构设计相关的应用实践:拉链表,位运算和环形队列。

4.1 拉链表

拉链表是一种数据仓库中常用的数据模型,用于记录维度数据的变化历史。我们以一个人员变动的场景举例,假设有一个员工信息表,其中包含了员工的姓名、工号、职位、部门、入职时间等信息。如果需要记录员工的变动情况,就可以使用拉链表来实现。

首先,在员工信息表的基础上新增两个字段:生效时间和失效时间。当员工信息发生变动时,不再新增一条记录,而是修改原有记录的失效时间,同时新增一条新的记录。如下表所示:

姓名

工号

职位

部门

入职时间

生效时间

失效时间

张三

001

经理

技术

2010-01-01

2010-01-01

2012-12-31

张三

001

总监

技术

2013-01-01

2013-01-01

2015-12-31

张三

001

总经理

技术

2016-01-01

2016-01-01

9999-12-31

这里的生效时间指的是该记录生效的时间,失效时间指的是该记录失效的时间。例如,张三最初是技术部经理,生效时间为入职时间,失效时间为2012年底,之后晋升为技术部总监,生效时间为2013年初,失效时间为2015年底,最后又晋升为技术部总经理,生效时间为2016年初,失效时间为9999年底。

通过这种方式,可以记录员工变动的历史信息,并能够方便地查询某个时间点的员工信息。例如,如果需要查询张三在2014年的职位和部门信息,只需查询生效时间小于2014年且失效时间大于2014年的记录即可。

拉链表通常包括以下几个字段:

1.主键:唯一标识每个记录的字段,通常是一个或多个列的组合。
2.生效时间:记录的生效时间,即该记录开始生效的时间。
3.失效时间:记录的失效时间,即该记录失效的时间。
4.版本号:记录的版本号,用于标识该记录的版本。
5.其他维度属性:记录的其他维度属性,如客户名、产品名、员工名等。

当一个记录的维度属性发生变化时,不再新增一条记录,而是修改原有记录的失效时间,同时新增一条新的记录。新记录的生效时间为变化的时间,失效时间为9999年底。这样就能够记录每个维度属性的历史变化信息,同时保证查询时能够正确获取某个时间点的维度属性信息。

拉链表与传统的流水表相比,它们的主要区别在于:

  • 数据结构不同:流水表是一张只有新增和更新操作的表,每次更新都会新增一条记录,记录中包含了所有的历史信息。而拉链表则是一张有新增、更新和删除操作的表,每个记录都有一个生效时间段和失效时间段,记录的历史信息通过时间段的变化来体现。
  • 查询方式不同:流水表的查询方式是基于时间点的查询,即查询某个时间点的记录信息。而拉链表的查询方式是基于时间段的查询,即查询某个时间段内的记录信息。
  • 存储空间不同:由于流水表需要记录所有历史信息,所以存储空间相对较大。而拉链表只记录生效时间段和失效时间段,所以存储空间相对较小。
  • 数据更新方式不同:流水表只有新增和更新操作,每次更新都会新增一条记录,不会对原有记录进行修改。而拉链表有新增、更新和删除操作,每次更新会修改原有记录的失效时间,同时新增一条新的记录。

4.2 巧用位运算

借助于计算机位运算的特性,可以巧妙的解决某些特定问题,使实现更加优雅,节省存储空间的同时,也可以提高运行效率,典型应用场景:压缩存储、位图索引、数据加密、图形处理和状态判断等,下面介绍几个典型案例。

4.2.1 位运算

使用位运算实现开关和多选项叠加(资源权限)等应用场景。一个int类型有32个位,理论上可以表示32个开关状态或业务选项;以用户每个月的签到场景举例:用一个int字段来表示用户一个月的签到情况,0表示未签到,1表示签到。想知道某一天是否签到,则只需要判断对应的比特位上是否为1。计算一个月累计签到了多少次,只需要统计有多少个比特位为1就可以了。这种设计巧妙的数据存储结构在后面的位图(BitMap)中,还会进行更为详细的介绍。

使用位运算实现业务优先级计算:

public abstract class PriorityManager {
    // 定义业务优先级常量
    public static final int PRIORITY_LOW = 1;     // 二进制:001
    public static final int PRIORITY_NORMAL = 2;  // 二进制:010
    public static final int PRIORITY_HIGH = 4;    // 二进制:100
    
    // 定义用户权限常量
    public static final int PERMISSION_READ = 1;  // 二进制:001
    public static final int PERMISSION_WRITE = 2; // 二进制:010
    public static final int PERMISSION_DELETE = 4;// 二进制:100
    
    // 定义用户权限和业务优先级的组合值
    public static final int PERMISSION_LOW_PRIORITY = PRIORITY_LOW | PERMISSION_READ;     // 二进制:001 | 001 = 001
    public static final int PERMISSION_NORMAL_PRIORITY = PRIORITY_NORMAL | PER

相关内容

【联线智慧法院】内蒙古自治区高级人民法院举办第十四期政法大数据平台与规范量刑智能辅助系统培训

为全面贯彻落实2023年全区政法工作重点任务,进一步提升全区法院应用政法大数据智能化应用平台的能力和水平,10月20日,自治区高院针对全区政法大数据平台及规范量刑智能辅助系统的使用开展全面系统的实操培训。自治区高院党组副书记、副院长王旭军,···

贵州省生态环境厅电子政务中心举办2023年全省生态环境网络安全培训班

10月12日至13日,贵州省生态环境厅电子政务中心举办了2023年全省生态环境网络安全培训班,厅直属各单位和各市(州)生态环境局信息技术负责人现场参训,各区(县)生态环境分局通过视频会议参训。本次培训班强调,贵州省生态环境厅电子政务中心作为···

提升网络建设水平 海南举办2023年电子政务网络安全专题培训

新海南客户端、南海网、南国都市报5月19日消息(记者 姚皓)5月19日,海南2023年电子政务网络安全专题培训在澄迈举行,活动旨在加快推进海南省网络安全建设,加强全省党政机关单位网络安全防护水平,为海南自贸港、数字政府建设创造安全、有序、稳···

格尔木市气象局举办2023年网络安全培训班

10月27日,格尔木市气象局举办网络安全知识培训班,进一步加强网络安全宣传教育,营造安全、健康、文明、和谐的网络环境。格尔木市气象局全体干部职工通过线上或线下方式参加了此次培训。培训围绕网络安全、数据安全等方面展开,解读了当前国内外网络安全···

2023年黑龙江省网络安全宣贯培训会在哈尔滨召开

为贯彻落实中央网信办、公安部相关工作要求,推动党委(党组)网络安全工作责任制和关键信息基础设施安全保护制度深入落实,7月18日,由省委网信办、省公安厅联合举办的2023年黑龙江省网络安全专题培训暨《关键信息基础设施安全保护要求》国家标准宣贯···

京湾区数学建模与人工智能培训在澳门举办

8月25至26日,国家人工智能推广暨京湾区数学建模与人工智能培训在澳门培正中学及康桥教育中心举行。图为部分出席者25日在澳门培正中学合影。 钟欣 摄中新网澳门8月26日电 国家人工智能推广暨京湾区数学建模与人工智能培训25日至26日在澳门培···

淘宝大学参与香港KOL培训 赋能香港青年就业创业

中新社香港3月16日电 (记者 史冰筠)香港青年电商促进会16日宣布,将同阿里巴巴旗下培训平台淘宝大学联合举办淘宝主播培训班,聘请淘宝大学专业的直播导师进行授课,希望赋能学员通过电商拓宽就业、创业渠道,带动香港电商发展。香港青年电商促进会在···

调查:近半香港企业开展新科技培训 涵盖大数据等

中新网6月25日电 据香港《文汇报》报道,香港的一项调查发现,46%受访企业于过去2年间,已开展和新科技有关的雇员培训,内容涵盖大数据、云端技术、物联网及人工智能等。香港人力资源管理学会公布香港培训调查报告。图片来源:香港《文汇报》/赵梦萦···

港媒:近半香港企业开展新科技培训 涵盖大数据等

据香港《文汇报》报道,香港的一项调查发现,46%受访企业于过去2年间,已开展和新科技有关的雇员培训,内容涵盖大数据、云端技术、物联网及人工智能等。香港人力资源管理学会公布香港培训调查报告。图片来源:香港《文汇报》/赵梦萦 摄香港人力资源管理···

自治区司法厅举办全区司法行政系统网络安全和信息化建设工作能力提升培训班

为深入学习贯彻党的二十大精神和习近平新时代中国特色社会主义思想,贯彻落实习近平总书记对网络安全和信息化工作的重要指示和全国网络安全和信息化工作会议精神,推动全区司法行政系统网络安全和信息化建设工作高质量发展,9月19日—20日自治区司法厅组···

2021年甘肃省网络安全管理员培训班在兰开班

中国甘肃网12月27日讯(本网记者 李红军 任磊)今天上午,由甘肃省委网信办主办、兰州大学国家大学科技园承办的2021年甘肃省网络安全管理员培训班在兰州开班。省委网信办副主任刘宗礼出席开班仪式并作动员讲话,兰州大学网信办主任、信息科学与工程···

数据库使用方法系列培训活动之二|台湾月旦知识库线上讲座

会议主题:西北政法大学【月旦知识库】教育训练会议时间:2022/01/18 15:30-17:30 (GMT+08:00) 中国标准时间 - 北京点击链接入会,或添加至会议列表:https://meeting.tencent.com/dm/···

2023年1 X大数据平台运维证书省级师资培训在河南开放大学举办

7月13日上午,2023年1+X“大数据平台运维证书”省级师资培训在河南开放大学(郑州信息科技职业学院)开班,此次培训由河南省教育厅主办,郑州信息科技职业学院承办。河南开放大学(郑州信息科技职业学院)副校长李小明、培训学院院长张颖、信息工程···

【国家网络安全宣传周】福安市开展网络安全培训

为进一步提升网络安全管理工作水平,增强广大干部网络安全风险防范能力,9月12日下午,福安市开展网络安全培训,福安市各乡镇(街道)、市直单位网络安全业务人员90余人参加培训。本次培训邀请了奇安信福建分区网络安全技术人员郑泽辉进行授课。现场培训···

花溪区开展教育系统网络安全培训

7月4日,由花溪区委网信办指导,区教育局主办的花溪教育系统数据安全培训在溪南高中举行,全区公民办中小学、幼儿园、中职学校相关人员300余人参训。培训邀请网络工程师对数据安全文件进行解读,并通过真实案例介绍了数据安全的问题及处置方法以及数据安···

2023年广西招商引资大数据平台(二期)专题培训会在邕召开

8月24日,2023年广西招商引资大数据平台(二期)专题培训会在南宁召开。培训会邀请大数据招商专家对平台新增功能及使用操作进行讲解,并介绍近年招商工作趋势和产业发展特点,分享大数据招商工作经验和典型案例。全区各市、县区、园区招商业务骨干和自···

云南粉笔:依托大数据智能分析打造公考培训新标准

2023年9月2日,云南粉笔在昆明举行了盛大的省考产品发布会,吸引了来自全国各地的教育专家、媒体代表以及公考学子齐聚一堂。本次发布会上,粉笔推出最新研发的省考培训产品,将线上与线下课堂相结合,依托大数据智能分析,打造公考培训新标准。 云南粉···

2023年度室内设计1 X证书师资及考评员培训(黑龙江站)成功举办

2023年8月21日-25日,为提升试点院校“室内设计职业技能等级证书”教育培训质量,积极推动2023年度证书试点工作顺利开展,由中国室内装饰协会主办、哈尔滨职业技术学院承办、黑龙江省室内装饰协会协办的“2023年度全国室内设计职业技能等级···

昆明经开区开展2023年春漫社区老年人智能手机使用暨网络安全培训活动

来源:【昆明日报-掌上春城】掌上春城讯 “五社联动送服务,点亮民生微幸福”。8月17日,昆明经济技术开发区青年志愿者协会党支部在春漫社区组织开展“融入智能e时代 健康银龄新生活”老年人智能手机使用暨网络安全培训活动。本次培训活动围绕老年人日···

2023年全省“十四五”全民健康信息化与网络安全培训班举办

5月11日—12日,2023年全省“十四五”全民健康信息化与网络安全培训班在张家口市举办。省卫生健康委二级巡视员范素文出席会议并讲话。培训班总结了2022年网络安全和信息化工作,安排了2023年重点工作。培训班邀请国家和省内有关专家对卫生健···