数据库

BUG集中营

♀尐吖头ヾ 提交于 2020-03-27 06:01:44
1. 程序运行时持续向数据库写入数据。大约四五小时后就无法写入,错误提示为数据库不存在或访问被拒绝。并且影响到其它程序也无法往数据库写入数据。一开始以为是数据量太大太频繁导致数据库崩溃。减少数据写入,测试发现在运行四五小时之后问题依然如故。最后才发现原来是程序运行过程中大量开启TCP端口,没有关闭,导致系统无端口可用,而与数据库的交互也是通过TCP连接的。 来源: https://www.cnblogs.com/liumu1209/archive/2012/12/24/2831696.html

为什么数据库用b+树不用b树和红黑树

偶尔善良 提交于 2020-03-27 02:54:40
前几天面试被问到了,没答好,记录一下: 首先说红黑树为什么不行: 1.红黑树必须存在内存里的,数据库表太大了,存不进去。 2.即使你找到了把红黑树存进硬盘的方法,红黑树查找一个节点最多要查logN层,每一层都是一个内存页(虽然你只是想找一个节点,但硬盘必须一次读一个页。。),那么一共logN次IO,伤不起阿! 所以我们必须考虑减少树的层数来减少IO次数从而加快查询、修改数据库效率,b和b+树都符合这样的性质,它们每个节点的孩子都很多(几十~几千),所以整个树的高度可以压的很低。 比如100000000数据,每个节点有1000个孩子,那么log 1000(100000000)<3,3层就足够存了! 先讲下b树和b+树的区别: b树的所有节点都是数据节点,但b+树只有叶子节点是数据节点,非叶子(内部)节点只起导向作用,不存储实际数据。 b+树的所有数据节点都在最下层(叶子节点层),相邻节点有链表相连。 注意磁盘读数据读一个字节和读10个字节和读一页时间相差不大的(因为磁盘查找时间大多数都花在寻道上,旋转基本不费时) 再说b树为什么不如b+树: 1.b树的内部节点都是存储实际数据的,比如一个节点是一个页4096字节,其中每条数据128字节,那么一个节点只能存32个数据项,那么对应的孩子节点数最多为33个,这显然不够用。而b+树内部节点只作为导向作用,只存一个整数就可以,4096/4

服务端文件管理方案

不想你离开。 提交于 2020-03-27 02:46:38
上传: 如果服务端不存在,添加服务器端文件,同时添加数据库记录,引用计数为0; 如果服务端存在,不添加文件,不添加数据库记录,将已有数据库记录返回给客户端使用。 删除: 不删除服务器端文件,不删除数据库记录。 上传和删除动作都在客户端做引用计数统计,每次上传,引用计数+1,每次删除,引用计数-1,最终保存时,将引用计数的最终值写入数据库,但引用计数不得小于0(小于0的情况不可能发生,如果发生,则程序有BUG)。如果取消保存,引用计数的修改放弃,也不会影响服务端文件。 服务端引用计数为0的文件,可设置生存期,过期的自动删除,通过数据库代理即可做到,也可以通过程序执行。 来源: https://www.cnblogs.com/qldsrx/archive/2012/03/02/2377250.html

用 Docker 启动 MySQL

烈酒焚心 提交于 2020-03-26 23:38:14
3 月,跳不动了?>>> 事情是这样的,我们已经把项目交付给了甲方,甲方还想进一步开发,但是我们的报价让甲方不满意。甲方就找了其他人开发。讲真,一分钱一分货,那伙人把服务器搞摊跑路了,各种服务全挂了。 要知道,把他们搞坏的修好,还不如重装系统比较快,何况是云服务器。 我复制下来数据库的文件们,大概长这样。 因为是 mysql 5.7 的数据库。先下载一个镜像。 docker pull mysql:5 然后在这个目录启动起来。 docker run -d \ --name mysql \ -v $PWD:/var/lib/mysql \ -p 3306:3306 \ mysql:5 Can’t open the mysql.plugin table. Please run mysql_upgrade to create it. 出现这个错误启动不起来时,可能是 MySQL 版本问题,我用的版本比之前的低了,5.7 用了 5.6 的 MySQL,报错直接退出了。 然后进入容器看看。 docker exec -it mysql bash 这时候我发现我不能连接数据库,因为密码不对,不管是啥原因,反正是不对,我猜是跑路那群人把密码改了(有点腹黑),然后就要 skip-grant-tables ,但是发现没有 vi。 没关系,办法总比困难多。 复制出来改。 docker cp mysql:

linux系统组态

