您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

7种系统设计中的数据库范式

时间:2023-09-05 13:38:26  来源:微信公众号  作者:小技术君

设计系统时,选择合适的数据库并明确原因是最重要的决策之一。市场上有许多不同的数据库可供选择,这使得做出正确选择变得困难且令人困惑。每个数据库都有其自己的故事和自己独特的视角。

因此,让我们深入了解可以将数据库分类为的7个广泛范畴:

1. 关系数据库(Relational Database):

这些是最流行的数据库类型。你可能已经了解并且可能已经使用过这些数据库!

关系数据库管理系统(RDBMS)将数据存储为二维表格,具有行和列。每个表格代表特定的实体或概念。表格中的每一行代表该实体的一个单独记录或实例,每列代表该实体的特定属性或特征。

示例数据库:MySQL,PostgreSQL,Oracle Database

主要特点:

•查询和分析:关系数据库提供强大的查询语言,例如SQL(结构化查询语言),可实现复杂的数据检索、过滤、排序和聚合操作。•表格可以关联,并通过使用主键和外键来建立关系。主键是表格中每一行的唯一标识符,确保其唯一性并提供了访问和引用数据的方式。外键通过引用另一个表格的主键来建立表格之间的关系。•结构和完整性:关系数据库通过定义的约束来强制数据完整性,如主键唯一性、引用完整性和数据类型约束。数据值具有类型,可以是数值、字符串、日期、未解释的二进制数据或其他类型。•重要的是,表格可以连接并转变为新的、更复杂的表格。•灵活性:关系数据库允许添加、修改和删除数据,而不会影响整体数据库结构或其他相关数据。•可扩展性:关系数据库可以处理大量数据,通过将数据分布到多台服务器上进行水平扩展

实际用途: 关系数据库通常用于管理结构化数据,例如客户信息、库存和财务记录。例如,电子商务平台可以使用关系数据库来存储产品详情、客户订单和交易历史

2. 键-值数据库(Key-Value Database):

键-值数据库是NoSQL(Not Only SQL)数据库的一种,它将数据存储为键-值对的集合。在这种数据库模型中,每个数据片段都与唯一的键相关联,该键充当该值的标识符。

示例数据库:redis,Amazon DynamoDB,Riak

 

主要特点:

•简单性:键-值数据库具有简单的数据模型,易于理解、使用和集成到应用程序中。•高性能:在键-值数据库中,通过键检索数据通常非常快,因为它涉及到直接查找,而不涉及复杂的查询或连接操作。•可扩展性:键-值数据库可以处理高写入和读取负载,并可以通过添加更多节点来水平扩展,以分发数据。

实际用途: 键-值数据库通常用于缓存、会话管理以及需要高速数据检索的场景。它们可以存储频繁访问的数据,例如html片段、API响应、用户首选项或频繁使用的查询结果。

3. 列数据库(Columnar Database):

在传统的基于行的数据库中,数据以水平方式存储,每一行包含特定记录的所有属性或列。相反,列数据库以垂直方式存储数据,将来自同一列的值分组到多个行中。在结构方面,列数据库介于关系数据库和键-值数据库之间。

 

示例数据库:Apache Cassandra,google Bigtable,HBase

主要特点:

•列式存储:数据以列方式存储,允许高效的压缩和改进的查询性能。这种存储结构有助于更快地访问和检索数据,特别是在处理大型数据集时。•压缩和编码:列数据库可以使用专门的针对列数据的压缩和编码技术。这些技术利用列内的数据模式,减少存储需求并提高查询执行速度。•分析查询:列数据库在执行**分析查询时表现出

色,如聚合、过滤和复杂计算**,因为它们只需访问相关列,而不需要扫描整行。

•在列向数据库中,添加列是相当廉价的,并且是按行进行的。每行可以具有不同的列集合,或者根本没有列,允许表格保持稀疏而不会为null值的存储成本。

实际用途: 列数据库在涉及大规模数据存储和分析的场景中表现出色。它们用于应用程序,如时间序列数据分析日志处理数据仓库

4. 文档数据库(Document-Based Databases):

文档数据库,也称为面向文档的数据库或文档存储,是NoSQL数据库的一种,以半结构化或非结构化文档的形式存储和检索数据

 

示例数据库:MongoDB,Couchbase

•数据以灵活的、自描述的文档形式组织和存储,通常以JSON(JAVAScript对象表示法)、BSON(二进制JSON)或XML等格式。•文档通常组织到集合或桶中,每个文档都由一个键唯一标识。•灵活的模式:文档数据库允许模式的灵活性,允许在不提前定义严格结构的情况下存储和检索数据。这使得文档数据库非常适合处理不断发展或半结构化数据。•丰富的数据模型:文档可以包含复杂的嵌套数据结构、数组和键值对,为许多现实世界的对象和关系提供了自然的表示。•可扩展性:文档数据库可以通过分布数据到多台服务器或集群水平扩展,以实现高可用性和性能。•查询和索引:文档数据库提供强大的查询功能,允许根据文档内容、嵌套字段甚至进行全文搜索。•可以利用索引来优化查询性能。

实际用途: 文档数据库适用于数据非结构化或在不同实体之间变化的场景。用例包括内容管理系统,其中每个文档代表一个网页,以及用户配置文件,用户特定的数据可以存储在单个文档中。

5. 图数据库(Graph Databases):

图数据库是NoSQL数据库的一种,用于表示和存储以实体(节点)和它们之间的关系(边)为基础的数据。在图数据库中,数据被建模为由节点、边和属性组成的图结构。节点表示实体或对象,例如人、地方或产品。每个节点可以具有与之相关的属性,提供关于实体的附加信息。边表示节点之间的关系,也可以具有属性。节点之间的关系可以是有向或无向的,可以有不同类型或标签。

 

示例数据库:Neo4j,Amazon Neptune,ArangoDB

主要特点:

•关系聚焦:图数据库擅长捕获和表示实体之间复杂的关系。它们允许高效遍历图,实现强大的查询模式匹配。•灵活的模式:图数据库具有灵活的模式,允许对数据模型进行动态更改和更新。可以添加新节点、边和属性,而不会影响整个图结构。•性能:图数据库优化了查询和导航复杂关系的性能。遍历节点之间的连接非常高效,使它们非常适合涉及查询和分析关系的用例。•图分析:图数据库支持高级图算法和分析,允许执行任务,如路径查找社交网络分析

实际用途: 图数据库非常适用于社交网络平台推荐系统欺诈检测等场景。它们可以高效查询相互关联的数据,例如查找朋友的朋友识别共同兴趣在网络中检测模式

6. 搜索引擎数据库(Search-Engine Database):

搜索型数据库,也称为搜索驱动型数据库或启用搜索型数据库,是一种将搜索功能作为核心特性的数据库类型。与传统数据库不同,传统数据库主要专注于基于特定查询或条件的数据存储和检索。

在搜索型数据库中,数据被索引并优化以进行高效搜索。

 

示例:Elasticsearch,Apache Solr 和 Algolia

•索引:数据库使用高级索引技术创建反向索引来索引数据。此索引将关键词或术语映射到包含它们的文档或记录。•查询处理

:搜索型数据库提供强大的搜索功能,允许用户使用关键字、短语甚至复杂的搜索查询进行全文搜索。数据库会处理对索引的搜索查询,并检索相关性最高的结果。

•相关性排序:搜索型数据库使用相关性排序算法来确定呈现搜索结果的顺序。这些算法考虑了诸如术语频率文档流行度术语接近度和其他相关性指标等因素。•文本分析:搜索型数据库通常包括文本分析技术,如分词、标记化和同义词扩展,以提高搜索准确性。这些技术确保在搜索过程中捕获到词汇的变化或相关术语。•分面搜索:搜索型数据库可能支持分面搜索,允许用户根据预定义的类别或属性应用过滤器或分面缩小搜索结果

实际用途: 包括电子商务平台、内容管理系统、文档存储库、知识库以及任何需要高效全文搜索功能的应用程序。

7. 时间序列数据库(Time-Series Database):

时间序列数据库旨在高效地存储、检索和分析带有时间戳或时间序列数据。它们擅长处理大量按时间顺序排序并与特定时间戳相关联的数据点。

 

示例:InfluxDB,Prometheus

主要特点:

•基于时间的数据存储:时间序列数据库存储具有相关时间戳的数据点,允许轻松检索和分析随时间变化的数据。•高写入吞吐量:时间序列数据库经过优化以处理不断涌入的数据,这些数据来自各种来源,如传感器网络、日志、金融数据或监视系统。•压缩技术:时间序列数据库通常采用压缩技术来高效存储和减少时间序列数据的存储空间。•高效查询:时间序列数据库提供专业查询功能,如范围查询、聚合函数、降采样和筛选,以实现高效的时间序列数据检索和分析。•保留策略:时间序列数据库提供可配置的保留策略,允许自动删除或归档较旧的数据,以高效管理存储空间。•可扩展性:时间序列数据库设计用于水平扩展,允许在多个节点或集群之间分布时间序列数据的存储和处理。

实际用途: 物联网应用程序监视和可观察性系统金融分析网络和服务器监视日志分析以及涉及收集、分析和可视化时间戳数据的任何场景。

7个范式的总结:

 

[额外的速查表



Tags:数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  Search: 数据库  点击:(4)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28  Search: 数据库  点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  Search: 数据库  点击:(12)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12  Search: 数据库  点击:(26)  评论:(0)  加入收藏
让数据库和缓存数据保持一致的三种策略
如何保证缓存和数据库的一致性,这算得上是个老生常谈的话题啦,看到好多技术新人在写更新缓存数据代码,采用了非常复杂甚至“诡异”的方案,甚为不解。一、背景目前随着缓存架构方...【详细内容】
2024-02-20  Search: 数据库  点击:(35)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: 数据库  点击:(53)  评论:(0)  加入收藏
一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL
本篇文章以具体的SQL语句讲解了数据库SQL语言四大分类(数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL),同时也介绍了事务控制语言TCL。最近与开发和运维讨论...【详细内容】
2024-01-30  Search: 数据库  点击:(41)  评论:(0)  加入收藏
一文读懂:什么是数据库,它到底有啥用?
提到数据库,可能很多人会很陌生。但据库其实已经渗入我们生活的方方面面,像网上购物、扫码点餐、抢红包等等应用背后都离不开数据库的支持。可以说数据库是支撑各类应用软件运...【详细内容】
2024-01-25  Search: 数据库  点击:(42)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  Search: 数据库  点击:(86)  评论:(0)  加入收藏
一个流行的支持超多数据库的ORM库
Sequelize 是一个流行的 Node.js ORM(对象关系映射)库,用于在 Node.js 中操作关系型数据库。它支持多种数据库系统,如 PostgreSQL、MySQL、SQLite 和 MSSQL,并提供了简单易用的 A...【详细内容】
2024-01-15  Search: 数据库  点击:(75)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条