数据库系统

SqlServer索引的原理与应用

孤人 提交于 2020-03-18 20:05:35
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页

测试环境的熟知

谁说我不能喝 提交于 2020-03-17 20:06:30
测试环境:是指为了完成软件测试工作所必需的工具,其中测试环境包括以下几个方面:硬件、软件、测试工具。 1 硬件:一般为测试过程中所需要的设备 就是工作中所使用的电脑比如Windows的系统或者MacOS系统,linux系统也算是吧 2 软件:例如adb命令需要做压测的、还有就是熟知的数据库,数据库使用比较少,里面的数剧比较重要 3 测试工具:测试工具就是日常工作需要的工具,例如常用的 bug管理工具:禅道、 抓包工具:fddler、 手机app性能测试的工具:腾讯GT 接口测试工具:Jmeter 以及xmind思维导图 来源: https://www.cnblogs.com/123456ww/p/12512692.html

系统稳定性问题总结

让人想犯罪 __ 提交于 2020-03-17 12:34:17
1.重要接口 2.重要场景 3.压测方案 4.构造测试数据 5.去掉免登去模拟请求,压测自己的接口 6.评估压测 历史高峰值三倍 或预估流量三倍 7.执行压测,线上服务器 8.晚上10点以后 9.压测时关注 系统监控,业务监控,cpu,内存,容量上限 压到系统报警 10.整理压测报告 11.压测接口列表 rt,内存,cpu 12.提交审核前提前沟通,有没有问题 常见问题: 1.慢sql,sql包含业务逻辑,多表联合查询,索引不合理,使用like 统计可以用like,主业务不能用like,不用select *,只查单表 2.读写比高的用redis,秒杀分布式锁,不要用数据库,用redis 统计数据不用数据库实时查,用定时服务 3.内部服务调用用prc,不用http 4.静态资源 5.资源消耗到ecs,别消耗到数据库中,数据库扩容比较麻烦,ecs更容易扩容 6.http也是有连接池的 来源: https://www.cnblogs.com/liuqiyun/p/12509534.html

(ETL)ETL架构师面试题(转载)

懵懂的女人 提交于 2020-03-17 11:54:42
1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL 项目组的作用是什么? 答:逻辑数据映射(Logical Data Map)用来描述源系统的数据定义、目标数据仓库的模型以及将源系统的数据转换到数据仓库中需要做操作和处理方式的说明文档,通常以表格或Excel的格式保存如下的信息: 目标表名: 目标列名: 目标表类型:注明是事实表、维度表或支架维度表。 SCD类型:对于维度表而言。 源数据库名:源数据库的实例名,或者连接字符串。 源表名: 源列名: 转换方法:需要对源数据做的操作,如Sum(amount)等。 逻辑数据映射应该贯穿数据迁移项目的始终,在其中说明了数据迁移中的ETL策略。在进行物理数据映射前进行逻辑数据映射对ETL项目组是重要的,它起着元数据的作用。项目中最好选择能生成逻辑数据映射的数据迁移工具。 2. What are the primary goals of the data discovery phase of the data warehouse project? 在数据仓库项目中,数据探索阶段的主要目的是什么? 答:在逻辑数据映射进行之前,需要首先对所有的源系统进行分析。对源系统的分析通常包括两个阶段,一个是数据探索阶段(Data

数据库连接池原理

可紊 提交于 2020-03-15 09:31:55
—— 连接池用什么数据结构实现? —— 实现连接池的代码 —— 线程安全问题 【数据库连接池的设计思路及java实现】【 http://blog.csdn.net/shijinupc/article/details/7836129】 【Java的JDBC数据库连接池实现方法】【 http://developer.51cto.com/art/200907/137300.htm 】 ​ 【设计数据库连接池,要考虑哪些问题?】 1. 有一个简单的函数从连接池中 得到 一个 Connection。 2. close 函数必须将connection 放回 数据库连接池。 3. 当数据库连接池中没有空闲的connection,数据库连接池必须能够 自动增加 connection 个数。 4. 当数据库连接池中的connection 个数在某一个特别的时间变得很大,但是以后很长时间只用其中一小部分, 自动将多余connection 关闭 。 5. 如果可能,应该提供debug信息 报告没有关闭的 new Connection。 【四个流行的Java连接池】 C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。 BoneCP

数据库表结构设计方法及原则

我与影子孤独终老i 提交于 2020-03-12 15:29:21
在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题,下文是我针对这几个问题根据自己的设计经历准备总结的一篇文章的提纲,欢迎大家一块进行探讨,集思广益。其中提到了领域建模的概念,但未作详细解释,希望以后能够有时间我们针对这个命题进行深入探讨。 1)不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。 2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。 3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性

