主頁 > 資料庫 > Apache Hudi使用簡介

Apache Hudi使用簡介

2020-12-28 06:51:01 資料庫

Apache Hudi使用簡介

目錄
  • Apache Hudi使用簡介
  • 資料實時處理和實時的資料
  • 業務場景和技術選型
  • Apache hudi簡介
    • 使用Aapche Hudi整體思路
    • Hudi表資料結構
      • 資料檔案
      • .hoodie檔案
    • Hudi記錄Id
    • COW和MOR
      • Copy On Write Table
      • Merge On Read Table
  • 基于hudi的代碼實作
    • binlog資料寫入Hudi表
    • 歷史資料同步以及表元資料同步至hive
      • 同步歷史資料至hudi表
      • 同步hudi表結構至hive meta
  • 一些踩坑
    • hive相關配置
    • spark streaming的一些調優
  • 未來改進
  • 參考資料

資料實時處理和實時的資料

實時分為處理的實時和資料的實時
即席分析是要求對資料實時的處理,馬上要得到對應的結果
Flink、Spark Streaming是用來對實時資料的實時處理,資料要求實時,處理也要迅速
資料不實時,處理也不及時的場景則是我們的數倉T+1資料

而本文探討的Apache Hudi,對應的場景是資料的實時,而非處理的實時,它旨在將Mysql中的時候以近實時的方式映射到大資料平臺,比如Hive中,

業務場景和技術選型

傳統的離線數倉,通常資料是T+1的,不能滿足對當日資料分析的需求
而流式計算一般是基于視窗,并且視窗邏輯相對比較固定,
而筆者所在的公司有一類特殊的需求,業務分析比較熟悉現有事務資料庫的資料結構,并且希望有很多即席分析,這些分析包含當日比較實時的資料,慣常他們是基于Mysql從庫,直接通過Sql做相應的分析計算,但很多時候會遇到如下障礙

  • 資料量較大、分析邏輯較為復雜時,Mysql從庫耗時較長
  • 一些跨庫的分析無法實作

因此,一些彌合在OLTP和OLAP之間的技術框架出現,典型有TiDB,它能同時支持OLTP和OLAP,而諸如Apache Hudi和Apache Kudu則相當于現有OLTP和OLAP技術的橋梁,他們能夠以現有OLTP中的資料結構存盤資料,支持CRUD,同時提供跟現有OLAP框架的整合(如Hive,Impala),以實作OLAP分析

Apache Kudu,需要單獨部署集群,而Apache Hudi則不需要,它可以利用現有的大資料集群比如HDFS做資料檔案存盤,然后通過Hive做資料分析,相對來說更適合資源受限的環境

Apache hudi簡介

使用Aapche Hudi整體思路

Hudi 提供了Hudi 表的概念,這些表支持CRUD操作,我們可以基于這個特點,將Mysql Binlog的資料重放至Hudi表,然后基于Hive對Hudi表進行查詢分析,資料流向架構如下
file

Hudi表資料結構

Hudi表的資料檔案,可以使用作業系統的檔案系統存盤,也可以使用HDFS這種分布式的檔案系統存盤,為了后續分析性能和資料的可靠性,一般使用HDFS進行存盤,以HDFS存盤來看,一個Hudi表的存盤檔案分為兩類,

file

  • 包含_partition_key相關的路徑是實際的資料檔案,按磁區存盤,當然磁區的路徑key是可以指定的,我這里使用的是_partition_key
  • .hoodie 由于CRUD的零散性,每一次的操作都會生成一個檔案,這些小檔案越來越多后,會嚴重影響HDFS的性能,Hudi設計了一套檔案合并機制, .hoodie檔案夾中存放了對應的檔案合并操作相關的日志檔案,
資料檔案

Hudi真實的資料檔案使用Parquet檔案格式存盤
file

.hoodie檔案

Hudi把隨著時間流逝,對表的一系列CRUD操作叫做Timeline,Timeline中某一次的操作,叫做Instant,Instant包含以下資訊

  • Instant Action 記錄本次操作是一次資料提交(COMMITS),還是檔案合并(COMPACTION),或者是檔案清理(CLEANS)
  • Instant Time 本次操作發生的時間
  • state 操作的狀態,發起(REQUESTED),進行中(INFLIGHT),還是已完成(COMPLETED)

