索引

大数据量下的存储设计模式探索

北战南征 提交于 2020-03-12 15:26:09
1 引言 现实世界商务竞争越演越烈,出现更多的细分市场、深度营销和定制功能,这导致各种商务应用的用户数和业务复杂度同步增加。反映到数据库里,就是表的数量和数据量日益增长,数据库响应速度日益缓慢。 为什么一个功能好的产品,往往上线后就出现性能问题,不得不反复回炉修改?为什么一到业务高峰期,系统就慢的动弹不得,只能关闭部分业务保障关键业务?数据量从十万到百万,从百万到千万,从千万到上亿,从亿再向兆跨越,如何保障程序能够经受住大数据量的考验?这都是我们面临的真实现状,也是大家反复在思考的问题。 《道德经》上说:“有道无术 , 术尚可求 , 有术无道 , 止于术。”众人把目光集中在系统架构、查询算法、数据库软件的底层原理等等“术”上,却忽视了深刻理解数据这条光明大“道”。数据从哪里来?要到哪里去?数据用来读还是写?数据与数据之间有什么样的关系?数据的增长速度如何控制?最有价值的数据是什么?数据什么时候可以丢弃?假如不能回答这一长串问题,如果不是以这一长串问题的答案为程序设计的出发点,代码如何能经受大数据量的考验? 在数据的采集、计算、展现和存储这一设计链条中,开发者通常负责设计关系型数据模型,编写程序计算和展现数据,数据库管理员负责数据文件存放位置、表空间存储参数等的架构设计。但是,数据库管理员往往不了解业务,不了解数据的特点,数据存储设计表现为千“表”一律。

ES-简单介绍

為{幸葍}努か 提交于 2020-03-12 14:04:31
集群配置 主节点 cluster.name: tom-test #集群名称 node.name: master #节点 ID,保证唯一 node.master: true #标记是否为主节点 network.host: 127.0.0.1 #对外公开的 IP 地址,如果自动识别配置为 0.0.0.0 从节点1 cluster.name: tom-test #集群名称三个节点保持一致 node.name: slave-1 #从节点 ID,保证唯一 network.host: 127.0.0.1 #对外公开的 IP 地址,如果自动识别配置为 0.0.0.0 http.port: 8200 #默认端口为 9200,因为我的环境是在同一台机器,因此,指定服务端口号 discovery.zen.ping.unicast.hosts: ["127.0.0.1"] #集群的 IP 组,配置主节点 IP 即可 从节点2 cluster.name: tom-test #集群名称三个节点保持一致 node.name: slave-2 #从节点 ID,保证唯一 network.host: 127.0.0.1 #对外公开的 IP 地址,如果自动识别配置为 0.0.0.0 http.port: 8000 #默认端口为 9200,因为我的环境是在同一台机器,因此,指定服务端口号 discovery.zen

kettle的安装和使用

你离开我真会死。 提交于 2020-03-12 10:54:52
kettle被很多中小企业使用,且常常结合ERP系统、内部系统,低成本打通内外部系统的业务。 kettle是一款开源工具,更多用于数据同步,支持SQL配置、请求转发、读写数据库的功能,也有很多拓展的内部函数使用。基于JAVA开发的工具,本身也支持java的一些属性,所以强依赖于JDK。 kettle是通过工作流的方式,定义业务需要实现的节点进行拆解和实现,学习成本低,易上手。 其实我第一个关心的是性能,其次才是实现,作为开源工具,功能实现基本符合业务,应该没有太大问题。对于大业务量抽数需要重点评估,以免做了无用功。所以这里重点描述一下如何做调优 Kettle 调优 1 、 调整 JVM 大小进行性能优化,修改 Kettle 定时任务中的 Kitchen 或 Pan或Spoon 脚本。 修改脚本代码片段 set OPT=-Xmx512m -cp %CLASSPATH% -Djava.library.path=libswt\win32\ -DKETTLE_HOME="%KETTLE_HOME%" -DKETTLE_REPOSITORY="%KETTLE_REPOSITORY%" -DKETTLE_USER="%KETTLE_USER%" -DKETTLE_PASSWORD="%KETTLE_PASSWORD%" -DKETTLE_PLUGIN_PACKAGES="%KETTLE

SQL server 索引 简介

纵饮孤独 提交于 2020-03-12 09:00:37
主要分为 唯一索引 聚集索引 非聚集索引 当表中有被设置为唯一的列时,SQLSERVER会自动创建一个非聚集的唯一性索引 创建唯一索引 create unique index index_name on tablename(columnname) 创建 聚集索引 create clustered index index_name on tablename(columnname) 没有clustered的话,则默认创建 非聚集索引 nonclustered(可加可不加) create nonclustered index index_name on tablename(columnname) 访问区间,范围值的列时,聚集索引比较有效(between > >= ) 1.包含大量非重复列 2.被访问的列时连续的 3.经常被使用 连接 或者 group by 查询访问的列 非聚集索引 是完全匹配查询的最佳选择 来源: CSDN 作者: zq爱生活爱代码 链接: https://blog.csdn.net/m0_37879526/article/details/104805716

Mysql性能优化

