全文索引

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

我是研究僧i 提交于 2020-01-21 00:16:47
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却 有一个缺点:不支持事务处理(transaction) 。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。 InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 MyISAM和InnoDB两者之间有着明显区别,简单梳理如下: 1) 事务支持 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交

详谈 MySQL Online DDL

和自甴很熟 提交于 2020-01-16 08:59:47
作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等。对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持Online DDL么,不是说不会锁表的么?是的,令人高兴的是从MySQL5.6开始就支持部分DDL Online操作了, 但并不是全部喔 ,今天这里就对我们常用的DDL进行总结和说明,让操作DDL的小伙伴从此做到心中有数,得心应手,让老板们再也不用担心我们做DDL咯。 我自己遵守的一条黄金准则: DDL永远不要在业务高峰期间执行 。 环境说明:本次的测试服务器配置如下 CPU:32 cores MEM:128G DISK: SSD(固态硬盘) MySQL版本:5.6.27以上 一、MySQL执行DDL原理 MySQL各版本,对于DDL的处理方式是不同的,主要有三种: Copy Table方式: 这是InnoDB最早支持的方式。顾名思义,通过临时表拷贝的方式实现的。 新建一个带有新结构的临时表,将原表数据全部拷贝到临时表,然后Rename,完成创建操作。 这个方式过程中,原表是可读的,不可写。但是会消耗一倍的存储空间。 Inplace方式: 这是原生MySQL 5.5,以及innodb_plugin中提供的方式。所谓Inplace,也就是在原表上直接进行,不会拷贝临时表。相对于Copy

JAVA课程笔记系列: 基于SpringBoot的Data Solr搜索引擎开发

佐手、 提交于 2020-01-14 12:22:21
基于SpringBoot的Data Solr搜索引擎开发 关于Apache Solr的简介 Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性包括: 高级的全文搜索功能 专为高通量的网络流量进行的优化 基于开放接口(XML和HTTP)的标准 综合的HTML管理界面 可伸缩性-能够有效地复制到另外一个Solr搜索服务器 使用XML配置达到灵活性和适配性 可扩展的插件体系 支持像英语,德语,中国,日本,法国和许多主要语言 Apache Solr和Lucene的关系 Solr 与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene ,因为Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene。 Apache Solr 相关目录说明 Solr程序包的结构说明 bin :solr相关运行脚本

MySQL 索引详解

有些话、适合烂在心里 提交于 2020-01-14 03:15:42
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 注: [1] 索引不是万能的 ! 索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。 [2]另外, 索引还会在硬盘上占用相当大的空间 。 因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 1. InnoDB数据表的索引 与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在 InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。”数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录

sphinx 配置sphinx.conf

青春壹個敷衍的年華 提交于 2020-01-12 03:50:06
sphinx的配置文件是在配置的时候最容易出错的了: 基本概念: source:数据源,数据是从什么地方来的。 index:索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。 searchd:提供搜索查询服务。它一般是以deamon的形式运行在后台的。 indexer:构建索引的服务。当要重新构建索引的时候,就是调用indexer这个命令。 attr:属性,属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。 sphinx的配置文件过于冗长,我们把sphinx默认的配置文件中的注释部分去掉,重新进行描述理解,就成下面的样子了: ## 数据源src1 source src1 { ## 说明数据源的类型。数据源的类型可以是:mysql,pgsql,mssql,xmlpipe,odbc,python ## 有人会奇怪,python是一种语言怎么可以成为数据源呢? ## python作为一种语言,可以操作任意其他的数据来源来获取数据,更多数据请看:(http://www.coreseek.cn/products-install/python/) type = mysql ## 下面是sql数据库特有的端口,用户名,密码,数据库名等。 sql_host = localhost sql_user = test sql

基于Lucene的搜索引擎的设计与实现

梦想与她 提交于 2020-01-11 01:18:09
我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息中,检索出自己需要的、潜在的、有价值的信息,从而可以有效地在日常工作和生活中发挥作用。因为搜索引擎这一技术很好的解决了用户搜索网上大量信息的难题,所以在当今的社会,无论是发展迅猛的计算机行业,还是作为后起之秀的信息产业界,都把Web搜索引擎的技术作为了争相探讨与专研的方向。 搜索引擎的定义就是指按照既定的 策略 与方法,采取相关的 计算机程序 ,通过在 互联网 中进行寻找信息,并显示 信息 ,最后把找到的信息进行整理和筛选,为搜索引擎的使用者提供 检索 信息的服务,终极目标是为了提供给使用者,他所搜索信息相关的资料的计算机 系统 。搜索引擎的种类繁多,既可以进行 全文的索引 ,还可以进行 目录的索引 ,不仅有集合式的搜索引擎,还有 垂直搜索的引擎 以及 元搜索引擎 。除此之外,还有门户搜索引擎和免费链接列表等等 经过对搜索引擎的研究同时与Lucene自身的特性相结合,将本次设计所需要实现的功能阐述如下: 支持桌面文件搜索,格式包括txt、doc、xls和ppt; 支持分词查询 支持全文搜索 能够高亮显示搜索关键字 显示查询所用的时间 显示搜索历史、过滤关键字 分词查询与全文搜索这两项功能,我们都可以利用Lucene本身自带的库加上相关算法就可以完成设计了