巧了我就是萌 提交于 2020-03-26 19:09:16
一、系统环境 · 1、系统环境需求 · 测试系统环境:优麒麟1910 · 2、组态软件:紫金桥跨平台实时数据库V1.0.31(build 2020-03-16)(X64) · 二、工程管理器 · ······ 用户通过紫金桥跨平台实时数据库开发的项目称为工程,用户通过工程管理器中集中管理本机上的所有工程,包括创建、修改和保存。通常用户在使用本软件时,需要进行各种组态,同时也需要保存许多的设置,比如组态画面运行,创建各种类型的数据库点,进行IO 采集连接等等。软件会把这些组态和设置信息以文件的形式保存在硬盘上。这些按照不同的组织结构生成的文件的集合我们称之为工程,它保存了用户组态的所有信息。 · ······紫金桥跨平台实时数据库工程管理器的主要功能包括:新建工程,进入开发、进入运行,搜索工程、设为缺省工程,工程备份、工程恢复、删除工程,软件授权、保存设置、退出工程等。紫金桥跨平台实时数据库工程管理器界面内容清晰,简洁友好,本章将对工程管理器中工具栏及菜单的使用方法进行详细介绍。 ····················· · 三、新建工程 · ··········紫金桥跨平台实时数据库使用“工程管理器”来集中管理本机上所有工程的,用户如 果想创建一个新的工程,必须首先启动“工程管理器”。 · ·········工程管理器工具栏中图标 为创建新工程,点击打开如下工程属性对话框: ··

数据库连接池到底应该设多大?

↘锁芯ラ 提交于 2020-03-26 18:51:40
本文内容95%译自这篇文章: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing ) 我在研究HikariCP(一个数据库连接池)时无意间在HikariCP的Github wiki上看到了一篇文章(即前面给出的链接),这篇文章有力地消除了我一直以来的疑虑,看完之后感觉神清气爽。故在此做译文分享。 接下来是正文 数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1万并发用户访问 想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是说差不多2万左右的TPS。那么这个网站的数据库连接池应该设置成多大呢?结果可能会让你惊讶,因为这个问题的正确问法是: “这个网站的数据库连接池应该设置成多 小 呢?” 下面这个视频是Oracle Real World Performance Group发布的,请先看完: http://www.dailymotion.com/video/x2s8uec (因为这视频是英文解说且没有字幕,我替大家做一下简单的概括:) 视频中对Oracle数据库进行压力测试,9600并发线程进行数据库操作,每两次访问数据库的操作之间sleep 550ms,一开始设置的中间件线程池大小为2048:

Mysql入门

无人久伴 提交于 2020-03-26 18:36:18
创建数据库 create database abc; 显示数据库 show databases; 使用数据库 use 数据库名; 直接打开数据库 mysql -h localhost -u root -p123456 -d 数据库名 显示表 show tables; desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schema select * from columns where table_name='表名'; 忘记密码处理 bin>net stop mysql bin>mysqld --skip-grant-tables bin>mysql mysql>use mysql mysql>update user set password=password("123456") where user="root"; mysql>flush privileges; mysql>quit bin>mysqladmin -u root -p shutdown bin>net start mysql create database abc; 显示数据库 show databases; 使用数据库 use 数据库名; 直接打开数据库 mysql -h localhost -u

LInux下mysql数据库安装

萝らか妹 提交于 2020-03-26 18:19:51
第一步、下载数据库   再建好的文件夹下面 wget https:/ /cdn.mysql.com/ /Downloads/MySQL- 5.7/mysql- 5.7. 29-linux-glibc2. 12-x86_64.tar.gz 下载数据库安装包,也可以官网下载(注意上传到服务器上是采用二进制) 第二步、环境配置   rpm -qa | grep mysql(检测是否安存在mysql) 有则rpm -e --nodeps 文件名;   rpm -qa | grep mariadb(检测是否存在mariadb) 有则 rpm -e --nodeps 文件名。 第三步、安装   tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz(解压)    mv mysql-5 .7 .29-linux-glibc2 .12-x86_64 mysql-5 .7 .29(重命名解压后文件夹)     groupadd mysql(添加用户组)   useradd -r -g mysql mysql(添加用户)   cd mysql-5.7.25(到该文件夹下)   mkdir data(创建data文件夹)    chown -R mysql.mysql /opt/mysql/mysql- 5.7. 29(将所有者及所属组改为mysql)

数据库设计之 ER图、三大范式

拟墨画扇 提交于 2020-03-26 17:00:19
ER图 Entity Relationship,实体关系图。 1、先画出所有实体,矩形圈出来 2、再画出每个实体的属性,椭圆圈出来,实体、属性之前用实线连接。为了方便找出主键,作为主键的属性可以画一条下划线。 3、标注实体之间的关联关系:一对一(1,1)、一对多(1,n),多对多(m,n)。关系用菱形表示,并在菱形2边的线上标上1、m、n这些表示2个实体之间关联关系的字符。 关联关系: 一对一,一个人只对应一张身份证,一张身份证也只对应一个人。(2个一对一) 一对多,一个用户可以拥有多个订单,一个订单只能属于一个用户。(1个一对一、1个一对多) 多对多,一个老师可以教多个学生,一个学生可以有多个老师。(2个一对多) 比如实体A、B,先把A作为1,看B是1还是多;再把B作为1,看A是1还是多。 如果2个都是一对一,那A、B就是一对一; 如果1个一对一、1个一对多,那A、B是一对多; 如果2个都是一对多,那A、B就是多对多。 数据库三大范式 数据库有8种范式(Normal Form),通常只用到前3种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。 1NF 属性的原子性(不可再分) 数据库中的每一个字段都要是不可再分隔的基本 2NF 属性完全依赖于主键 一张表中的每一条记录都要是可区分的,只通过主键来区分,所以一张表必须要有一个unique字段。