.hoodie檔案夾中存放對應操作的狀態記錄
file

Hudi記錄Id

hudi為了實作資料的CRUD,需要能夠唯一標識一條記錄,hudi將把資料集中的唯一欄位(record key ) + 資料所在磁區 (partitionPath) 聯合起來當做資料的唯一鍵

COW和MOR

基于上述基礎概念之上,Hudi提供了兩類表格式COW和MOR,他們會在資料的寫入和查詢性能上有一些不同

Copy On Write Table

簡稱COW,顧名思義,他是在資料寫入的時候,復制一份原來的拷貝,在其基礎上添加新資料,正在讀資料的請求,讀取的是是近的完整副本,這類似Mysql 的MVCC的思想,

上圖中,每一個顏色都包含了截至到其所在時間的所有資料,老的資料副本在超過一定的個數限制后,將被洗掉,這種型別的表,沒有compact instant,因為寫入時相當于已經compact了,

  • 優點 讀取時,只讀取對應磁區的一個資料檔案即可,較為高效
  • 缺點 資料寫入的時候,需要復制一個先前的副本再在其基礎上生成新的資料檔案,這個程序比較耗時,且由于耗時,讀請求讀取到的資料相對就會滯后
Merge On Read Table

簡稱MOR,新插入的資料存盤在delta log 中,定期再將delta log合并進行parquet資料檔案,讀取資料時,會將delta log跟老的資料檔案做merge,得到完整的資料回傳,當然,MOR表也可以像COW表一樣,忽略delta log,只讀取最近的完整資料檔案,下圖演示了MOR的兩種資料讀寫方式

  • 優點 由于寫入資料先寫delta log,且delta log較小,所以寫入成本較低
  • 缺點 需要定期合并整理compact,否則碎片檔案較多,讀取性能較差,因為需要將delta log 和 老資料檔案合并

基于hudi的代碼實作

我在github上放置了基于Hudi的封裝實作,對應的原始碼地址為 https://github.com/wanqiufeng/hudi-learn,

binlog資料寫入Hudi表

  • binlog-consumer分支使用Spark streaming消費kafka中的Binlog資料,并寫入Hudi表,Kafka中的binlog是通過阿里的Canal工具同步拉取的,程式入口是CanalKafkaImport2Hudi,它提供了一系列引數,配置程式的執行行為
引數名 含義 是否必填 默認值
--base-save-path hudi表存放在HDFS的基礎路徑,比如hdfs://192.168.16.181:8020/hudi_data/
--mapping-mysql-db-name 指定處理的Mysql庫名
--mapping-mysql-table-name 指定處理的Mysql表名
--store-table-name 指定Hudi的表名 默認會根據--mapping-mysql-db-name和--mapping-mysql-table-name自動生成,假設--mapping-mysql-db-name 為crm,--mapping-mysql-table-name為order,那么最終的hudi表名為crm__order
--real-save-path 指定hudi表最終存盤的hdfs路徑 默認根據--base-save-path和--store-table-name自動生成,生成格式為'--base-save-path'+'/'+'--store-table-name' ,推薦默認
--primary-key 指定同步的mysql表中能唯一標識記錄的欄位名 默認id
--partition-key 指定mysql表中可以用于磁區的時間欄位,欄位必須是timestamp 或dateime型別
--precombine-key 最終用于配置hudi的hoodie.datasource.write.precombine.field 默認id
--kafka-server 指定Kafka 集群地址
--kafka-topic 指定消費kafka的佇列
--kafka-group 指定消費kafka的group 默認在存盤表名前加'hudi'前綴,比如'hudi_crm__order'
--duration-seconds 由于本程式使用Spark streaming開發,這里指定Spark streaming微批的時長 默認10秒

一個使用的demo如下

