solr linux,linux软件仓库
很多朋友对于solr linux和linux软件仓库不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
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情况下,仍然有性能提升的空间,只是现在还没找到方法。
nextcloud硬件要求
编辑Docker-compose配置文件
拷贝以下内容并保存为docker-compose.yml,修改域名等相关参数
这里面包括四个容器服务,nextcloud,nextcloud-db(mysql),solr和redis,其中nextcloud是必须的,后面的服务不使用可以删除配置(同时要删除nextcloud中的依赖)。比如用户数少不想使用mysql,可删除depends_on:后面的- nextcloud-db以及后面的nextcloud-db配置段。nextcloud-db建议企业用户使用,redis作为缓存可以让服务器响应速度变得更快,solr提供了更好的搜索功能,你可以按需要自己配置。
运行docker容器
进入在docker-compose.yml目录
运行数据库容器(不使用Mysql略过)
docker-compose up-d nextcloud-db
运行其他容器
docker-compose up-d
redis配置
如果doker-compose.yml添加了redis服务,需要编辑php配置来启用服务,配置文件路径是/docker/nextcloud/config/config.php
重启reverse容器
docker restart reverse
配置solr
默认的文件查找功能只相当于一个列表过滤,无法搜索子文件夹,启用nextant插件借助solr服务可实现全文搜索,不光搜索文件名,还可以按文档的内容搜索。前提是在docker-compose.yml中配置了solr。
在配置过程中发现nextant无法连接solr,通过docker logs solr查看到错误信息“
cp: can't create directory'/opt/solr/server/solr/mycores/nextant': Permission denied”,
原来是没有权限,执行以下命令修改权限:
sudo chmod-R 777/docker/nextcloud/solr
重启solr
docker restart solr
通过docker logs solr查看,solr正常启动
登录设置
通过浏览器访问你的网站,第一次打开界面是这样的。
首次打开
输入用户名密码来创建管理员帐号
使用Nextant开启全文搜索
打开Nextant的前提是前面安装了solr服务,
管理员帐号登录,点击右上角齿轮图标,点击"+应用",点击"应用软件包",点击files,找到Nextant,点击启用;
点击右上角齿轮图标,选择管理,点击其他设置,找到Nextant(全文搜索)选项;
在Address of your solr servlet中输入,点击测试并保存,出现下图中右侧绿色对号提示即为连接成功。
Nextant配置
发现Nextcloud
总体来说,Nextcloud是一款出类拔萃的私有云盘服务,支持windows、mac、linux、安卓、ios主流操作系统。提供了丰富的插件可以在线安装,比如在线编辑流程图编辑,office文件编辑、日历、联系人、笔记、视频聊天、邮件等等。
主界面
[图片上传失败...(image-25c2ed-1512026386267)]
solr jvm配置多大比较好
0×00开头照例扯淡
自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚至开始用起了假名字,我给自己起一新网名”兴才”,这个看起来还不错的名字,其实是我们家乡骂人土话,意思是脑残人士….-_-|||额好吧,反正是假的,不要在意这些细节。
这只是名,至于姓氏么,每个帐号的注册资料那里,照着百家姓上赵钱孙李周吴郑王的依次往下排,什么张兴才、李兴才、王兴才……于是也不知道我这样”兴才”了多久,终于有一天,我接到一个陌生电话:您好,请问是马兴才先生吗?
好么,该来的终于还是来了,于是按名索骥,得知某某网站我用了这个名字,然后通过各种途径找,果然,那破站被脱裤子了。
果断Down了那个裤子,然后就一发不可收拾,走上了收藏裤子的不归路,直到有一天,我发现收藏已经非常丰富了,粗略估计得好几十亿条数据,拍脑袋一想,这不能光收藏啊,我也搭个社工库用吧……
0×01介绍
社工库怎么搭呢,这种海量数据的东西,并不是简单的用mysql建个库,然后做个php查询select* from sgk where username like‘%xxxxx%’这样就能完事的,也不是某些幼稚骚年想的随便找个4g内存,amd双核的破电脑就可以带起来的,上面这样的语句和系统配置,真要用于社工库查询,查一条记录恐怕得半小时。好在这个问题早就被一种叫做全文搜索引擎的东西解决了,更好的消息是,全文搜索引擎大部分都是开源的,不需要花钱。
目前网上已经搭建好的社工库,大部分是mysql+coreseek+php架构,coreseek基于sphinx,是一款优秀的全文搜索引擎,但缺点是比较轻量级,一旦数据量过数亿,就会有些力不从心,并且搭建集群做分布式性能并不理想,如果要考虑以后数据量越来越大的情况,还是得用其他方案,为此我使用了solr。
Solr的基础是著名的Lucene框架,基于java,通过jdbc接口可以导入各种数据库和各种格式的数据,非常适合开发企业级的海量数据搜索平台,并且提供完善的solr cloud集群功能,更重要的是,solr的数据查询完全基于http,可以通过简单的post参数,返回json,xml,php,python,ruby,csv等多种格式。
以前的solr,本质上是一组servlet,必须放进Tomcat才能运行,从solr5开始,它已经自带了jetty,配置的好,完全可以独立使用,并且应付大量并发请求,具体的架构我们后面会讲到,现在先来进行solr的安装配置。
0×02安装和配置
以下是我整个搭建和测试过程所用的硬件和软件平台,本文所有内容均在此平台上完成:
软件配置: solr5.5,mysql5.7,jdk8,Tomcat8 Windows10/Ubuntu14.04 LTS
硬件配置: i7 4770k,16G DDR3,2T西数黑盘
2.1 mysql数据库
Mysql数据库的安装和配置我这里不再赘述,只提一点,对于社工库这种查询任务远远多于插入和更新的应用来说,最好还是使用MyISAM引擎。
搭建好数据库后,新建一个库,名为newsgk,然后创建一个表命名为b41sgk,结构如下:
id bigint主键自动增长
username varchar用户名
email varchar邮箱
password varchar密码
salt varchar密码中的盐或者第二密码
ip varchar ip、住址、电话等其他资料
site varchar数据库的来源站点
接下来就是把收集的各种裤子全部导入这个表了,这里推荐使用navicat,它可以支持各种格式的导入,具体过程相当的枯燥乏味,需要很多的耐心,这里就不再废话了,列位看官自己去搞就是了,目前我初步导入的数据量大约是10亿条。
2.2 Solr的搭建和配置
首先下载solr:
$ wget
解压缩:
$ tar zxvf solr-5.5.0.tgz
安装jdk8:
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default
因为是java跨平台的,Windows下和linux下solr是同一个压缩包,windows下jdk的安装这里不再说明。
进入解压缩后的solr文件夹的bin目录,solr.cmd和solr分别是windows和linux下的启动脚本:
因为社工库是海量大数据,而jvm默认只使用512m的内存,这远远不够,所以我们需要修改,打开solr.in.sh文件,找到这一行:
SOLR_HEAP=”512m”
依据你的数据量,把它修改成更高,我这里改成4G,改完保存.在windows下略有不同,需要修改solr.in.cmd文件中的这一行:
set SOLR_JAVA_MEM=-Xms512m-Xmx512m
同样把两个512m都修改成4G。
Solr的启动,重启和停止命令分别是:
$./solr start
$./solr restart–p 8983
$./solr stop–all
在linux下还可以通过install_solr_service.sh脚本把solr安装为服务,开机后台自动运行。
Solr安装完成,现在我们需要从mysql导入数据,导入前,我们需要先创建一个core,core是solr的特有概念,每个core是一个查询、数据,、索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:
在solr-5.5.0/server/solr子目录下面建立一个新文件夹,命名为solr_mysql,这个是core的名称,在下面创建两个子目录conf和data,把solr-5.5.0/solr-5.5.0/example/example-DIH/solr/db/conf下面的所有文件全部拷贝到我们创建的conf目录中.接下来的配置主要涉及到三个文件, solrconfig.xml, schema.xml和db-data-config.xml。
首先打开db-data-config.xml,修改为以下内容:
这个文件是负责配置导入数据源的,请按照mysql实际的设置修改datasource的内容,下面entity的内容必须严格按照mysql中社工库表的结构填写,列名要和数据库中的完全一样。
然后打开solrconfig.xml,先找到这一段:
true
managed-schema
把它全部注释掉,加上一行,改成这样:
<!--
true
managed-schema
-->
这是因为solr5以上默认使用managed-schema管理schema,需要更改为可以手动修改。
然后我们还需要关闭suggest,它提供搜索智能提示,在社工库中我们用不到这样的功能,重要的是,suggest会严重的拖慢solr的启动速度,在十几亿数据的情况下,开启suggest可能会导致solr启动加载core长达几个小时!
同样在solrconfig.xml中,找到这一段:
mySuggester
FuzzyLookupFactory
DocumentDictionaryFactory
cat
price
string
true
10
suggest
把这些全部删除,然后保存solrconfig.xml文件。
接下来把managed-schema拷贝一份,重命名为schema.xml(原文件不要删除),打开并找到以下位置:
只保留_version_和_root_节点,然后把所有的field,dynamicField和copyField全部删除,添加以下的部分:
id
这里的uniqueKey是配置文件中原有的,用来指定索引字段,必须保留。新建了一个字段名为keyword,它的用途是联合查询,即当需要同时以多个字段做关键字查询时,可以用这一个字段名代替,增加查询效率,下面的copyField即用来指定复制哪些字段到keyword。注意keyword这样的字段,后面的multiValued属性必须为true。
username和email以及keyword这三个字段,用来检索查询关键字,它们的类型我们指定为text_ik,这是一个我们创造的类型,因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后在solrconfig.xml的fieldType部分加入以下内容:
保存后,core的配置就算完成了,不过要导入mysql数据,我们还需要在mysql网站上下载mysql-connector-java-bin.jar库文件,连同solr-5.5.0/dist目录下面的solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar两个文件,全部拷贝到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后重启solr,就可以开始数据导入工作了。