rebuild

B树、B-树、B+树、B*树都是什么

泄露秘密 提交于 2020-08-09 18:00:54
今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片,这和磁盘碎片、内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度。如果发现索引中存在过多的存储碎片的话就要进行“碎片整理”了,最方便的“碎片整理” 手段就是重建索引, 重建索引会将先前创建的索引删除然后重新创建索引,主流数据库管理系统都提供了重建索引的功能,比如 REINDEX、REBUILD 等,如果使用的数据库管理系统没有提供重建索引的功能,可以首先用DROP INDEX语句删除索引,然后用ALTER TABLE 语句重新创建索引。 对B树的概念比较陌生,网上一搜才知道,原来是 binary search tree(二叉搜索树),贴上全文! B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;

MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码

北城余情 提交于 2020-08-09 17:18:33
笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而这是不能接受的。当然如果要整个表删除,毋庸置疑用 TRUNCATE TABLE 就好。 最初的方案(因为未预料到删除会如此慢),代码如下(最简单和朴素的方法): delete from table_name where cnt_date <= target_date 后经过研究,最终实现了飞一般(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程的方案层层递进,详细记录如下: 批量删除(每次限定一定数量),然后循环删除直到全部数据删除完毕;同时 key_buffer_size 由默认的8M提高到512M 运行效果: 删除时间大概从3个半小时提高到了3小时 (1)通过 limit (具体size 请酌情设置) 限制一次删除的数据量,然后判断数据是否删除完,附源码如下(Python实现): def delete_expired_data(mysqlconn, day): mysqlcur = mysqlconn.cursor() delete_sql = " DELETE from table_name where cnt_date<='

分布式图数据库 Nebula Graph 的 Index 实践

ぃ、小莉子 提交于 2020-08-09 14:38:17
导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构。不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B-Tree index、B+-Tree index、B*-Tree index、Hash index、Bitmap index、Inverted index 等等,各种索引类型都有各自的排序算法。 虽然索引可以带来更高的查询性能,但是也存在一些缺点,例如: 创建索引和维护索引要耗费额外的时间,往往是随着数据量的增加而维护成本增大 索引需要占用物理空间 在对数据进行增删改的操作时需要耗费更多的时间,因为索引也要进行同步的维护 Nebula Graph 作为一个高性能的分布式图数据库,对于属性值的高性能查询,同样也实现了索引功能。本文将对 Nebula Graph的索引功能做一个详细介绍。 图数据库 Nebula Graph 术语 开始之前,这里罗列一些可能会使用到的图数据库和 Nebula Graph 专有术语: Tag:点的属性结构,一个 Vertex 可以附加多种 tag,以 TagID 标识。(如果类比 SQL,可以理解为一张点表) Edge:类似于 Tag,EdgeType 是边上的属性结构,以 EdgeType 标识。(如果类比 SQL,可以理解为一张边表) Property

Sql Server优化---统计信息维护策略

大憨熊 提交于 2020-08-09 08:48:40
本文出处: http://www.cnblogs.com/wy123/p/5748933.html 首先解释一个概念,统计信息是什么:   简单说就是对某些字段数据分布的一种描述,让SQL Server大概知道预期的数据大小,从而指导生成合理执行计划的一种数据库对象 默认情况下统计信息的更新策略:   1,表数据从0行变为1行   2,少于500行的表增加500行或者更多   3,当表中行多于500行时,数据的变化量大于500+20%*表中数据行数 非默认情况下,促使已有统计信息更新的因素(包括但不限于下面三种,别的我也没想起来):   1,rebulid\Reorg index   2,主动update statistics   3,数据库级别的sp_updatestats 开始问题: 对于大表的更新策略是:数据的变化量大于500+20%*表中数据行数 比如对于1000W数据量的表,数据变化要超过500+1000W*20%=2,000,500之后才能触发统计信息的更新, 这一点大多数情况下是无法接受的,为什么?因为该规则下触发统计信息更新的阈值太大,会导致某些统计信息长期无法更新, 由于统计信息导致的执行计划不合理的情况已经在实际业务中屡见不鲜,对于统计信息的更新已经显得非常必要 同时,仅仅靠sqlserver自己更新统计信息,也不一定可靠,因为统计信息中还要一个取样行数的问题

Java桌面应用程序打包

天涯浪子 提交于 2020-08-09 05:51:58
IDEA环境生成Jar 设置配置 File -> Project Structure -> Artifacts -> + -> JAR -> From modules with dependencies 选择模块的启动类main方法之后,勾选第二个选项,文件路径默认也可以。 构建构件 这里Build选项是第一次构建jar,Rebuild是修改后重新构建jar,clean是删除jar。 检查结果 在jar包所在目录的 通过 java -jar xxx.jar 在控制台运行程序,成功启动贪吃蛇小游戏。 exe4j 将jar打包为exe Welcome -> Next Project type -> 勾选第二个 JAR in EXE mode Application info -> 第一个框填应用程序的名字,第二个框是生成exe保存的文件路径 Executable info Java invocation 先导入相关jar包 再选择main方法的启动类 JRE ->两个框框后面提示多少就填多少,限制JDK版本 环境搜索顺序可调 后面都是无脑下一步 右键发送快捷方式到桌面,双击即可打开游戏! 来源: oschina 链接: https://my.oschina.net/u/4347613/blog/4297708

Discourse 升级的频率

梦想与她 提交于 2020-08-08 22:49:41
按照 Discourse 官方的说法有下面 3 种类的升级。 请参考官方的链接: https://meta.discourse.org/t/how-do-i-manually-update-discourse-and-docker-image-to-latest/23325 中的内容。 Discourse 升级 Discourse 的升级应该是每个月进行 2 次。你可以使用 Discourse 的 UI 界面进行升级,访问的地址为: admin/upgrade 进行升级就可以了。 按照官方的说法,每周都会发布一个 beta 版本的升级。 升级应用服务器 官方的建议是每 2 个月你需要 SSH 到服务器上,然后运行 cd /var/discourse git pull ./launcher rebuild app 命令进行更新。 这个将会更新 Docker 和所依赖的应用服务器以及数据库版本。 操作系统安全更新 最后就是需要进行的操作系统更新了。 如果你使用的是 Ubuntu 的话,你可以启用自动更新: dpkg-reconfigure -plow unattended-upgrades 但是上面的更新只会自动更新必要的安全更新。 如果你还需要对操作系统进行更新的话。 你需要使用命令: apt-get update apt- get dist- upgrade 来进行更新。

MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码

被刻印的时光 ゝ 提交于 2020-08-06 10:14:58
笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而这是不能接受的。当然如果要整个表删除,毋庸置疑用 TRUNCATE TABLE 就好。 最初的方案(因为未预料到删除会如此慢),代码如下(最简单和朴素的方法): delete from table_name where cnt_date <= target_date 后经过研究,最终实现了飞一般(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程的方案层层递进,详细记录如下: 批量删除(每次限定一定数量),然后循环删除直到全部数据删除完毕;同时 key_buffer_size 由默认的8M提高到512M 运行效果: 删除时间大概从3个半小时提高到了3小时 (1)通过 limit (具体size 请酌情设置) 限制一次删除的数据量,然后判断数据是否删除完,附源码如下(Python实现): def delete_expired_data(mysqlconn, day): mysqlcur = mysqlconn.cursor() delete_sql = " DELETE from table_name where cnt_date<='

Unity引擎UI模块知识Tree

霸气de小男生 提交于 2020-08-06 04:04:25
现在主流的UI解决方案是UGUI和NGUI,近年来更是以UGUI为主,本期结合UWA学堂以及Blog的相关内容整理了《Unity引擎UI模块知识Tree》,主要介绍了UGUI的优化、框架完善及解决方案,也涉及到NGUI和FairyGUI的内容,最后是UWA的工具篇,开发者们可以根据报告查看问题,优化项目。 前期我们也整理更新过 《Unity引擎渲染模块知识Tree》 和 《Unity引擎资源管理模块知识Tree》 ,深受开发者们的喜爱,欢迎大家按照自己的兴趣和需要参考取阅。 UGUI 框架 《UGUI深度研究之源码鉴赏》 从UI的代码底层讲起,通过理解底层代码的原理来认知上层的有效优化方法。这里会从源码中深入分析UI网格重建的实现原理,并完成了提取触发UI重建的UI元素的代码实现,可以更方便、更准确地定位引起UI性能问题的UI元素,从而有针对性地做优化。 《Unity手游UI框架一站式解决方案》 该课程内容非常详实、性价比极高。初级开发者可以拥有一套完整的实战UI框架源码,快速进入实战;中级及以上者可以深入理解框架的形成过程并在此基础上进行修改,迭代出属于自己的框架;语言中并没有华丽的辞藻,技术则完全以实用、稳健为基础。 《UI框架搭建:控件定制篇》 《UI框架搭建:消息重构篇》 《UI框架搭建:应用技巧篇》 整套框架分为三节课程来讲解:第一节课程主要讲解控件侧的框架搭建

项目打包方式

我是研究僧i 提交于 2020-08-04 18:31:23
项目打包方式 .最近几天研究打包,分为以下几种 .首先保证项目跑起来,想打成war包还是jar包,在pom.xml中修改 <packaging>jar</packaging> 或 <packaging>war</packaging> 方式一 使用idea package打包 .找到最右边的maven projects .打开项目Lifecycle .双击package .如果失败,build一下(build->Rebuild projects) 重新打包 .控制台看到BUILD SUCCESS 说明成功了 .打开项目文件夹会发现生成了一个target文件夹 .此文件夹中有刚打的包 方式二 .找到最右边的maven projects .打开项目Lifecycle .先clean一下,再install .控制台看到BUILD SUCCESS 说明成功了 .去哪里找打好的包呢? .仓库->一般在.m2文件中,找到该项目,里面就有 方式三 .fiel中 哎,这个到时候百度吧,有详细教程 . . 方式四 .使用maven命令mvn clean install打包 .打包成功之后会产生dist文件夹, 里面有jshERP2.0-bin.zip压缩包, 解压之后就是可运行的项目 .运行start.bat可以直接跑起来 .小秘密(把start.bat文本形式打开,里面的java -Xms1000m

如何强制Docker进行映像的干净构建

冷暖自知 提交于 2020-08-04 17:39:21
问题: I have build a Docker image from a Docker file using the below command. 我已经使用以下命令从Docker文件构建了一个Docker映像。 $ docker build -t u12_core -f u12_core . When I am trying to rebuild it with the same command, it's using the build cache like: 当我尝试使用同一命令重建它时,它正在使用构建缓存,例如: Step 1 : FROM ubuntu:12.04 ---> eb965dfb09d2 Step 2 : MAINTAINER Pavan Gupta <pavan.gupta@gmail.com> ---> Using cache ---> 4354ccf9dcd8 Step 3 : RUN apt-get update ---> Using cache ---> bcbca2fcf204 Step 4 : RUN apt-get install -y openjdk-7-jdk ---> Using cache ---> 103f1a261d44 Step 5 : RUN apt-get install -y openssh-server --->