数据库

Redis 的雪崩、穿透和击穿

梦想的初衷 提交于 2020-04-05 19:50:16
缓存雪崩 假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。 通常我们在使用 Redis 的时候,都会为缓存设置过期时间,但是如果在某个时间点,有大量缓存失效,那么下一个时间点就会有大量请求访问到数据库,这种情况下,数据库可能因为访问量多大导致“崩溃”,这就是缓存雪崩。 第一种情况:缓存雪崩的事前事中事后的解决方案如下: 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。对于缓存大面积失效的情况可以设置缓存的失效时间使用随机数,避免此问题。 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 第二种情况: 不设置缓存过期时间 最暴力的解决办法,缓存不设置自动过期时间,只要缓存不崩,数据库就不会崩。 设置随机过期时间 另外一个办法,就是让缓存过期时间不那么一致,比如一批缓存数据24小时后过期,那么就在这个基础上,让每条缓存的过期时间前后随机 1-6000 秒(1

从 TPCH 测试学习性能优化技巧

早过忘川 提交于 2020-04-05 19:45:58
一、 目标 TPCH是由TPC(Transaction Processing Performance Council)事务处理性能委员会公布的一套针对数据库决策支持能力的测试基准,通过模拟数据库中与业务相关的复杂查询考察数据库的综合处理能力,获取数据库操作的响应时间。 TPCH基准模型中定义了一个数据库模型,容量可以在1GB~10000GB的8个级别中进行选择。数据库模型包括CUSTOMER、LINEITEM、NATION、ORDERS、PART、PARTSUPP、REGION和SUPPLIER 共8张数据表,以及22条SQL查询语句,涉及内容广泛丰富,可以较完整地测试数据库的运算性能。 TPCH的SQL中不乏一些多层嵌套的复杂查询,执行性能较差。对于这些查询,如果能采用更合理的存储方案,设计低复杂度算法并配合并行等手段,将获得更优的性能。但遗憾的是,由于理论体系的限制,很多想法无法用SQL实现,而SQL程序员也因此不关注这些性能优化方法,经常只能忍受数据库的低速运算。 本系列文章将通过这8张表及22条SQL讨论数据运算时的性能优化技巧,仔细分析每一条语句,发现其运算和数据特征,设计更合理的算法加以实现。由于SQL难以实现这些算法和存储结构,我们将使用集算器组表来存储数据,并用SPL实现这些算法,同时与Oracle上的SQL对比性能

iDatabase for mac(个人数据库管理器) v6.2

亡梦爱人 提交于 2020-04-05 19:38:29
[名称]: iDatabase for mac [大小]: 20.38 MB [语言]:英文 [测试环境]: Mac OS 10.15.x [下载链接]: https://www.macdown.com/mac/790.html 简介 iDatabase for mac,您的个人数据库管理器,用最简单的方式来组织信息,管理会员名单,费用,项目,跟踪您的互联网密码等等。 功能特色 1、用处繁多 点击创建集合和库存。 在没有任何数据库经验的情况下,您可以使用包含的模板快速创建和自定义包含库存,会员列表,费用,项目,配方等的数据库! 您可以选择22种随时可用的模板,并对其进行自定义以组织所有类型的信息:CD收藏品,DVD收藏品,光盘,我的帐户,课程,计算机,联系人,客户,活动,日记练习,费用,库存,电影目录,会员列表,移动电话,笔记,项目,食谱,待办事项,汽车维修,动物和书籍。 您还可以通过电子邮件轻松地与其他iDatabase用户交换模板。 2、让你的生活更轻松 输入您正在寻找的内容,并让应用为您完成工作。 您是否在寻找联系人,书籍,您的账户信息或存储在您的数据库中的链接?没问题,请在搜索字段中输入您要查找的内容,然后让应用为您完成工作。即使您希望通过滚动查看数据,iDatabase也可以为您提供帮助。 您可以通过任何字段对数据进行排序,最后,如果您与同事或家人共享Mac

读取数据库pymysql

被刻印的时光 ゝ 提交于 2020-04-05 19:29:51
# 读取数据库 # 链接数据库 # 创建一个查询页 # 输入sql语句 # 查询 # 查看结果 # 关闭查询页 # 关闭数据库 import pymysqlclass ReadMysql: def __init__(self): self.mysql = pymysql.connect(host='', user='', password='', charset='utf8', port=3306) self.cursor = self.mysql.cursor() def fetch_one(self, sql): self.cursor.execute(sql) result = self.cursor.fetchone()[0] print(result) def fetch_all(self, sql): self.cursor.execute(sql) result = self.cursor.fetchall()[0][0] print(result) def close(self): self.cursor.close() self.mysql.close() if __name__ == '__main__': 来源: https://www.cnblogs.com/sophia-985935365/p/12634467.html

面试题:如何保证缓存与数据库的双写一致性?

谁说我不能喝 提交于 2020-04-05 16:59:57
只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析   一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。   串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上请求。 Cache Aside Pattern   最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。   读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。   更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存?   原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。   比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。   另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新

在数据库中选择部分条码数据打印

≡放荡痞女 提交于 2020-04-05 15:55:40
在大批量打印条码的过程中,可能会出现补打或者部分条码需要重新打印的情况,在使用 条码打印软件 的过程中,默认的是选择全部数据,如何选择部分 条码数据 进行打印呢?使用条码打印软件可以通过以下方式解决: 首先条码打印软件在导入数据库时会出现数据源管理对话框,在数据源管理对话框中,数据过滤可以对导入的数据条数进行选择,可以现在所有、也可以设置范围,从第几条到第几条,也可以使用SQL语句进行条码数据的选择。有关数据库导入的教程可以参考如何导入Excel表数据批量生成条形码。 Excel表导入之后,绘制条形码,点击左侧的“条形码”按钮,在画布上绘制条形码对象,双击条形码,在图形属性-数据源中,点击“修改”按钮,数据对象类型选择“数据库导入”,在字段中选择选择的字段,即可出现对应的内容。 设置好之后,可以点击软件上方工具栏中的“打印预览”按钮,看下预览效果。 点击打印后打印出来的条码就是选择的条码数据而不是全部的条码数据。 以上就是有关 条码打印软件 导入数据库打印部分 条码数据 的相关教程。软件的功能比较多,只要敢想,就能做到。感兴趣的朋友可以下载条码打印软件,自己试用一下。 来源: oschina 链接: https://my.oschina.net/u/4184821/blog/3214608

Mysql导入数据库

不羁岁月 提交于 2020-04-05 15:41:41
需要导入一个mysql数据库,因为导出时的数据库与本机的数据库中有同名schema,所以想导入时创建一个不同的数据库名称,这样导入的数据就不影响原来本机上的数据了,具体操作如下: 1:mysql workbench-->File-->open SQL script 2:选择了要导入的sql文件之后,在workbench中可以看到原来的sql文件内容: -- MySQL dump 10.13 Distrib 5.7.17, for Win64 (x86_64) -- -- Host: 127.0.0.1 Database: xxxxxxxxx -- ------------------------------------------------------ -- Server version 5.6.44-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103

小巧嵌入式平台“玩转”大型的数据库管理系统

吃可爱长大的小学妹 提交于 2020-04-05 13:54:09
M ySQL是一个关系型数据库管理系统,由瑞典MySQLAB 公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB 应用方面,MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件。 0 1 ubuntu服务端安装配置 ■ 网络情况介绍 Ubuntu ip:192.168.0.223 (myslq服务端) 开发板 ip:192.168.0.232 (mysql客户端) ■ Ubuntu服务器安装mysql服务 sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev 安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功。 0 2 检查mysql的网络服务是否开启 ■ sudo netstat -tap | grep mysql 如果看到有 mysql的socket处于listen 状态则表示安装成功 ■ 本地登陆验证 密码设置是 123456 mysql -h127.0.0.1 -uroot -p123456 -h表示远程主机的ip地址 -u表示选择登陆的用户名

读取数据库pymysql

大憨熊 提交于 2020-04-04 23:10:26
# 读取数据库 # 链接数据库 # 创建一个查询页 # 输入sql语句 # 查询 # 查看结果 # 关闭查询页 # 关闭数据库 import pymysqlclass ReadMysql: def __init__(self): self.mysql = pymysql.connect(host='', user='', password='', charset='utf8', port=3306) self.cursor = self.mysql.cursor() def fetch_one(self, sql): self.cursor.execute(sql) result = self.cursor.fetchone()[0] print(result) def fetch_all(self, sql): self.cursor.execute(sql) result = self.cursor.fetchall()[0][0] print(result) def close(self): self.cursor.close() self.mysql.close() if __name__ == '__main__': 来源: https://www.cnblogs.com/sophia-985935365/p/12634467.html

【赵强老师】Oracle数据库的存储结构

独自空忆成欢 提交于 2020-04-04 13:21:38
Oracle的存储结构分为:物理存储结构和逻辑存储结构。 一、物理存储结构:指硬盘上存在的文件 数据文件(data file) 一个数据库可以由多个数据文件组成的,数据文件是真正存放数据库数据的。一个数据文件就是一个操作系统文件。数据库的对象(表和索引)物理上是被存放在数据文件中的。当我们要查询一个表的数据的时候,如果该表的数据没有在内存中,那么oracle就要读取该表所在的数据文件,然后把数据存放到内存中。通过下面的语句可以查看当前存在的数据文件和对应的表空间: select file_name,tablespace_name from dba_data_files; 联机日志文件(online redo log file) 一个数据库可以有多个联机日志文件,联机日志文件包含了重做记录(undo records).联机日志文件记录了数据库的改变,例如当一次意外导致对数据的改变没有及时的写到数据文件中,那么oracle就会根据联机日志文件中 的信息获得这些改变,然后把这些改变写到数据文件中.这也是联机日志文件存在的意义.联机日志文件中重做记录的唯一功能就是用来做实例的恢复.比如,一次系统的意外掉电,导致内存中的数据没有被写到数据文件中.那么oralce就会根据联机日志文件中的重做记录功能包数据库恢复到失败前的状态。可以通过下面的语句查看当前存在的日志文件和对应的日志组信息: