[英]Best practice for mysql relational database syncing to elastic search
我有一個用戶字段,它依賴於許多其他字段,它具有其他表的多個外鍵,並且使用 pivot 表和一對多關系具有多對多關系。
API 類似於嵌套的 JSON 結構。 對於特定用戶,關系數據看起來像這樣。
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 關系數據同步到彈性搜索,因為大多數讀取將 go 與彈性搜索,我使用 log-stash 進行同步。
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 個用戶並加入多個表會減慢同步速度。 它會同步每個索引還是只更改一個?
如何從彈性搜索中獲取 API 上的嵌套結構。
您可以在過濾器中使用 jdbcstream 來添加嵌套的 object,例如:
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”,其中數據是從語句 => "SELECT * FROM table2 ON table2.user_id = cus_id" with "id"
=> "SELECT * FROM users;"
響應的行 (此語句的修復=> "SELECT * FROM users INNER JOIN table2 ON table2.user_id = users.id"
)
注意:它會減慢你的進程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.