/data/opt/spark-2.4.4-bin-hadoop2.6/bin/spark-submit --class com.niceshot.hudi.CanalKafkaImport2Hudi \
	--name hudi__goods \
    --master yarn \
    --deploy-mode cluster \
    --driver-memory 512m \
    --executor-memory 512m \
    --executor-cores 1 \
	--num-executors 1 \
    --queue hudi \
    --conf spark.executor.memoryOverhead=2048 \
    --conf "spark.executor.extraJavaOptions=-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\tmp\hudi-debug" \
	--conf spark.core.connection.ack.wait.timeout=300 \
	--conf spark.locality.wait=100 \
	--conf spark.streaming.backpressure.enabled=true \
	--conf spark.streaming.receiver.maxRate=500 \
	--conf spark.streaming.kafka.maxRatePerPartition=200 \
	--conf spark.ui.retainedJobs=10 \
	--conf spark.ui.retainedStages=10 \
	--conf spark.ui.retainedTasks=10 \
	--conf spark.worker.ui.retainedExecutors=10 \
	--conf spark.worker.ui.retainedDrivers=10 \
	--conf spark.sql.ui.retainedExecutions=10 \
	--conf spark.yarn.submit.waitAppCompletion=false \
	--conf spark.yarn.maxAppAttempts=4 \
	--conf spark.yarn.am.attemptFailuresValidityInterval=1h \
	--conf spark.yarn.max.executor.failures=20 \
	--conf spark.yarn.executor.failuresValidityInterval=1h \
	--conf spark.task.maxFailures=8 \
    /data/opt/spark-applications/hudi_canal_consumer/hudi-canal-import-1.0-SNAPSHOT-jar-with-dependencies.jar  --kafka-server local:9092 --kafka-topic dt_streaming_canal_xxx --base-save-path hdfs://192.168.2.1:8020/hudi_table/ --mapping-mysql-db-name crm --mapping-mysql-table-name order --primary-key id --partition-key createDate --duration-seconds 1200

歷史資料同步以及表元資料同步至hive

history_import_and_meta_sync 分支提供了將歷史資料同步至hudi表,以及將hudi表資料結構同步至hive meta的操作

同步歷史資料至hudi表

這里采用的思路是

  • 將mysql全量資料通過注入sqoop等工具,匯入到hive表,
  • 然后采用分支代碼中的工具HiveImport2HudiConfig,將資料匯入Hudi表

HiveImport2HudiConfig提供了如下一些引數,用于配置程式執行行為

引數名 含義 是否必填 默認值
--base-save-path hudi表存放在HDFS的基礎路徑,比如hdfs://192.168.16.181:8020/hudi_data/
--mapping-mysql-db-name 指定處理的Mysql庫名
--mapping-mysql-table-name 指定處理的Mysql表名
--store-table-name 指定Hudi的表名 默認會根據--mapping-mysql-db-name和--mapping-mysql-table-name自動生成,假設--mapping-mysql-db-name 為crm,--mapping-mysql-table-name為order,那么最終的hudi表名為crm__order
--real-save-path 指定hudi表最終存盤的hdfs路徑 默認根據--base-save-path和--store-table-name自動生成,生成格式為'--base-save-path'+'/'+'--store-table-name' ,推薦默認
--primary-key 指定同步的hive歷史表中能唯一標識記錄的欄位名 默認id
--partition-key 指定hive歷史表中可以用于磁區的時間欄位,欄位必須是timestamp 或dateime型別
--precombine-key 最終用于配置hudi的hoodie.datasource.write.precombine.field 默認id
--sync-hive-db-name 全量歷史資料所在hive的庫名
--sync-hive-table-name 全量歷史資料所在hive的表名
--hive-base-path hive的所有資料檔案存放地址,需要參看具體的hive配置 /user/hive/warehouse
--hive-site-path hive-site.xml組態檔所在的地址
--tmp-data-path 程式執行程序中臨時檔案存放路徑,一般默認路徑是/tmp,有可能出現/tmp所在磁盤太小,而導致歷史程式執行失敗的情況,當出現該情況時,可以通過該引數自定義執行路徑 默認作業系統臨時目錄

一個程式執行demo

nohup java -jar hudi-learn-1.0-SNAPSHOT.jar --sync-hive-db-name hudi_temp --sync-hive-table-name crm__wx_user_info --base-save-path hdfs://192.168.2.2:8020/hudi_table/ --mapping-mysql-db-name crm --mapping-mysql-table-name "order" --primary-key "id" --partition-key created_date --hive-site-path /etc/lib/hive/conf/hive-site.xml --tmp-data-path /data/tmp > order.log &
同步hudi表結構至hive meta

