数据库

缓存穿透、缓存击穿、缓存雪崩区别和解决方案

做~自己de王妃 提交于 2020-04-04 10:41:28
一、缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。 二、缓存穿透 描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方案: 1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一 个id暴力攻击 三、缓存击穿 描述: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力 解决方案: 1.设置热点数据永远不过期。 2.加互斥锁,互斥锁参考代码如下: 说明: 1)缓存中有数据,直接走上述代码13行后就返回结果了 2)缓存中没有数据,第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待100ms,再重新去缓存取数据。这样就防止都去数据库重复取数据,重复往缓存中更新数据情况出现。 3

一分钟 Get 时序数据库 InfluxDB 的技能

守給你的承諾、 提交于 2020-04-04 10:40:41
1. 通过上期分享《实践指路明灯,源码剖析flink-metrics》,对当下较火的流式处理框架 flink 的指标监控体系有了全局的认识,并结合 flink-metrics-xxxx 模块进行深入分析,对 flink 是如何集成监控轮子了如之掌。 不过,源码中的 flink-metrics-influxdb 模块,你是否留意到?按照设计规范,不用多想,那肯定是 flink 指标监控对 influxdb 的集成。 那么,influxdb ?influxdb 是啥?influxdb 你用过吗? 今天稍微花一分钟,带你 Get 这门技能,放心不会伤脑。 (图看不清放大了去看) 2. 去说 InfluxDB 之前,先聊聊, 什么是时间序列数据(时序数据)? 时间序列数据就是在不同时间上收集到的数据,主要有两个关键指标:监测时间和监测数值。 生活中常见的时间序列数据,包括股票价格、网站的 PV/UV、服务器系统监控数据(比如 CPU 和内存占用率)等等。 那时间序列数据应该存到哪儿? 时间序列数据库(TSDB)是啥? A time series database (TSDB) is a software system that is optimized for storing and serving time series through associated pairs of time

Delphi 7连接MySql 5.5.15

给你一囗甜甜゛ 提交于 2020-04-04 08:05:30
原文:http://blog.csdn.net/akof1314/article/details/6822902/ 网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需。 系统环境:Windows XP SP3 软件环境:Delphi 7 、mysql-installer-5.5.15.0 1.ODBC方式 必须要先有MySql的ODBC驱动,我下载的是全安装版,包括MySql服务器、各种所支持的连接、工作台、示例数据库、文档,若是无ODBC驱动,可以到官网 http://dev.mysql.com/downloads/connector/odbc/ 下载。 ①数据源方式 首先,确认安装了MySql的ODBC驱动,打开“控制面板”→“管理工具”→“数据源”,切换到“驱动程序”页,查看“MySql ODBC 5.1 Driver",如下图所示: 切换到"系统DSN"→"添加"→"MySql ODBC 5.1 Driver",如下图所示: 弹出MySql数据源配置,数据源名称随意,TCP/IP Server为数据库地址,User用户名,Password密码,Database连接的数据库,点"Test"进行测试连接,如下图所示: 点击"OK"后,即可看到新增加了一个数据源。打开Delphi 7,在窗体上放置TADOConnection

DELPHI 使用dbexpress控件连接MySQL数据库方法

