centos 模糊查询,oracle 模糊查询
大家好,今天给各位分享centos 模糊查询的一些知识,其中也会对oracle 模糊查询进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
solr和elasticsearch对比,有啥差别吗
从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度。
单机对比
1. Solr发布了4.0-alpha,试了一下,发现需要自己修改schema,好处是它自带一个data importer。在自己的计算机上测试了一下,导入的性能大概是:14分钟导入 3092730条记录,约合 3682条/秒。
2. 3百万条记录的情况下,模糊查询和排序基本都在1秒内返回
3.刚才的测试,是每个field单独存储,现在修改了一下配置文件,增加了一个copyField,所有的field都拷贝一份到text这个field里面去,导入的性能大概是:19分钟导入了3092730条记录,约合 2713条/秒
4. 3百万条记录的情况下,针对text的模糊查询基本在1秒内返回,但是针对所有记录的排序,大概要2~3秒
5.使用 elasticsearch 0.19.8,缺省配置,用单任务导入,导入性能是:20分钟导入了3092730条记录,约合2577条/秒
6. 3百万条记录的情况下,查询基本上在1秒内返回,但是模糊查询比较慢,第一次要10秒,后来大概要1~3秒。加上排序大概需要5秒,整体排序基本100ms
查询及排序的指令:
{
"query":{
"query_string":{
"query":"*999*"
}
},
"sort": [
{
"TIME_UP":{
"order":"asc"
}
}
]
}
7. Es0.19.8,用两个任务导入,导入性能是:13分钟导入了3092730条记录,约合3965条/秒
8. Solr全部建好索引后,占用磁盘空间是1.2G,es占用磁盘空间是4G
单机对比2
在一台Intel i7,32G内存的机器上,重新跑这两个的对比。不过有个重大的区别在于,Solr是在这台性能很好的机器上跑,而es的导入进程则是在一台Intel四核 2.5G,4G内存的机器上跑的,也许会有性能的差异。ES版本0.19.8,Solr版本4.0-ALPHA。
1. Solr的导入性能:3400万条记录,用时62分钟,平均9140条/秒,占用空间12.75G
2.使用*999*这样的模糊查询,3秒以内返回,稍长一点的查询条件*00100014*,也是2~3秒返回
3. Es的导入性能(设置Xmx为10G):3400万条记录,用时40分钟,平均14167条/秒,占用空间33.26G,客户端采用4个并发。
4.使用*999*这样的模糊查询,9秒返回,稍长一点的查询条件*00100014*,11.8秒返回
5.如果不是针对所有字段查询,而是针对某个特定字段,比如 SAM_CODE:*00100014*,那么也是1秒以内返回。
6.结论:es的查询效率也可以很高,只是我们还不会用。
7.结论2:es有个设置是把所有字段放一块的那个,缺省是放一起,但是不知道为什么没起到应有的作用。
备注:
1. Solr第一次的那个内存使用的是缺省设置,这次改为10G,结果导入性能反而变差了,400万条记录,用了8分钟,平均8333条/秒,不知道为什么。
2.改回缺省的内存配置,导入速度仍然慢。
3.重启Linux,用10G的内存配置,再导入,5030万条记录,用时92分,约9112条/秒,说明导入速度和内存配置没有大差别
4.在10G配置的情况下,检索速度也差别不大。
5.为了搞清楚lucene4.0和solr4.0的进步有多大,下载了solr3.6.1,所幸的是4.0的配置文件在3.6.1上也可以用,所以很快就搭起来进行测试,导入性能为:3400万条记录,用时55分钟,约10303条/秒,占用空间13.85G。查询性能:*999*第一次11.6s,*00100014* 27.3s,相比4.0ALPHA的结果(5000万结果当中,*999*第一次2.6s,*00100014*第一次2.5s)来说,慢了很多,与es的性能差不多,因此,也许lucene4.0真的对性能有大幅提升?
集群对比:
采用4台同样配置(Intel i7,32G内存)的Centos 6.3组成的集群,进行对比。
1.首先是es,很方便的就组成了一个Cluster,等上一个3400万条的Index全部均衡负载之后进行测试,导入到另外一个Index当中。
2.导入性能:8500万条记录,用时72分钟,约为19676条/秒。在前5千万条记录导入时的速度在2万/条以上,初始的速度在2.2万/条。占用空间78.6G(由于有冗余,实际占用空间为157.2G)
3.查询性能:
*999*第一次13.5秒,第二次19.5秒,第三次7.4秒,第四次7.1秒,第五次7.1秒
*00100014*第一次17.2秒,第二次16.6秒,第三次17.9秒,第四次16.7秒,第五次17.1秒
SAM_CODE:*999*,0.8s,1.3s,0.02s,0.02s,0.02s
SAM_CODE:*00100014*,0.1s,0.1s,0.02s,0.03s,0.05s
4. Solr4.0-ALPHA,SolrCloud的配置还算简单,启动一个ZooKeeper,然后其他三台机器访问这个地址,就可以组成一个Cloud:
机器1: nohup java-Xms10G-Xmx10G-Xss256k-Djetty.port=8983-Dsolr.solr.home="./example-DIH/solr/"-Dbootstrap_confdir=./example-DIH/solr/db/conf/-Dcollection.configName=xabconf3-DzkRun-DnumShards=4-jar start.jar&
其他机器:nohup java-Xms10G-Xmx10G-Dsolr.solr.home="./example-DIH/solr/"-DzkHost=192.168.2.11:9983-jar start.jar&
但是在执行 data import的时候,频繁出现 OutOfMemoryError: unable to create new native thread。查了很多资料,把Linux的ulimit当中的nproc改成10240,把Xss改成256K,都解决不了问题。暂时没有办法进行。
结论
1.导入性能,es更强
2.查询性能,solr 4.0最好,es与solr 3.6持平,可以乐观的认为,等es采用了lucene4之后,性能会有质的提升
3. Es采用SAM_CODE这样的查询性能很好,但是用_all性能就很差,而且差别非常大,因此,个人认为在目前的es情况下,仍然有性能提升的空间,只是现在还没找到方法。
mysql使用全文索引实现大字段的模糊查询
场景说明:在centos7环境下,使用mysql5.7的InnoDB引擎,创建一个名为`tbl_article_content`的表。表结构中包含`id`、`content`、`article_id`、`create_by`和`modifield_by`字段,并对`content`字段建立了全文索引`content_word`。
为什么要使用索引:由于存在全局搜索需求,需要用户输入关键字来展示包含该关键字的文章(标题、简介、内容)。由于文章内容字段`content`存储的是大文本,为了提高查询效率,选择使用全文索引(fulltext)。
创建索引:使用ngram解析器对`tbl_article_content`表的`content`字段创建名为`content_word`的全文索引。
MySQL配置:MySQL默认没有开启与配置ngram,因此在建立索引后需要对MySQL进行配置。打开mysql配置文件,在[mysqld]下加入`ft_min_word_len=1`和`ngram_token_size=1`,并重启MySQL。进入MySQL后,修复之前创建的索引。
查询语句:使用`SELECT article_id FROM tbl_article_content WHERE MATCH(content) AGAINST('没有了');`进行模糊查询。
总结问题:从MySQL 5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并对MyISAM和InnoDB引擎有效。使用时注意版本号和配置。
相关命令:使用`SHOW CREATE TABLE tbl_article_content;`查询当前表信息,使用`SHOW VARIABLES LIKE'%ngram%';`查询ngram引擎配置信息。
如何使用azure powershell批量创建用户
之前给大家介绍很多关于Windows Azure的内容,基本上都是通过Windows Azure Management Portal来创建的。这种创建方式虽然直观简单,但是如果IT管理员需要同时创建1000台Azure服务的话,工作的代价是非常巨大的。
其实我们可以通过Windows Azure PowerShell,通过命令行的方式来管理Windows Azure。这样在进行诸如批量创建Azure Virtual Machine的操作会变得非常简单。接下来就开始本章内容。
如果你是第一次运行Azure PowerShell,请按照之前的文章,下载Azure PowerShell Settings文件并上传至云端。
了解Azure的帮助命名
1.我们首先运行命令: help azure,来看看Windows Azure提供了哪些命令行。我只截取了部分内容,如下图:
在上图中我们可以看到,Azure PowerShell提供了非常多的命令。比如我们之前讲解过的Add-AzureVhd等命令。
2.我们再运行命令: Get-AzureVMImage,这条命令是列出所有的Azure Virtual Machine镜像,其中包含Windows和 Linux的。我只截取了部分内容,如下图:
开始创建Azure虚拟机
1.指定当前的存储
Set-AzureSubscription-SubscriptionName'<SubscriptionName>'-CurrentStorageAccount'<StorageAccount>'
比如我想指定订阅为'Windows Azure MSDN- Visual Studio Ultimate',存储账户为'leivms'。
执行以下命令:
Set-AzureSubscription-SubscriptionName'Windows Azure MSDN- Visual Studio Ultimate'-CurrentStorageAccount'leivms'
2.如果我想通过Azure PowerShell新建Virtual Machine
-VM Name为 LeiAzureVM
-VM Size为 ExtraSmall
-VM Image为 Windows Server 2012 Datacenter
-Windows用户名为 leizhang,密码为 Pass@word1
-DNS Name为 LeiAzure
-高可用组为 AvbSet
-数据中心选择 East Asia
3.先要设置镜像为Windows Server 2012 Datacenter,
$imageList= Get-AzureVMImage `
| where{$_.ImageName-eq"a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201407.01-en.us-127GB.vhd"}
$image=$imageList[0]
执行结果如下:
上图的$image命令可以显示我们需要的Windows Server 2012 DataCenter镜像的相关信息
如果我想模糊查询AzureImage的话,可以通过星号(*)通配符,来模糊查询。
比如笔者只想查询Windows Server 2012 Datacenter的镜像,PowerShell如下:
$imageList= Get-AzureVMImage `
| where{$_.ImageName-like"*Windows-Server-2012-Datacenter*"}
$image=$imageList[0]
4.创建虚拟机
New-AzureVMConfig-Name'LeiAzureVM'-InstanceSize'ExtraSmall'-ImageName$image.ImageName-AvailabilitySetName'AvbSet' `| Add-AzureProvisioningConfig-Windows-AdminUsername'leizhang'-Password'Pass@word1' `| New-AzureVM-ServiceName'LeiAzure'-Location'East Asia'
执行结果如下图:
5.查询执行结果
我们在PowerShell中看到Create Succeeded,其实创建Azure VM的过程是异步的。这时候我们查看Azure Management Portal,发现VM正在被创建。如下图:
我们还可以通过Management Portal看到创建成功的虚拟机
OK,我们已经创建完第一台虚拟机了,如果需要创建第2台虚拟机LeiAzureVM002加入到之前创建的DNS: LeiAzure.cloudapp.net,
并且需要加入同一个高可用组'AvbSet',这句PowerShell语句按照下面执行:
New-AzureVMConfig-Name'LeiAzureVM002'-InstanceSize'ExtraSmall'-ImageName$image.ImageName-AvailabilitySetName'AvbSet' `| Add-AzureProvisioningConfig-Windows-AdminUsername'leizhang'-Password'Pass@word1' `| New-AzureVM-ServiceName'LeiAzure'
执行结果如下:
创建简单的Linux虚拟机
如果我想创建一个简单的Linux虚拟机,OS为CentOS。
-VM Name为 LeiLinuxVM001
-VM Size为 Medium
-VM Image为
CentOS 6.4
-Windows用户名为 adminus er,密码为Abc@123456
-DNS Name为 LeiLinuxVM001
-高可用组为 AvbSet
-数据中心选择 East Asia
1.获得CentOS虚拟机镜像,通过模糊查询获得CentOS镜像
$imageList= Get-AzureVMImage `
| where{$_.ImageName-like"*CentOS*"}
$image=$imageList[0]
2.创建虚拟机命令:
New-AzureVMConfig-Name'LeiLinuxVM001'-InstanceSize Medium-ImageName$image.ImageName-AvailabilitySetName'AvbSet'| Add-AzureProvisioningConfig-Linux-LinuxUser'adminuser'-Password'Abc@123456'| New-AzureVM-ServiceName'LeiLinuxVM001'-Location'East Asia'
执行结果
观察执行结果: