多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

90DaysOfDevOps 数据服务详解:七类数据库类型盘点与选型实战指南

90DaysOfDevOps 数据服务详解:七类数据库类型盘点与选型实战指南 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本文整理自 90DaysOfDevOps 挑战第 85 天Data Services的内容数据库是我们在各类环境中遇到的最常见数据服务从应用开发视角看选对数据服务或数据库将直接影响应用的性能与扩展性。读完本文你将系统掌握键值、宽列、文档、关系型、图、搜索引擎与多模型七大类数据库的核心原理、典型代表产品与最佳适用场景并结合仓库内的真实配置MySQL 备份蓝图、Elastic Stack 部署把数据库选型落到 DevOps 数据管理的实战中。数据服务与数据库为什么选型如此关键在上一节Day 84数据管理全景中我们介绍了数据管理的大图无论业务运行在物理机、虚拟机、云环境还是 Kubernetes 云原生平台几乎所有业务背后都会藏着某种数据库——它可能是企业最核心的系统的基石也可能只是链条上某个存储持久化数据的齿轮。数据管理并不算新课题但当 DevOps 要求对频繁发布的软件做持续集成、测试与部署时底层持久化数据与数据服务往往成为出问题的首要根源。本节Day 85则把视角收窄到“数据服务”本身数据库是环境中遇到频率最高的数据服务。文章通过七类数据库类型逐一说明它们是什么、代表产品有哪些、各自最适合哪些工作负载。原文配套的视频讲解还推荐了经典的《7 Database Paradigms》7 种数据库范式作为行业背景参考。键值数据库Key-value键值数据库Key-value Database是使用简单键值Key-value方式存储数据的非关系型数据库。它以键值对集合的形式保存数据其中键Key作为唯一标识符键和值都可以是任意内容从简单对象到复杂的复合对象皆可。键值数据库高度可分区highly partitionable能够以其他类型数据库难以达到的规模进行水平扩展。键值数据库的典型代表是RedisRedis 是一个内存数据结构存储in-memory data structure store可被用作分布式内存键值数据库、缓存和消息代理message broker并支持可选持久化optional durability。Redis 支持多种抽象数据结构包括字符串strings、列表lists、映射maps、集合sets、有序集合sorted sets、HyperLogLogs、位图bitmaps、流streams以及空间索引spatial indices。从 Redis 的定位可以看出这类数据库的核心权衡数据常驻内存因此访问极快但空间受限于内存容量同时不支持查询query与关联join数据建模选项非常受限。最佳适用场景Best for缓存Caching发布/订阅Pub/Sub排行榜Leaderboards购物车Shopping carts在实际架构中键值数据库通常被用作另一层持久化数据存储之上的缓存层而不是唯一的数据源——这也是 Redis 最常见的部署形态。宽列数据库Wide-column宽列数据库Wide-column Database是一种NoSQL 数据库它将数据存储组织为可灵活扩展的列column并可跨多台服务器或多个数据库节点分布通过多维映射以列column、行row与时间戳timestamp三个维度引用数据。宽列数据库的典型代表是CassandraCassandra 是一个免费开源的分布式宽列存储 NoSQL 数据库管理系统专为在大量廉价商用服务器commodity servers上处理海量数据而设计提供无单点故障no single point of failure的高可用性。由于没有强制模式no schema宽列数据库能够处理非结构化数据——对某些工作负载而言这种“无模式”特性本身就是一种优势同一张表内的不同行不必拥有完全相同的列结构可以按需扩展列。最佳适用场景Best for时序数据Time-Series历史记录Historical Records高写入、低读取High-Write, Low-Read文档数据库Document文档数据库Document Database又称文档导向数据库document-oriented database或文档存储document store是一种将信息存储在文档中的数据库。与关系型的行列结构不同文档是自包含的、通常为 JSON 或类 JSON 格式的数据单元一个集合Collection可以容纳结构各异的文档并支持嵌套子集合。文档数据库的典型代表是MongoDBMongoDB 是一个源码可用source-available、跨平台的文档导向数据库程序。它被归类为 NoSQL 数据库程序使用带有可选模式optional schemas的 JSON 类文档由 MongoDB Inc. 开发基于 Server Side Public License服务端公共许可证授权。NoSQL 文档数据库让开发者无需编写复杂的 SQL 代码即可存储简单数据同时保证可靠性不打折扣、写入快速。最佳适用场景Best for大多数应用Most Applications游戏Games物联网Internet of Things关系型数据库Relational如果你对数据库有所了解那么你接触过的第一个数据库类型大概率就是关系型数据库。关系型数据库是基于 1970 年E. F. Codd提出的数据关系模型relational model of data的数字数据库用于维护关系型数据库的系统被称为关系型数据库管理系统RDBMS。多数关系型数据库系统都支持使用SQL来查询与维护数据库。关系型数据库的典型代表是MySQLMySQL 是一个开源的关系型数据库管理系统。其名称由联合创始人 Michael Widenius 女儿的名字 My 与结构化查询语言Structured Query Language缩写 SQL 组合而成。MySQL 只是关系型数据库的一个例子除此之外还有 PostgreSQL、SQL Server、MariaDB、Oracle 等大量成熟选项上图右侧所列即为常见代表。ACID事务的四个属性在研究关系型数据库的过程中ACID这个缩写会被反复提及。ACID 即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability它是数据库事务transaction的一组属性旨在即使在错误、断电及其他意外情况下仍保证数据的有效性。在数据库语境中满足 ACID 属性的一组数据库操作可被视为对数据的单一逻辑操作被称为事务。例如将资金从一个银行账户转账到另一个账户即使涉及“借记一个账户、贷记另一个账户”等多个变更它仍然是一个事务——要么全部成功要么全部回滚这正是原子性最直观的体现。最佳适用场景Best for大多数应用Most Applications——它已存在多年但这不代表它就是“最好的”关系型数据库不适合非结构化数据而在需要扩展能力的特定工作负载上前面提到的其他 NoSQL 数据库往往能提供更好的扩展性。仓库中的关系型数据库实践在 2022/Days/Data/mysql-blueprint.yml 中仓库提供了一个基于 KanisterCRDcr.kanister.io/v1alpha1的 MySQL Blueprint展示了如何在 Kubernetes 中为关系型数据库编排备份与恢复backup阶段通过mysqldump --column-statistics0 -u root ... --single-transaction --all-databases将全库导出、gzip 压缩后由kando location push推送到对象存储restore阶段则用kando location pull拉回并管道给mysql客户端恢复delete阶段负责清理对象存储中的备份。--single-transaction保证了导出过程中数据的一致性视图——这与 ACID 语境下对“干净、一致的数据副本”的追求一脉相承为后面的数据保护章节Day 86 起的备份与恢复演示打下了实践基础。图数据库Graph图数据库Graph Database不把数据存在表或文档中而是存储节点nodes与关系relationships。数据就像你在白板上随手画出的思路草图一样被保存数据不被预先定义好的模型束缚从而允许你用非常灵活的方式去思考和使用数据。图数据库的典型代表是Neo4jNeo4j 是由 Neo4j, Inc. 开发的图数据库管理系统。其开发者将其描述为具备原生图存储与处理能力、符合 ACID 的事务型数据库。最佳适用场景Best for图Graphs知识图谱Knowledge Graphs推荐引擎Recommendation Engines搜索引擎数据库Search Engine在本挑战的上一章节监控与可观测性部分中我们已经以Elasticsearch的方式实际使用过搜索引擎数据库。例如仓库中的 Containers/elasticsearch-logstash-kibana 与 Monitoring/Elastic Stack/docker-compose.yaml 就提供了完整的 ELK/Elastic Stack 编排文件可通过 Docker Compose 一键拉起 elasticsearch、logstash、kibana 三个服务含单节点发现模式discovery.type: single-node与密码初始化 setup 服务。搜索引擎数据库是一种专用于数据内容检索的非关系型数据库类型。它使用**索引index**对数据之间相似的特征进行分类从而加速检索能力。典型代表是ElasticsearchElasticsearch 是基于 Lucene 库的搜索引擎。它提供分布式、支持多租户multitenant-capable的全文本搜索引擎配有 HTTP 网络接口与无模式的 JSON 文档。最佳适用场景Best for搜索引擎Search Engines输入提示/前缀联想Typeahead日志检索Log search多模型数据库Multi-model多模型数据库Multi-model Database是一种被设计为针对单一集成后端single, integrated backend支持多种数据模型的数据库管理系统。与之相对大多数数据库管理系统都围绕单一数据模型组织——该模型决定了数据如何被组织、存储与操作。文档document、图graph、关系型relational与键值key–value模型都是多模型数据库可能支持的模型示例。多模型数据库的典型代表是FaunaFauna 是一个灵活、对开发者友好的事务型数据库以安全、可扩展的云 API 形式交付并原生支持 GraphQL。最佳适用场景Best for你不希望被“必须选定某一种数据模型”束缚需要 ACID 合规ACID Compliant追求性能Fast不想承担预配置/供给开销No provisioning overhead希望按自己的方式消费数据把繁重工作交给云let the cloud do the heavy lifting选型之后把数据服务纳入 DevOps 数据保护无论你身处哪个行业几乎都会遇到数据库的某个领域——这也是本节数据库概览的收尾。选型只是起点数据服务的保护与存储备份、容灾、应用可移植性才是后续章节的重点。正如 Day 86备份所有平台 所述我们讨论过的所有平台——物理、虚拟、云、Kubernetes——都有一个共同点都需要某种程度的数据保护。运维团队常犯的错误是把“高可用/多副本”当作备份当你误操作数据库且该错误被复制到集群所有节点时或者发生机房级故障时副本同样帮不了你。备份backup是与复制replication并行的一项独立要求而数据丢失最常见的原因其实并非勒索软件而是简单的误删除。原文同时给出了从数据库概览到保护实践的完整路线先把 3-2-1 备份方法论至少 3 份副本、2 种不同介质、1 份异地/离站副本纳入数据服务治理再用 Kopia 等跨平台开源工具把本地 NAS 与云端对象存储两个目标都纳入快照体系。继续深入学习仓库内的相关资源围绕本篇数据库类型概览你可以在当前仓库中继续深挖以下内容Day 84数据管理全景 —— 数据生命周期、DataOps 与数据管理 101理解数据库在数据管理大图中的位置Day 86备份所有平台 —— 3-2-1 备份方法论、Kopia 本地 NAS 云端对象存储的双目标备份实操以及恢复与挂载快照的命令MySQL 备份蓝图 mysql-blueprint.yml —— Kanister 驱动的 MySQL 全库备份/恢复/删除三阶段 Blueprint 示例是关系型数据库在 Kubernetes 中的保护范式Monitoring/Elastic Stack 与 Containers/elasticsearch-logstash-kibana —— 搜索引擎数据库 Elasticsearch 的完整编排与配置elasticsearch.yml、kibana.yml、logstash pipeline 等Day 90 之前的数据管理章节 —— 持续跟进备份与恢复、容灾Disaster Recovery与应用可移植性Application Mobility的后续演示内容。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 数据服务全景指南七类数据库的架构特点与选型实战90DaysOfDevOps 数据服务全景指南七类数据库的架构特点与选型实战 本指南对应 90DaysOfDevOps 挑战第 85 天 2022/es/D文档/教程90DaysOfDevOps 数据服务实战指南七类数据库选型与仓库落地验证Day 8590DaysOfDevOps 数据服务实战指南七类数据库选型与仓库落地验证Day 85 本文以 90DaysOfDevOps 项目 2022/ja/Day文档/教程仓颉社区安全响应机制SA漏洞通告模板与PGP公钥验证完全教程仓颉社区安全响应机制SA漏洞通告模板与PGP公钥验证完全教程 本文带你快速了解仓颉社区Cangjie Community的安全响应机制从漏洞上报模板、S文档/教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表