丶灬走出姿态 提交于 2020-04-04 08:04:42
1. 在窗体上放置4个控件: SQLConnection1,SimpleDataSet1,DataSource1,DBGrid (注意: 如果 出现"Operation not allowed on unidirectional dataset"错误提示原因如下:)。 在网上查到一篇文章如下: 错误描述: 当使用dbExpress控件操作数据库时,用到sqlconnection1、sqlquery1、datasource1和dbgrid1。按顺序连接,当将dbgrid的DataSource属性设为datasource1控件时发生错误:"Operation not allowed on unidirectional dataset"。 错误原因: 由于sqlquery控件是游标单向的,而dbgrid控件是双向的。两者不配合,所以产生以上的错误信息。(sqldataset、sqltable都是单向的) 所以dbgrid不能与单向的数据集连接。 解决办法: (1)换用SimpleDataSet; (2)使用SQLQuery+DataSetProvider+ClientDataSet+DataSource +DBGrid 2. 设置方法: SQLConnection1: SimpleDataSet1 (注意这个: 输入SQL语句后,Active属性要设成True, DBGrid

mysql 数据库基本命令

别说谁变了你拦得住时间么 提交于 2020-04-04 07:12:03
停止mysql服务:net stop mysql // 管理员方式运行 启动mysql服务:net start mysql 进入数据库:mysql -u root -p 查看数据库:show databases; 使用数据库:use 数据库名; 查看数据库中的表:show tables; 查询 表:select * from 表名; 查询表的详细字段:desc 表名;    describe 创建数据库(database) create database 数据库名; 创建表(table) create table 表名( id int primary key, name varchar(16), age int ); 删除表:drop table 表名; 删除数据库:drop database 数据库名;创建: -- 注释 -- 查看创建数据库的过程 show create database 数据库名; -- 使用数据库 use 数据库名; -- 创建表 create table 表名(字段); create table test( id int not null, name varchar(16), info varchar(64) ); -- 查看数据库中存在的表 show tables; -- 查看表的字段 DESCRIBE 表名; 修改: -- 修改表名 alter

基础知识:Mysql基本操作命令

一世执手 提交于 2020-04-04 07:09:52
启动mysql : mysql -hlocalhost -uroot -p 创建数据库:create database 数据库名字; 指定要操作的数据库:use 数据库名字; 查看数据表建表语句:show create table 数据表名字; 查看数据库中的数据表基本结构:show tables; 创建数据表:create table 数据表名字; 使用DESCRIBE语句查看数据表:describe 数据表名字; //查看该数据表详细信息,字段名,数据类型等 为数据表重命名:alter table 旧数据表名字 rename 新数据表名字; 修改字段名:alter table 数据表名字 change 旧字段名称 新字段名称 新数据类型; 修改字段数据类型:alter table 数据表名字 modify 字段名字 数据类型; 修改字段的排列位置:alter table 数据表名字 modify 字段名1 数据类型 after 字段名2; //第一列可以使用FIRST,非第一列使用AFTER 删除数据表:drop table 数据表名字; 在表中添加新字段: alter tbale 数据表名字 add 新字段名字 数据类型 not full(可添加) after 放在一个已有字段后面; 删除表中字段: alter table 数据表名字 drop 要删除的字段; 删除数据库 :

MySQL数据库8(四)数据表基本操作

非 Y 不嫁゛ 提交于 2020-04-04 07:06:21
数据表操作 创建数据表 数据库中数据表的名字通常有前缀:取数据库的前两个字母加下划线,易于区分。 普通创建表 基本语法:create table 表名(字段名 字段类型[字段属性],字段名 字段类型[字段属性]…)[表选项] 表必须放在对应的数据库下:有两种方式可以将表挂入到指定的数据库下 1、在数据表名字前面加上数据库名字,用“.”号连接即可。数据库.数据表 2、在创建数据表之前先进入到某个具体的数据库即可:use 数据库名字; 表选项:与数据库选项类似 engine:存储引擎,mysql提供的具体存储数据的方式,默认有一个innodb(5.5之前默认是myisam) charset:字符集 – 只对当前自己表有效(级别比数据库高) collate:校对集 –只对当前自己表有效(级别比数据库高) 复制已有表结构 从已经存在的表复制一份(只复制结构,如果表中有数据不复制) 基本语法:create table 新表名 like 表名;//只要使用数据库.表名,就可以在任何数据库下访问其他数据库的表名。 显示数据表 每一张数据表创建,那么就会在对应的数据库下创建一些文件(与存储引擎有关) 注意:innodb存储引擎所有文案都存储在外部的ibdata文件 显示所有表 基本语法:show tables; 显示匹配表 基本语法:show tables like ‘匹配模式’; 显示表结构

daily scrum 9

放肆的年华 提交于 2020-04-04 06:37:30
今天 明天 困难 陈凯 实现了与蒋老师和胡文凭的成功连接,已经可以展现族谱图像,并与傅孝明一起修正了族谱数据的返回方法,成功解决了异步问题。 Item37365 优化代码,更好的展现多层族谱,争取完成所有工作。 Item37366 多层数据的获取存在问题,原因尚不明 胡文凭 Item 37356: 没有什么进展,现在由于得到数据和原先的设想有较大的区别,目前的 layout 算发几乎没有任何的作用,当然随着师生关系的信息挖掘更深入全面,应该还是会由用的 Item 37357&37356: 根据目前的数据,调整 layout 算法,估计需要新的 layout 算法了 最大问题是电脑罢工了,不知道为什么 check in 数据部分的工程后,原先的某些工程在我的电脑上加载不上,直接导致我无法投入工作,希望明天能够解决这个问题 任少卿 37681 ,继续搜集师承关系数据,完成 http://genealogy.math.ndsu.nodak.edu 数据抓取与分析,将数据筛选输入数据库 37613 ,继续收集数据,整合各个部分 人工收集数据如果进行严格筛选,会损失大量信息 王佳磊 完成 37375 ,把人工搜集和自动爬取的数据整合到了一起,一共达到了 12510 对,并把数据库和 UI 连起来,形成了整个系统。 37376 ,再搜集一部分数据,修复系统的 bug 。 整个查询系统还有些问题

MongDB简介

风格不统一 提交于 2020-04-04 01:54:40
一、基本概念 MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用C++开发。MongoDB 的官方网站地址是: http://www.mongodb.org/ ,大家可以在此获得更详细的信息。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立 索引。它是一个面向集合的,模式自由的文档型数据库。 二、对比 MongoDB 关系型数据库 数据存储 面向集合 面向关系表 数据结构 模式自由 二维表关系模式 事务 不支持 支持 大型数据(视频) 很好 一般 大数据量查询(千万条以上) 很好 较差 数据库维护 相对简单 相对复杂 数据及表关系、结构浏览 困难 简单 数据安全性 较差 很好 分布式 很好 一般 查询 非常灵活 非常强大 主外键关联 不支持 支持 索引 支持 支持 存储过程 支持 支持 三、对比说明 1. 数据存储 MongoDB是面向集合

mysql innodb数据库损坏导致无法启动

假如想象 提交于 2020-04-04 01:42:35
生产环境中的mysql突然启动不了,查了原因是innodb库错误,以前就遇到过这个问题,稀里糊涂的没解决,结果导致大量数据丢失。这些又遇到这个问题,果断把那个有问题的数据库移动了别的地方,启动了mysql使用。然后正好赶上中秋节假期,所以花了两天时间认真查资料,一点点的解决问题。 因为我是用docker做了一个沙箱,但是启动不起来,在这里上面浪费了半天的时间。这个跳过,直接说一下思路和过程。有什么问题可以微信我(winsonhsu)备注mysql技术交流 整个过程需要三个库 we7 we7_old we7_tmp 1.备份数据库文件夹we7 2.设置数据库为恢复模式innodb_force_recovery = 3 3.启动数据库we7 4.此时可以看到库里的innodb数据表都没有显示出来.只有myiasm表 4.创建一个新库we7_tmp 5.使用navcat的tools>>data transfer 库建从we7到新库we7_tmp 这样就把myiasm库都复制过去了 6.还原一个过去备份的数据库we7_old,用navcat里的tool>>structure synchronization工具进行架构比较,只比较表,得到差异后只复制增加的表语句,得到innodb的表结构 innodb.sql 7.在we7_tmp中执行innodb.sql 8.将复制过来的.ibd文件与