<commit_before># canal_mysql_elasticsearch_sync

基于 *canal* 的 *Mysql* 与 *Elasticsearch* 实时同步的 *javaweb* 服务。    
canal是阿里巴巴mysql数据库binlog的增量订阅&消费组件。[canal传送门](https://github.com/alibaba/canal)

## 工作原理
### 全量
暴露Http接口（接口定义见[wiki](https://github.com/starcwang/canal_mysql_elasticsearch_sync/wiki/HttpApi)），待调用后开启后台进程，通过主键分批同步指定数据库中数据到Elasticsearch
> 读取数据库会加**读锁**   
> 主键必须为数字类型
#### 过程
1. 首先会根据所给的数据库主键字段，拿到最大的主键数字max_id；
2. 设*pk*=min_id；
2. 加读锁🔐，从数据库中取出*pk* —— *pk*+*stepSize* 大小的数据（默认500）的数据；
3. 插入到Elasticsearch中；
4. 释放读锁🔐，pk累加*stepSize*，循环3.操作，直到*pk*>*max_id*
<commit_msg>minId<commit_after># canal_mysql_elasticsearch_sync

基于 *canal* 的 *Mysql* 与 *Elasticsearch* 实时同步的 *javaweb* 服务。    
canal是阿里巴巴mysql数据库binlog的增量订阅&消费组件。[canal传送门](https://github.com/alibaba/canal)

## 工作原理
### 全量
暴露Http接口（接口定义见[wiki](https://github.com/starcwang/canal_mysql_elasticsearch_sync/wiki/HttpApi)），待调用后开启后台进程，通过主键分批同步指定数据库中数据到Elasticsearch
> 读取数据库会加**读锁**   
> 主键必须为数字类型
#### 过程
1. 首先会根据所给的数据库主键字段，拿到最大的主键数字max_id；
2. 设*pk*=min_id（默认是数据库中的主键最小值）；
2. 加读锁🔐，从数据库中取出*pk* —— *pk*+*stepSize* 大小的数据（默认500）的数据；
3. 插入到Elasticsearch中；
4. 释放读锁🔐，pk累加*stepSize*，循环3.操作，直到*pk*>*max_id*

{'fraction_non_alphanumeric': 0.16421780466724287, 'fraction_numerical': 0.015557476231633534, 'mean_word_length': 8.118110236220472, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4636178', 'n_tokens_mistral': 718, 'n_tokens_neox': 831, 'n_words': 62}