首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql关系数据库同步到elastic search的最佳实践

mysql关系数据库同步到elastic search的最佳实践
EN

Stack Overflow用户
提问于 2020-04-26 03:04:29
回答 1查看 735关注 0票数 0

我有一个用户字段,它依赖于许多其他字段,它有多个外键到其他表,并有多对多关系使用透视表和一对多关系。

API类似于嵌套的JSON结构。对于特定用户,关系数据如下所示。

代码语言:javascript
复制
user = {
  id : _212dasd,
  name: "alphabeta",
  key1_id = 23,
  key1 : {
     id: 23,
     name: "new name"
  },
  key2 : [
      {
         id: _asdak61526,
         key2_id : 2
         user_id : _212dasd,

      },
      {
         id: _asdak6152a,
         key2_id : 3
         user_id : _212dasd
      }
  ],
  key3: {
     name : "gama",
     key_3_nested : {
       name : "abc",
       key_3_nested_levle2 : {
            name : "xyz",
       }
     }
   }
 }

如何将mysql关系数据同步到elastic search,因为大多数读取都会使用elastic search,我正在使用log-stash进行同步。

代码语言:javascript
复制
input {
  jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
    # The user we wish to execute our statement as
    jdbc_user => "root"
    jdbc_password => "root"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/~/mysql-connector-java-5.1.17.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    # our query
    statement => "SELECT * FROM users INNER JOIN table2 ON table2.user_id = users.id" // just a demo query
    schedule => "* * * * * *"
    }
  }
output {
  elasticsearch {
    document_id=> "%{sk_id}.%{user_id}"
    document_type => "doc"
    index => "db_prd"
    hosts => ["http://localhost:9200"]
  }
  stdout{
    codec => json_lines 
  }
}

问:我如何维护这种关系,创建多连接查询是一个好主意,因为每次它都会对许多用户数据及其未优化的结构进行多个大连接。对于10000个用户,连接到多个表将会减慢同步速度。它会同步每个索引还是只更改一个索引?

如何从elastic search获取API上的嵌套结构?

EN

回答 1

Stack Overflow用户

发布于 2021-03-05 17:00:18

您可以在过滤器中使用jdbcstream添加嵌套对象,如下所示:

代码语言:javascript
复制
jdbc_streaming {
            jdbc_driver_library => "/~/mysql-connector-java-5.1.17.jar"
            jdbc_driver_class => "org.mariadb.jdbc.Driver"
            jdbc_connection_string =>  "jdbc:mysql://localhost:3306/database_name"
            jdbc_user => "root"
            jdbc_password => "12345678@Abc"
            statement => "SELECT * FROM table2 ON table2.user_id = cus_id"
            parameters => {"cus_id" => "id"}
            target => "table2"
          }

它将创建嵌套的"table2“,其中data is row responsed from statement => "SELECT * FROM table2 ON table2.user_id = cus_id" with "id" in statement => "SELECT * FROM users;" ( fix of this statement => "SELECT * FROM users INNER JOIN table2 ON table2.user_id = users.id")

注意:它会减慢你的进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61431030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档