数据库表结构设计方法及原则

偶尔善良 提交于 2020-03-12 15:27:33
http://www.cnblogs.com/RunForLove/p/5693986.html 数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。   在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性); 第二范式(确保表中的每列都和主键相关); 第三范式(确保每列都和主键列直接相关,而不是间接相关)。   在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题

数据库介绍

戏子无情 提交于 2020-03-10 04:34:33
数据库技术 数据库技术是一门数据库管理的有效技术,研究如何对数据进行有效地科学地管理数据,从而为用户提供可共享的、安全的、可靠的数据。 数据库技术分为了数据、数据库、数据库系统以及数据库管理系统四个部分 数据 早期的计算机系统主要用于科学计算,处理的数据是数值型数据像整数、浮点数等。 而在现代对于数据的概念是广义的,不再是单纯的一个数值,而是有各种含义。比如文字、图片、图像、音频、视频等都是数据。 数据除了表现形式外,还有语义,例如: 如上图所示,一个数值88,它既可以单纯表示一个值,也可以表示为一个部门的人数或者是一门考试的成绩、一个人的体重等等。因此对于一个数据我们要以多方面来看待它。 记录 数据在我们数据库的储存中不是离散的,而是有组织的、统一的。记录是在计算机中表示和存储数据的一种格式或一种方法。我们可以用一组数据来描述一个人员的具体信息,这一组数据在数据库中被称为一条记录。例如: 我们用一组数据来描述一位学生的信息,例如姓名、性别、籍贯、出生年月、以及年级等信息,这么一组数据存入我们的数据库中被称为一条记录。 数据库(database db) 所谓数据库指的是大量数据的集合,数据库是存放我们数据的一个容器。它有以下特点: 永久存储 提供数据长期存储的一个机制,能够在数据出现故障时能够对数据进行恢复,来保证数据的完整。 有组织 按一定的数据模型组织,描述和储存

一条sql语句执行很慢的原因有哪些?(待补全)

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-09 16:39:29
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。 之前腾讯面试的实话,也问到这个问题了,不过答的很不好,之前没去想过相关原因,导致一时之间扯不出来。所以今天,我带大家来详细扯一下有哪些原因,相信你看完之后一定会有所收获,不然你打我。 开始装逼:分类讨论 一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。 1、大多数情况是正常的,只是偶尔会出现很慢的情况。 2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。 针对这两种情况,我们来分析下可能是哪些原因导致的。 针对偶尔很慢的情况 一条 SQL 大多数情况正常,偶尔才能出现很慢的情况,针对这种情况,我觉得这条SQL语句的书写本身是没什么问题的,而是其他原因导致的,那会是什么原因呢? 数据库在刷新脏页我也无奈啊 当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在 内存 中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到 磁盘 中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到 磁盘 中去。 不过

浓缩精华的架构演进过程,经验总结,值得收藏!

◇◆丶佛笑我妖孽 提交于 2020-03-09 12:27:53
架构设计的演进过程 业务驱动技术的发展是亘古不变的道理。最开始的时候,业务量少,业务复杂度低,采取的技术也相对简单,基本满足用户对功能的需求。随着IT信息化的普及,更多的交易放到了网络上,信息量增加和访问次数频繁就是要解决的问题了。因此,逐渐加入了缓存、集群等技术手段。同时对业务的扩展性和伸缩性的要求也越来越高。高并发、高可用、可伸缩、可扩展、够安全的软件架构一直是架构设计追求的目标。今天我们来看一下架构设计经历了哪些阶段,每个阶段都解决了哪些问题,又引出了哪些新问题。主要是引起大家的思考,在不同的业务发展阶段采取合适技术手段,用变化拥抱变化是IT人追求的目标。 应用与数据一体模式 最早的业务应用以网站、OA等为主,访问的人数有限,单台服务器就能够应付。通常,将应用程序和数据库部署到一台服务器上面,如图1-1所示。在这一阶段,我们利用LAMP(Linux Apache MySQL PHP)技术就可以迅速搞定,并且这些工具都是开源的。很长一段时间内,有各种针对这种应用模式的开源代码可以使用。这种模式基本上没有高并发的要求,可用性也很差。有的服务器采用托管模式,上面就安装了不同的业务应用,一旦服务器出现问题,所有的应用就罢工了。不过其开发和部署成本相对较低,适合刚刚起步的应用服务。图1 就描述了单个应用和数据库运行在单台服务器的模式,我们称这种模式为应用与数据一体模式。 图 1