1 Star 0 Fork 2

HUB2EE / indexer

forked from Indexea / indexer 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
readme.md 6.41 KB
一键复制 编辑 原始数据 按行查看 历史
Indexea 提交于 2023-04-24 17:22 . add compile

indexer

indexer 是一个实现将客户数据(支持包括 SQL 等多种数据库、文件目录、队列)自动同步到 indexea 的工具。

indexer 采用 rust 语言开发,体积小、支持跨平台,简单轻便,资源占用少,同时对业务系统的侵入很小。

indexer 提供非常灵活的配置 (indexer.yml),以非常高效方式将业务数据同步到 indexea

该工具基于 MIT 许可证开源,开源地址:https://gitee.com/indexea/indexer

使用说明

编译

安装 rust 环境

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

下载源码并编译

git clone https://gitee.com/indexea/indexer.git
cd indexer
cargo build --release

配置文件

indexer 使用 YAML 文件(indexer.yml)进行灵活的自定义配置,配置包括三部分内容:

序号 配置名 配置说明 其他说明
1 datasource 数据源定义 允许配置多个数据库,当前支持 MySQL 和 Postgres
2 endpoint Indexea 服务配置 只能配置单个服务,如果需要使用多个服务,可以运行多个 indexer 的实例
3 tasks 同步任务配置 配置 datasource 的数据如何同步到 endpoint 中,可以配置一到多个同步任务

indexer.yml

datasource:
  mydb: # datasource name
    source: "mysql" # mysql,postgres,oracle
    url: "mysql://account:passwd@localhost:3306/mydb?tcp_connect_timeout_ms=1000"

endpoint:
  url: "https://api.indexea.com/v1/" # Indexea Gateway API 
  oauth_url: "https://api.indexea.com/oauth"  # Indexea Gateway OAuth
  client_id: "smxuk5rvrfjkzhrf1244"  # client id (详见应用设置的第三方应用管理)
  client_secret: "gqee9yh2igplhkb9deq9ngqmufu19ivaq4mp2492"  # client secret
  indices:
    repositories: # index name
      app: "tw6mi8il" # app ient
      index: 1005     # index id
    blogs:
      app: "tw6mi8il"
      index: 1006

tasks:
  repositories: # task name
    datasource: "mydb" # datasource  name, refer to $datasource.mydb
    index: "repositories" # index name, refer to $endpoint.indices.repositories
    table: "repositories" # table name
    primary: "id" # primary field name of table 
    interval: 1000 # check interval in mills-second
  blogs:
    datasource: "mydb"
    index: "blogs" 
    table: "blogs"
    primary: "id" 
    sql: "SELECT b.*, a.name AS author_name FROM blogs b LEFT JOIN authors a ON b.author = a.id" ##指定 SQL ,否则默认为 SELECT * FROM <table>
    fields:
      author_name: "user" # 字段名映射,例:在 indexea 将使用 user 字段名来表示 author_name 的值
      password: "" # 删除某个字段,一些敏感信息不需要进行搜索的可以通过这种方式避免同步到 indexea
      status: # 自定义字段值映射
        0: "pending"
        1: "open"
        2: "block"
        3: "delete"
    interval: 2000 

程序参数

-c <indexer.yml>
指定配置文件路径

-l <indexer.log>
指定日志文件路径

-t --test
测试配置是否正确

-i --init
在本地数据源上建立 indexer 必备的信息,例如在数据库上建 indexea_tasks 表和触发器等。 然后执行数据首次同步,也就是全量的数据同步,如果使用该参数,需要用户进行二次确认

-d --start
进入守护进程方式开始增量数据同步

--clean
清除 indexer 生成的表、函数和触发器,
当不再使用 indexer 时可以使用该参数来清除数据。

--stop
停止守护进程

运行流程

初始化和全量同步

命令:indexer -i
首次使用前需要进行配置,你可以运行 indexer -t 来测试配置文件是否正确,然后运行 indexer -i 来执行初始化。

初始化主要包括三部分:

  1. 在你指定的数据源中建 indexea_tasks 任务表,表结构如下表所示
  2. 创建每个任务对应的数据增删改的触发器,触发器的主要任务是将变更数据写入 indexea_tasks 表中
  3. 执行全量的数据同步(同步完成后 indexer 进程自动终止,同步的时间取决于数据量大小)

[indexea_tasks] 表结构 (MySQL)

字段名 类型 说明 其他说明
id bigint 自增长主键
task varchar(32) 对应 yml 配置中的任务名称
field varchar(32) 对象主键字段名
value varchar(64) 字段值
type tinyint 字段类型 1 数值,2 字符串
ops tinyint 操作类型 1 添加,2 修改, 3 删除
status tinyint 处理状态 0 未处理,1 已处理, 2 处理失败, 3 参数错误

其他数据库的表结构与 MySQL 同。

数据库触发器(MySQL)

CREATE TRIGGER indexea_after_insert_<task>
AFTER DELETE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', NEW.<field>, 1, 0);

CREATE TRIGGER indexea_after_update_<task>
AFTER UPDATE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', OLD.<field>, 2, 0);

CREATE TRIGGER indexea_after_delete_<task>
AFTER DELETE
ON <table> FOR EACH ROW
INSERT INTO indexea_tasks(`task`,`field`,`value`,`type`,`status`) VALUES('<task>', '<field>', OLD.<field>, 3, 0);

其中:

  • <task> 对应 indexer.yml 中的任务名称
  • <table> 对应 indexer.yml 中任务对应的表名
  • <field> 对应 indexer.yml 中表配置的主键名称 (primary)

其他数据库原理与 MySQL 相同。

自动增量同步

一旦完成了初始化配置和全量同步后,你可以通过 indexer -d 命令启动服务进入自动增量同步的守护进程。 守护进程会定时读取 indexea_tasks 表中记录即时同步到 indexea

你可以通过查看 indexea.log 来查看服务运行状态。

你可以使用 indexer --stop 或者 kill 命令来停止服务运行。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Rust
1
https://gitee.com/since2020/indexer.git
git@gitee.com:since2020/indexer.git
since2020
indexer
indexer
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891