solr mysql增量导入_10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)
1.创建MySQL数据
create databasesolr;usesolr;DROP TABLE IF EXISTSstudent;CREATE TABLEstudent (
idchar(10) NOT NULL,
stu_namevarchar(50) DEFAULT NULL,
stu_sexint(1) DEFAULT NULL,
stu_addressvarchar(200) DEFAULT NULL,
updateTimetimestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
isDeletedint(1) DEFAULT 0,PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO student VALUES ('1000000001', '李莉', 0, '上海市中山路',default,default);INSERT INTO student VALUES ('1000000002', 'Tom', 1, 'NewYork',default,default);INSERT INTO student VALUES ('1000000003', '张小贝', 0, '江西省泰和县中山路',default,default);INSERT INTO student VALUES ('1000000004', '鲍勃', 1, '北京市海淀区知春路',default,default);INSERT INTO student VALUES ('1000000005', 'Tim', 0, 'Paris',default,default);select * from student;
2. DIH全量从MYSQL数据库导入数据
1)配置/home/solrhome/collection1/conf/solrconfig.xml
vim /home/solrhome/collection1/conf/solrconfig.xml
在前面上加上一个dataimport的处理的Handler
data-config.xml
2)在同目录下添加data-config.xml
vim /home/solrhome/collection1/conf/data-config.xml
说明:
dataSource是数据库数据源。
Entity就是一张表对应的实体,pk是主键,query是查询语句。
Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。
3)修改同目录下的schema.xml,这是Solr对数据库里的数据进行索引的模式
vim /home/solrhome/collection1/conf/schema.xml
4)拷贝关联jar
拷贝mysql-connector-java-3.1.13-bin.jar和solr-dataimporthandler-4.10.3.jar
cp /usr/local/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
cp /home/test/mysql-connector-java-3.1.13-bin.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
5)重启Solr
如果配置正确就可以启动成功。
solrconfig.xml是solr的基础文件,里面配置了各种web请求处理器、请求响应处理器、日志、缓存等。
schema.xml配置映射了各种数据类型的索引方案。分词器的配置、索引文档中包含的字段也在此配置。
6)索引测试
(1)Solr控制台导入
(2)HTTP方式导入
7)分批次导入数据
如果数据库数据太大,可以分批次导入数据。
vim /home/solrhome/collection1/conf/data-config.xml
上面主要是通过内置变量 “${dataimporter.request.length}”和 “${dataimporter.request.offset}”来设置一个批次索引的数据表记录数,请求的URL示例如下:
导入效果如下
3.DIH增量从MYSQL数据库导入数据
已经学会了如何全量导入MySQL的数据,全量导入在数据量大的时候代价非常大,一般来说都会适用增量的方式来导入数据,下面介绍如何增量导入MYSQL数据库中的数据,以及如何设置定时来做。
特别注意:DIH增量也是可以做全量数据导入,所以生产环境只要设置DIH增量方式。
1)数据库表的更改
新增一个字段updateTime,类型为timestamp,默认值为CURRENT_TIMESTAMP。有了这样一个字段,Solr才能判断增量导入的时候,哪些数据是新的。因为Solr本身有一个默认值last_index_time,记录最后一次做full import或者是delta import(增量导入)的时间,这个值存储在文件conf目录的dataimport.properties文件中。
more dataimport.properties
2)data-config.xml中必要属性的设置
vim /home/solrhome/collection1/conf/data-config.xml
'${dataimporter.last_index_time}' and isDeleted=0"deletedPkQuery="select id from student where isDeleted=1">
transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签
query:查询数据库表符合记录数据
deltaQuery:增量索引查询主键ID 注意这个只能返回ID字段
deltaImportQuery:增量索引查询导入的数据
deletedPkQuery:增量索引删除主键ID查询 注意这个只能返回ID字段
增量索引的原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。
然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。
核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。
如果业务中还有删除操作,可以在数据库中加一个isDeleted字段来表明该条数据是否已经被删除,这时候Solr在更新index的时候,可以根据这个字段来更新哪些已经删除了的记录的索引。
3)测试增量导入
DIH全量导入
修改student数据
update student set stu_name="jerry" where id = '1000000005';update student set isDeleted=1 where id = '1000000004';INSERT INTO student VALUES ('1000000006', 'Tim11', 0, 'Paris',default,default);
DIH增量导入数据
http://192.168.137.168:8080/solr/collection1/dataimport?command=delta-import
4)设置增量导入为定时执行的任务
可以用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题。
但是更方便,更加与Solr本身集成度高的是利用其自身的定时增量导入功能。
1.增加关联jar
cp /home/test/apache-solr-dataimportscheduler.jar /home/tomcat6/webapps/solr/WEB-INF/lib/
2、修改solr的WEB-INF目录下面的web.xml文件:
vim /home/tomcat6/webapps/solr/WEB-INF/web.xml
为元素添加一个子元素
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
3、新建配置文件dataimport.properties:
在SOLR_HOME\solr目录下面新建一个目录conf(注意不是SOLR_HOME\solr\collection1下面的conf)
mkdir /home/solrhome/conf
vim /home/solrhome/conf/dataimport.properties
下面是最终我的自动定时更新配置文件内容:
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# syncCores=game,resource
syncCores=collection1
# solr server name or IP address
# [defaults to localhost if empty]
server=192.168.137.168
# solr server port
# [defaults to 80 if empty]
port=8080
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# URLparams [mandatory]
# remainder of URL
#http://localhost:8983/solr/collection1/dataimport?command=delta-import&clean=false&commit=true
params=/dataimport?command=delta-import&clean=false&commit=true
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即1天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=2
# 重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
4、测试
重启tomcat
一般来说要在你的项目中引入Solr需要考虑以下几点:
1、数据更新频率:每天数据增量有多大,及时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划
参考http://www.cnblogs.com/luxiaoxun/p/4442770.html
solr mysql增量导入_10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)相关推荐
- mysql 热备份 数据一致性_MySQL 使用 XtraBackup 进行数据热备份指导 [全量+增量]
背景 最近一直涉猎 MySQL 数据库的操作.集群部署 注意到,为保证数据安全,掌握数据备份是极为重要的 相比小型服务的冷备份而言 在此推荐并整理更受推崇的 XtraBackup 下的热备份技巧 ☞ ...
- Windows下Solr的安装与配置,附DIH全量导入MySQL数据、IK分词器配置详解——不用集成Tomcat
Solr是Apache开源的比较稳定的一款全文搜索引擎,也是市面上相对比较流行的一款全文搜索引擎,好不好用你用过之后自有判断.今天给大家分享一下它的安装与配置,我用的是7.7.2版本.废话不多说,开搞 ...
- MySQL数据库之全量+增量+二进制日志的备份与恢复
一.简介数据的备份与恢复 1.为什么备份? 灾难恢复:人为错误.硬件故障(冗余).软件故障(bug).自然灾害.黑客攻击.误操作.-: 测试: 2.备份时应该注意些什么? 能容忍最多丢失多少数据: 恢 ...
- mysqldump全量恢复_【MySQL】全量+增量的备份/恢复
生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...
- mysqldump备份(全量+增量)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...
- “全量增量” 与 “增量同步” 一文了解清楚【建议收藏】
大家在同步数据的时候都会接触到2个名词,"全量增量" 与 "增量同步" ,名字都长得差不多,但是意思和操作却不一样:比如部门领导给你方案,那我们要如何去选择其中 ...
- Elasticsearch和MySQL数据同步(logstash-input-jdbc)全量增量方式同步近千万数据
同步方案: 同步读写:最为简单的方式在将数据写到mysql时,同时将数据写到ES,实现数据的双写. 异步双写(MQ方式):MQ的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高. 定时器 ...
- 利用Canal全量/增量同步mysql数据至ES
Canal同步mysql数据至ES 1.更改Mysql配置 1.1 开启 Binlog 写入功能 配置 binlog-format 为 ROW 模式,配置my.cnf [mysqld] log-bin ...
- 一个脚本实现全量增量备份,并推送到远端备份中心服务器
2019独角兽企业重金招聘Python工程师标准>>> 摘要 由于工作需要,刚好需要这样一个功能的脚本,主要解决: 1. 不想在crontab中调度两条备份任务,一个做全量一个做增量 ...
最新文章
- jQuery源码学习之Callbacks
- MySQL字符串截取函数
- ajax请求提示html状态码302,快速解决ajax请求出错状态码为0的问题
- js网页返回页面顶部的小方法
- 几种C++ std::string和std::wstring相互转换的转换方法
- jedis开发过程中遇到的问题及其解决方法
- 2.2. MongoDB 管理
- 【bug解决方案】powershell 中无法激活 conda 环境 /Anaconda 使用 powershell 无效
- Linux---如何创建文本文件
- RDPwrap: win10 家庭版开通远程桌面服务
- 华为 U2000 网管系统 批量添加全网OLT设备TELNET账号
- 小觅双目相机标准彩色版SDK的环境配置
- VirtualDub
- QT控件被其他控件遮盖
- c语言文件尾没有newline字符,关于C++:”文件末尾无新行”编译器警告“No newline at end of file”...
- Qt-quick(qml) Canvas用法及鼠标绘制图形
- 43.自动获取汉子笔画
- 游戏合作伙伴专题:BreederDAO 与 Mech 一起加入战斗
- 南加大的计算机科学与工程,南加州大学优势专业及优势专业排名(QS世界排名)...
- ajax传json对象到后端,明明有数据,后端缺显示null