自然语言处理在现实生活中运用

浪尽此生 提交于 2019-12-31 15:48:09
自己动手搭建搜索工具 作者 白宁超 2016年4月12日16:31:48 摘要: 搜索已经作为生活中不可缺少的一部分,诸如:百度、 google 、还是在微信上寻找好友或者通过一段文本查找关键字。另外亚马逊、京东、天猫、苏宁等电商在搜索中也是别有洞天(多面搜索等)。对于开发人员,搜索往往是大部分应用的关键功能,特别是对大规模文本数据驱动应用更是如此。另一类搜索像语音智能检索,其采用分类、聚类、神经网络等方法进行模型评估,反馈给用户比较理想的匹配结果,这里需要强调的是其采用评分机制反馈的模糊近似查询结果,与传统精确采用是不一样的。这种结果的反馈评分主要依托正确率和召回率。这里自己构建搜索工具好处在于:灵活性、开发费用低、自己更了解自己的搜索工具、价格当然是免费的啦。本文作者花费大量时间,经过资料收集,研究和实验所得,旨在技术分享。( 本文原创,转载需说明出处: 自己动手搭建搜索工具。 ) 目录 【文本挖掘(0)】 快速了解什么是自然语言处理 【文本挖掘(1)】 OpenNLP:驾驭文本,分词那些事 【文本挖掘(2)】 【NLP】Tika 文本预处理:抽取各种格式文件内容 【文本挖掘(3)】 自己动手搭建搜索工具 1 Apache Solr 搜索服务器简介 1.1. Solr 是什么? Solr 它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web

Lucene 教程

允我心安 提交于 2019-12-27 03:34:53
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。 其功能非常的强大,api也很简单。总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field可以看作是数据库的字段。用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单。 Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容。 Lucene2.0的下载地址是 http://apache.justdn.org/lucene/java/ 例子一 : 1、在windows系统下的的C盘,建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件,随便起名啦,就叫"1.txt","2.txt"和"3.txt"啦 其中1.txt的内容如下: 中华人民共和国 全国人民 2006年 而"2.txt"和"3.txt"的内容也可以随便写几写,这里懒写,就复制一个和1.txt文件的内容一样吧 2、下载lucene包,放在classpath路径中 建立索引: package lighter.javaeye.com; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io

Lucene的学习

拟墨画扇 提交于 2019-12-26 20:18:32
一,什么是全文检索 1.数据的分类   1.结构化数据     格式固定,长度固定,数据类型固定。     例如:数据库中的数据;   2.非结构化数据     word文档,pdf文档,邮件,html,txt     格式不固定,长度不固定,数据类型也不固定 2.数据的查询   1,结构化数据的查询     Sql语句,查询结构化数据的方法。简单,速度快。   2.非结构化数据的查询     例如:从文本文件中找出包含spring的单词的文件     1.目测     2.使用程序代码来实现,把文件读取到内存中,匹配字符串,顺序扫描。     3.把结构化数据变成结构化数据       (先根据空格进行字符串拆分,得到一个单词列表,基于单词列表创建一个索引 )          索引:一个为了提高查询速度,创建某种数据结构的集合        然后 查询索引,根据单词和文档对应关系找到文档列表,这个过程就叫全文检索 3.全文检索   先创建索引,然后查询索引的过程,就叫做全文检索。(创建索引时间较长,但是一次创建可以多次使用,平均每次查询的速度就提高了速度) 二,全文搜索的应用场景 1,搜索引擎     百度,360搜索,谷歌,搜狗 2,站内搜索     论坛搜索,微博搜索,文章搜索 3,电商搜索     淘宝搜索,京东搜索 4,只要是有搜索的地方,就可以使用到全文检索技术 三

Docker 简单部署 ElasticSearch

你。 提交于 2019-12-25 08:03:06
一、ElasticSearch是什么? Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。 不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理PB级结构化或非结构化数据 拉取镜像 docker pull elasticsearch:6.7.2 docker pull mobz/elasticsearch-head:5 docker pull kibana:6.7.2 运行容器 ElasticSearch 的默认端口是9200,我们把宿主环境9200端口映射到 Docker 容器中的9200端口,就可以访问到 Docker 容器中的 ElasticSearch 服务了,同时我们把这个容器命名为 es 。 docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.7.2 配置跨域 进入容器 由于要进行配置