Linux——中间件、数据库(理论)

2024-09-02 16:44

本文主要是介绍Linux——中间件、数据库(理论),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中间件:

  1. 缓存服务: 常规的NOsql (非关系型数据)memcached ectd redis hbase  
  2. 加速服务: squid (反向代理服务器) varnish nginx也支持缓存功能
  3. 消息队列: rabbitmq  Amq
  4. 专门用于数据库优化的应用,以MySQL为例  oneproxy(读写分离和分表) mha(高可用 读写分离)
  5. 日志收集和分析: elk

选择关系型数据库的利与弊:

利:

  1. 容易理解:可由二维表结构来逻辑表达,相对网状、层次等其他模型更加容易被理解。严格遵循数据格式与长度规范,数据以行为单位,一行数据表示一个实体信息,每一行数据的属性都是相同的。存放的数据更加有逻辑性。

ER表    实体   属性   关系

2、事务特性:支持 ACID 特性,可以维护数据之间的一致性,这是使用关系数据库非常重要的一个理由。

3、操作方便:通用的 SQL 语言使得操作关系型数据库非常方便,支持 join 等复杂查询,Sql + 二维关系是关系型数据库最无可比拟的优点,这种易用性非常贴近开发者。

4、数据稳定:数据持久化到磁盘,没有丢失数据风险。

5服务稳定:最常用的关系型数据库产品 MySql、Oracle 服务器性能卓越,服务稳定,通常很少出现宕机异常。

问题:

1、高并发下数据库瓶颈明显:数据按行存储,即使只针对某一列进行运算,也会将整行数据从存储设备中读入内存,导致 IO 较高。写入更新频繁的情况下,数据库往往会出现 CPU 飙高、Sql 执行慢、客户端报数据库连接池不够等异常情况,且性能瓶颈通过加 CPU、换固态硬盘、继续买服务器加数据库做分库等方式处理 ROI 不高,受限于其本身的特点,可能花了很多钱都未必能达到想要的效果。因此例如万人秒杀这种场景,我们绝对不可能通过数据库直接去扣减库存,需要做好流量漏斗。

2、为维护数据一致性付出的代价大:数据一致性是关系型数据库的核心,但是同样为了维护数据一致性的代价也非常大。SQL 标准为事务定义了不同的隔离级别,从低到高依次是读未提交、读已提交、可重复度、串行化,事务隔离级别越低,可能导致的并发异常越多,但是能提供的并发能力越强。那么为了保证事务一致性,数据库就需要提供并发控制与故障恢复两种技术,前者用于减少并发异常,后者可以在系统异常的时候保证事务与数据库状态不会被破坏。对于并发控制,其核心思想就是加锁,无论是乐观锁还是悲观锁,只要提供的隔离级别越高,那么读写性能必然会受影响。

3、为维护索引付出的代价大:为了提供丰富的查询能力,通常热点表都会有多个二级索引,一旦有了二级索引,数据的新增必然伴随着所有二级索引的新增,数据的更新也必然伴随着所有二级索引的更新,这不可避免地降低了关系型数据库的读写能力,且索引越多读写能力越差。除了数据文件不可避免地占空间外,索引占的空间其实也并不少。

4、水平扩展后带来的种种问题难处理:随着业务规模扩大,一种方式是对数据库做分库,做了分库之后,数据迁移(1 个库的数据按照一定规则打到 2 个库中),跨库 join、分布式事务处理都是需要考虑的问题,尤其是分布式事务处理,业界当前都没有特别好的解决方案。

5、全文搜索功能弱:例如 like “% 新年快乐 %”,只能搜索到 “新年快乐,爱大家”,无法搜索到 “新年真是太快乐了,爱大家” 这样的文本,即不具备分词能力,且 like 查询在 “% 新年快乐” 这样的搜索条件下,无法命中索引,将会导致查询效率大大降低。

6表结构扩展不方便:由于数据库存储的是结构化数据,因此表结构 schema 是固定的,扩展不方便,如果需要修改表结构,需要执行 DDL(data definition language)语句修改,修改期间会导致锁表,部分服务不可用。

以上6点其实可以简单的总结为:

  1. 读写速度慢
  2. 全文搜索的功能弱    // 只有部分非关系型数据库具备较强的全文搜索功能Hbase
  3. 随着应用发展,数据存储需求多样化,而关系型数据库扩展能力弱。

一般会使用非关系型数据库来弥补数据库的不足之处。

大部分的非关系型数据库在读写速度和数据扩展方面的表现远远优于关系型数据库。

非关系型数据库 -- redis

基本特性:

  1. redis一共有16个库
  2. redis使用键值对完成数据存储
  3. 每一个库当中可以保存固定数量的键值对
  4. redis支持的值的类型非常丰富,支持目前最为流行的json 也支持自定义数据类型
  5. redis数据的读写都直接的发生在内存中
  6. redis支持AOF 和 RDB 两种方式持久化,将内存中的数据写入指定文件以实现持久化
  7. redis 支持哨兵模式,对于redis 进程进行监控,一旦出现问题可以尝试恢复redis服务进程
  8. redis自带集群模式,自动形成redis集群,自动划分每一个库维护的键值对数量
  9. 丰富的开发语言支持

适用场景:

  1. 数据缓存
  2. 数据复制
  3. sessions 管理
  4. 快速数据处理

使用行业:

金融服务

游戏

医保

零售

这篇关于Linux——中间件、数据库(理论)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130505

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念