需要將hudi的資料結構和磁區,以hive外表的形式同步至Hive meta,才能是Hive感知到hudi資料,并通過sql進行查詢分析,Hudi本身在消費Binlog進行存盤時,可以順帶將相關表元資料資訊同步至hive,但考慮到每條寫入Apache Hudi表的資料,都要讀寫Hive Meta ,對Hive的性能可能影響很大,所以我單獨開發了HiveMetaSyncConfig工具,用于同步hudi表元資料至Hive,考慮到目前程式只支持按天磁區,所以同步工具可以一天執行一次即可,引數配置如下

引數名 含義 是否必填 默認值
--hive-db-name 指定hudi表同步至哪個hive資料庫
--hive-table-name 指定hudi表同步至哪個hive表
--hive-jdbc-url 指定hive meta的jdbc鏈接地址,例如jdbc:hive2://192.168.16.181:10000
--hive-user-name 指定hive meta的鏈接用戶名 默認hive
--hive-pwd 指定hive meta的鏈接密碼 默認hive
--hudi-table-path 指定hudi表所在hdfs的檔案路徑
--hive-site-path 指定hive的hive-site.xml路徑

一個程式執行demo

java -jar hudi-learn-1.0-SNAPSHOT.jar --hive-db-name streaming --hive-table-name crm__order --hive-user-name hive --hive-pwd hive --hive-jdbc-url jdbc:hive2://192.168.16.181:10000 --hudi-table-path hdfs://192.168.16.181:8020/hudi_table/crm__order --hive-site-path /lib/hive/conf/hive-site.xml

一些踩坑

hive相關配置

有些hive集群的hive.input.format配置,默認是org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,這會導致掛載Hudi資料的Hive外表讀取到所有Hudi的Parquet資料,從而導致最終的讀取結果重復,需要將hive的format改為org.apache.hadoop.hive.ql.io.HiveInputFormat,為了避免在整個集群層面上更改對其余離線Hive Sql造成不必要的影響,建議只對當前hive session設定set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

spark streaming的一些調優

由于binlog寫入Hudi表的是基于Spark streaming實作的,這里給出了一些spark 和spark streaming層面的配置,它能使整個程式作業更穩定

配置 含義
spark.streaming.backpressure.enabled=true 啟動背壓,該配置能使Spark Streaming消費速率,基于上一次的消費情況,進行調整,避免程式崩潰
spark.ui.retainedJobs=10
spark.ui.retainedStages=10
spark.ui.retainedTasks=10
spark.worker.ui.retainedExecutors=10
spark.worker.ui.retainedDrivers=10
spark.sql.ui.retainedExecutions=10
默認情況下,spark 會在driver中存盤一些spark 程式執行程序中各stage和task的歷史資訊,當driver記憶體過小時,可能使driver崩潰,通過上述引數,調節這些歷史資料存盤的條數,從而減小對內層使用
spark.yarn.maxAppAttempts=4 配置當driver崩潰后,嘗試重啟的次數
spark.yarn.am.attemptFailuresValidityInterval=1h 假若driver執行一周才崩潰一次,那我們更希望每次都能重啟,而上述配置在累計到重啟4次后,driver就再也不會被重啟,該配置則用于重置maxAppAttempts的時間間隔
spark.yarn.max.executor.failures=20 executor執行也可能失敗,失敗后集群會自動分配新的executor, 該配置用于配置允許executor失敗的次數,超過次數后程式會報(reason: Max number of executor failures (400) reached),并退出
spark.yarn.executor.failuresValidityInterval=1h 指定executor失敗重分配次數重置的時間間隔
spark.task.maxFailures=8 允許任務執行失敗的次數

未來改進

  • 支持無磁區,或非日期磁區表,目前只支持日期磁區表
  • 多資料型別支持,目前為了程式的穩定性,會將Mysql中的欄位全部以String型別存盤至Hudi

參考資料

https://hudi.apache.org/

歡迎關注我的個人公眾號"西北偏北UP",記錄代碼人生,行業思考,科技評論

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/241299.html

標籤:其他

上一篇:redis-復制

下一篇:sqlserver 腳本和批處理指令小結

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more