当前位置: 首页 > news >正文

【系统架构设计 每日一问】四 如何对关系型数据库及NoSql数据库选型

根据不同的业务需求和场景,选择适合的数据库类型至关重要。以下是一个优化后的表格展示,涵盖了管理型系统、大流量系统、日志型系统、搜索型系统、事务型系统、离线计算和实时计算七大类业务系统的数据库选型建议。先明确下NoSQL的分类

NoSQL数据库分类

在这里插入图片描述

场景分析及选型

系统类型场景数据量并发量实时性一致性要求读写分布和类型安全性运维性数据库选型
管理型系统运营类管理中等中等中等读写均衡关系型数据库(如MySQL、PostgreSQL)
大流量系统电商单品页服务高(后台)读多写少(前台)后台:关系型数据库(如MySQL、PostgreSQL)
前台:K-V数据库(如Redis、Memcached)
日志型系统日志收集与分析写多读少原始数据:列式数据库(如HBase、Cassandra)
日志搜索:倒排索引数据库(如Elasticsearch)
搜索型系统站内商品搜索中等读多写少后台:关系型数据库(如MySQL、PostgreSQL)
前台:倒排索引数据库(如Elasticsearch)
事务型系统金融交易、库存中等读写均衡关系型数据库(如MySQL、PostgreSQL)+ 缓存(如Redis)+ 一致性协议(如Paxos、Raft)或新型关系数据库(如CockroachDB、TiDB)
离线计算大数据批量分析读多写少列式数据库(如Hadoop HDFS、Apache Parquet)
或关系型数据库(如MySQL、PostgreSQL)
实时计算实时监控、物联网中高写多读少时序数据库(如InfluxDB、TimescaleDB)
或列式数据库(如Druid、ClickHouse)

详细说明

  1. 管理型系统

    • 适用场景:运营类系统、管理信息系统。
    • 数据库选型:关系型数据库(如MySQL、PostgreSQL)因为其高一致性和数据完整性。
  2. 大流量系统

    • 适用场景:电商单品页的某个服务。
    • 数据库选型
      • 后台:关系型数据库(如MySQL、PostgreSQL)以确保数据一致性。
      • 前台:内存型数据库(如Redis、Memcached)以应对高并发和快速响应需求。
  3. 日志型系统

    • 适用场景:日志收集和分析。
    • 数据库选型
      • 原始数据存储:列式数据库(如HBase、Cassandra)以优化大数据写入。
      • 日志搜索:倒排索引数据库(如Elasticsearch)以实现快速查询和搜索。
  4. 搜索型系统

    • 适用场景:站内搜索(如商品搜索)。
    • 数据库选型
      • 后台:关系型数据库(如MySQL、PostgreSQL)用于数据管理。
      • 前台:倒排索引数据库(如Elasticsearch)用于快速搜索和查询。
  5. 事务型系统

    • 适用场景:库存管理、交易系统、记账系统。
    • 数据库选型:关系型数据库(如MySQL、PostgreSQL)+ 缓存(如Redis)+ 一致性协议(如Paxos、Raft),或者使用新型关系数据库(如CockroachDB、TiDB)以确保数据一致性和高并发处理。
  6. 离线计算

    • 适用场景:大数据分析和处理。
    • 数据库选型:列式数据库(如Hadoop HDFS、Apache Parquet)或关系型数据库(如MySQL、PostgreSQL)以应对大量数据的批量处理需求。
  7. 实时计算

    • 适用场景:实时监控和分析。
    • 数据库选型:时序数据库(如InfluxDB、TimescaleDB)或列式数据库(如Druid、ClickHouse)以支持高频数据写入和实时分析。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第十章 软件工程
  • MongoDB教程(十八):MongoDB MapReduce
  • 对递归的一些理解。力扣206题:翻转链表
  • 细说网络安全五家龙头企业,你去过哪一家?
  • SkyWalking入门搭建【apache-skywalking-apm-10.0.0】
  • 二、QGroundControl开发环境搭建
  • Linux下如何安装配置Zsh Shell
  • 鸿蒙之Grid实现拖动自定义排序特效
  • 决策树(Decision Tree)
  • 培训第十三天(DNS逆向解析与主从服务、ntp时间服务器)
  • 【接口自动化_08课_Pytest+Yaml+Allure框架】
  • 从统计学、到机器学习和ChatGPT
  • 数据结构第三讲:单链表的实现
  • GitLab添加TortoiseGIT生成SSH Key
  • Java 中如何执行命令行方法
  • “大数据应用场景”之隔壁老王(连载四)
  • 【347天】每日项目总结系列085(2018.01.18)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • conda常用的命令
  • happypack两次报错的问题
  • HomeBrew常规使用教程
  • Java精华积累:初学者都应该搞懂的问题
  • Laravel核心解读--Facades
  • leetcode-27. Remove Element
  • Linux快速复制或删除大量小文件
  • log4j2输出到kafka
  • npx命令介绍
  • vue脚手架vue-cli
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 选择阿里云数据库HBase版十大理由
  • ​什么是bug?bug的源头在哪里?
  • # 数仓建模:如何构建主题宽表模型?
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (ros//EnvironmentVariables)ros环境变量
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)EOS中账户、钱包和密钥的关系
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net 7和core版 SignalR
  • .NET DataGridView数据绑定说明
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .NET使用存储过程实现对数据库的增删改查
  • .NET运行机制
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • @软考考生,这份软考高分攻略你须知道
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [1]-基于图搜索的路径规划基础
  • [1204 寻找子串位置] 解题报告
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [51nod1610]路径计数