巧了我就是萌 提交于 2020-03-12 03:01:34
1.1 Mysql数据库的优化技术   1、mysql优化是一个综合性的技术,主要包括       1. 表的设计合理化(符合3NF)       2. 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]       3. 分表技术(水平分割、垂直分割)       4. 读写[写: update/delete/add]分离       5. 存储过程 [模块化编程,可以提高速度]       6. 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]       7. mysql服务器硬件升级       8. 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)   2、要保证数据库的效率,要做好以下四个方面的工作       1. 数据库设计       2. sql语句优化       3. 数据库参数配置       4. 恰当的硬件资源和操作系统       此外,使用适当的存储过程,也能提升性能。       这个顺序也表现了这四个工作对性能影响的大小 1.2 数据库表设计   1、通俗地理解三个范式        第一范式: 1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)        第二范式: 2NF是对记录的惟一性约束,要求记录有惟一标识

python的基本数据类型(二)列表和元组

随声附和 提交于 2020-03-12 02:48:11
列表 (list) 一、什么是列表 列表由 [ ] 来表示,每一项元素用逗号隔开,列表中可以放入任何基本数据类型 二、列表索引和切片 列表的索引和切片与字符串相似,并且切片之后是列表 [start : end : step ] 三、列表的增删改查 1、增加 list.append():在列表的末尾添加,有且只能添加一个 list.insert(索引):在指定位置插入 list.extend():迭代添加,在末尾添加 2、删除 list.pop():弹出,返回被删除的数据,指定位置 list.remove():删除元素(元素必须在列表中,否则会报错) del list[start : end]:切片删除 list.clear():清空列表 3、更改 list [索引] = “ ” :索引改 list.[start:end]=[ " " ]:切片改,先删除再添加(切片修改时如果步长不是 1 ,注意元素的个数) 4、查询 list是可迭代的对象,所以可以用for循环来遍历 5、其他 list.count(" "):计数,字符串在列表中出现的次数 list.sort():排序,默认位升序,list.sort(reverse=Ture):降序 ,这些是永久的改变列表的顺序 list.sorted():暂时改变顺序 list.reverse():反转元素列表的排列顺序,永久改变 len()

数据库索引B+Tree原理

杀马特。学长 韩版系。学妹 提交于 2020-03-11 23:48:23
在了解B+Tree之前,先简单介绍一下B Tree。 **B Tree:**数据库设计者,把数据存放到节点以树的形式存储,把节点的大小设置为一个页,那读取一个节点就需要一次I/O操作,如果一次检索需要访问四个节点,根节点常驻内存,那么完成这次检索,需要三次io。 那么数据越小,每页存放的数据就越多,树的高度就越小,io就少,检索就快。 索引就利用上面的性质,设计成B+tree。 **B+tree:**非叶子节点只存放key,叶子节点存放data,并且叶子节点存在指向相邻叶子节点的指针 这样一方面非叶子节点可以存放更多的记录,树更矮,io就少,另一方面,可以通过顺序指针提高区间查询的性能。 MySQL中普遍使用B+Tree做索引, 但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引(主键索引树) 所谓聚簇索引,就是指B+Tree的叶子节点上的data就是数据本身,key为主键,如果是一般索引的话,data便会指向对应的主索引。 非聚簇索(非主键索引树) 非聚簇索引就是指B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。 非聚簇索引比聚簇索引多了一次读取数据的IO操作,所以查找性能上会差。 因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询,这个过程叫 回表 。 来源:

如何从git的索引中删除文件?

限于喜欢 提交于 2020-03-11 21:34:50
如何从索引(暂存区=缓存)中删除文件而不从文件系统中删除文件? #1楼 这应该为您取消暂存<file>(而不删除或修改文件): git reset <file> #2楼 你要: git rm --cached [file] 如果省略 --cached 选项,它也会从工作树中将其删除。 git rm 比 git reset 安全一些,因为如果暂存的内容与分支的尖端或磁盘上的文件都不匹配,则会警告您。 (如果没有,则必须添加 --force 。) #3楼 根据您的工作流程,这可能是您几乎不需要的东西,因此试图找出命令行解决方案毫无意义(除非由于某种原因而碰巧没有图形界面)。 只需使用一种支持索引管理的基于GUI的工具,例如: git gui <-使用Tk窗口框架-与 gitk 类似的样式 git cola <-更现代的GUI界面 这些使您可以通过单击鼠标将文件移入和移出索引。 他们甚至支持选择文件的一部分(单个更改)与索引之间移动。 换个角度来看如何:如果您在使用建议的命令(其中一个比较隐秘)时感到困惑: git rm --cached [file] git reset HEAD <file> ...您很有可能会丢失数据-或至少使它很难找到。 除非您确实确实需要非常频繁地执行此操作,否则 使用GUI工具可能更安全 。 在没有索引的情况下工作 基于评论和投票

Elasticsearch 简介

淺唱寂寞╮ 提交于 2020-03-11 16:41:34
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。 搜索引擎原理就是建立反向索引。 Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。 Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。 Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。 Elasticsearch 一个典型应用就是 ELK 日志分析系统。 官方网站: https://www.elastic.co/cn/ 中文社区: https://elasticsearch.cn 参考文章: https://developer.51cto.com/art/201904/594615.htm 来源: CSDN 作者: 极客点儿 链接: https://blog.csdn.net/yilovexing/article/details/104796838