主頁 > 資料庫 > 騰訊大牛教你ClickHouse實時同步MySQL資料

騰訊大牛教你ClickHouse實時同步MySQL資料

2020-11-02 19:41:13 資料庫

作者 史鵬宙 CSIG云與智慧產業事業群研發工程師

ClickHouse作為OLAP分析引擎已經被廣泛使用,資料的匯入匯出是用戶面臨的第一個問題,由于ClickHouse本身無法很好地支持單條大批量的寫入,因此在實時同步資料方面需要借助其他服務協助,本文給出一種結合Canal+Kafka的方案,并且給出在多個MySQL實體分庫分表的場景下,如何將多張MySQL資料表寫入同一張ClickHouse表的方法,歡迎大家批評指正,

首先來看看我們的需求背景:

  1. 實時同步多個MySQL實體資料到ClickHouse,每天規模500G,記錄數目億級別,可以接受分鐘級別的同步延遲;

  2. 某些資料庫表存在分庫分表的操作,用戶需要跨MySQL實體跨資料庫的表同步到ClickHouse的一張表中;

  3. 現有的MySQL binlog開源組件(Canal),無法做到多張源資料表到一張目的表的映射關系,

基本原理

一、使用JDBC方式同步

  1. 使用Canal組件完成binlog的決議和資料同步;

  2. Canal-Server行程會偽裝成MySQL的slave,使用MySQL的binlog同步協議完成資料同步;

  3. Canal-Adapter行程負責從canal-server獲取決議后的binlog,并且通過jdbc介面寫入到ClickHouse;

image.png

優點:

  1. Canal組件原生支持;

缺點:

  1. Canal-Adpater寫入時源表和目的表一一對應,靈活性不足;

  2. 需要維護兩個Canal組件行程;

二、Kafka+ClickHouse物化視圖方式同步

  1. Canal-Server完成binlog的決議,并且將決議后的json寫入Kafka;

  2. Canal-Server可以根據正則運算式過濾資料庫和表名,并且根據規則寫入Kafka的topic;

  3. ClickHouse使用KafkaEngine和Materialized View完成訊息消費,并寫入本地表;

image.png

優點:

  1. Kafka支持水平擴展,可以根據資料規模調整partition數目;

  2. Kafka引入后將寫入請求合并,防止ClickHouse生成大量的小檔案,從而影響查詢性能;

  3. Canal-Server支持規則過濾,可以靈活配置上游的MySQL實體的資料庫名和表名,并且指明寫入的Kafka topic名稱;

缺點:

  1. 需要維護Kafka和配置規則;

  2. ClickHouse需要新建相關的視圖、Kafka Engine的外表等;

具體步驟

一、準備作業

  1. 如果使用TencentDB,則在控制臺確認binlog_format為ROW,無需多余操作,

image.png

如果是自建MySQL,則在客戶端中查詢變數:

>   show variables like '%binlog%';

+-----------------------------------------+----------------------+

| Variable_name                           | Value                |

+-----------------------------------------+----------------------+

| binlog_format                           | ROW                  |

+-----------------------------------------+----------------------+

 

> show variables like '%log_bin%';

+---------------------------------+--------------------------------------------+

| Variable_name                   | Value                                      |

+---------------------------------+--------------------------------------------+

| log_bin                         | ON                                         |

| log_bin_basename                |  /data/mysql_root/log/20146/mysql-bin        |

| log_bin_index                   |  /data/mysql_root/log/20146/mysql-bin.index |

+---------------------------------+--------------------------------------------+
  1. 創建賬號canal,用于同步binlog

CREATE USER canal IDENTIFIED BY 'canal';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'canal'@'%';

FLUSH PRIVILEGES;

二、Canal組件部署

前置條件:

Canal組件部署的機器需要跟ClickHouse服務和MySQL網路互通;

需要在機器上部署java8,配置JAVA_HOME、PATH等環境變數;

基本概念:

image.png

1. Canal-Server組件部署

Canal-Server的主要作用是訂閱binlog資訊并決議和定義instance相關資訊,建議每個Canal-Server行程對應一個MySQL實體;

1)下載canal.deployer-1.1.4.tar.gz,解壓

2)修改組態檔conf/canal.properties,需要關注的配置如下:

...

# 埠相關資訊,如果同一臺機器部署多個行程需要修改

canal.port = 11111

canal.metrics.pull.port = 11112

canal.admin.port = 11110

...

# 服務模式

canal.serverMode = tcp

...

# Kafka地址

canal.mq.servers = 172.21.48.11:9092

# 使用訊息佇列時 這兩個值必須為true

canal.mq.flatMessage = true

canal.mq.flatMessage.onlyData = https://www.cnblogs.com/tencentdb/p/true

...

# instance串列,conf目錄下必須有同名的目錄

canal.destinations = example,example2

3)配置instance

可以參照example新增新的instance,主要修改組態檔conf/${instance_name}/instance.properties檔案,

樣例1: 同步某個資料庫的以XX前綴開頭的表

訂閱 172.21.48.35的MySQL的testdb資料庫中的以tb_開頭的表的資料變更(例如tb_20200801 、 tb_20200802等),主要的步驟如下:

步驟1:創建example2實體:cddeployer/conf && cp -r example example2

步驟2:修改deployer/conf/example2/instance.properties檔案

...

# 上游MySQL實體地址

canal.instance.master.address=172.21.48.35:3306

...

# 同步賬戶資訊

canal.instance.dbUsername=canal

canal.instance.dbPassword=canal

...

# 過濾資料庫名稱和表名

canal.instance.filter.regex=testdb\\.tb_.*,

步驟3:在conf/canal.properties中修改 canal.destinations ,新增example2

樣例2: 同步多個資料庫的以XX前綴開頭的表,且輸出到Kafka

訂閱 172.21.48.35的MySQL的empdb_0資料庫的employees_20200801表,empdb_1資料庫的employees_20200802表,并且資料寫入Kafka;

步驟1:創建example2實體:cddeployer/conf && cp -r example example3

步驟2:修改deployer/conf/example3/instance.properties檔案

...

# 上游MySQL實體地址

canal.instance.master.address=172.21.48.35:3306

...

# 同步賬戶資訊

canal.instance.dbUsername=canal

canal.instance.dbPassword=canal

...

# 過濾資料庫名稱和表名

canal.instance.filter.regex=empdb_.*\\.employees_.*

...

# Kafka的topic名稱和匹配的規則

canal.mq.dynamicTopic=employees_topic:empdb_.*\\.employees_.*

canal.mq.partition=0

 

# Kafka topic的磁區數目(即partition數目)

canal.mq.partitionsNum=3

 

# 根據employees_開頭的表中的 emp_no欄位來進行資料hash,分布到不同的partition

canal.mq.partitionHash=empdb_.*\\.employees_.*:emp_no

步驟3:在Kafka中新建topic employees_topic,指定磁區數目為3

步驟4:在conf/canal.properties中修改 canal.destinations ,新增example3;修改服務模式為kafka,配置kafka相關資訊;

# 服務模式

canal.serverMode = kafka

...

# Kafka地址

canal.mq.servers = 172.21.48.11:9092

# 使用訊息佇列時 這兩個值必須為true

canal.mq.flatMessage = true

canal.mq.flatMessage.onlyData = https://www.cnblogs.com/tencentdb/p/true

...

# instance串列,conf目錄下必須有同名的目錄

canal.destinations =  example,example2,example3

2. Canal-Adapter組件部署(只針對方案一)

Canal-Adapter的主要作用是通過JDBC介面寫入ClickHouse資料,可以配置多個表的寫入;

1)下載canal.adapter-1.1.4.tar.gz,解壓;

2)在lib目錄下新增clickhouse驅動jar包及httpclient的jar包 httpcore-4.4.13.jar、httpclient-4.3.3.jar、clickhouse-jdbc-0.2.4.jar;

3)修改組態檔conf/application.yml檔案,修改canalServerHost、srcDataSources、canalAdapters的配置;

server:

   port: 8081

spring:

   jackson:

     date-format: yyyy-MM-dd HH????ss

     time-zone: GMT+8

     default-property-inclusion: non_null

 

canal.conf:

   mode: tcp

   canalServerHost: 127.0.0.1:11111   # canal-server的服務地址

   batchSize: 500

   syncBatchSize: 1000

   retries: 0

   timeout:

   accessKey:

  secretKey:

  #  MySQL的配置,修改用戶名密碼及制定資料庫

   srcDataSources:

     defaultDS:

       url: jdbc:mysql://172.21.48.35:3306

       username: root

       password: yourpasswordhere

   canalAdapters:

  -  instance: example

     groups:

     - groupId: g1

       outerAdapters:

       - name: logger

       - name: rdb

         key: mysql1

         # clickhouse的配置,修改用戶名密碼資料庫

         properties:

           jdbc.driverClassName: ru.yandex.clickhouse.ClickHouseDriver

           jdbc.url: jdbc:clickhouse://172.21.48.18:8123

           jdbc.username: default

           jdbc.password:

4)修改組態檔conf/rdb/mytest_user.yml檔案

dataSourceKey: defaultDS

destination: example

groupId: g1

outerAdapterKey: mysql1

concurrent: true

dbMapping:

  database:  testdb

   mirrorDb: true

上述的組態檔中,由于開啟了mirrorDb: true,目的端的ClickHouse必須有相同的資料庫名和表名,

樣例1:源資料庫與目標資料庫名字不同,源表名與目標表名不同

修改adapter的conf/rdb/mytest_user.yml組態檔,指定源資料庫和目標資料庫

dataSourceKey: defaultDS

destination: example

groupId: g1

outerAdapterKey: mysql1

concurrent: true

dbMapping:

   database: source_database_name

   table: source_table

   targetTable: destination_database_name.destination_table

   targetColumns:

     id:

     name:

  commitBatch:  3000 # 批量提交的大小


樣例2:多個源資料庫表寫入目的端的同一張表

在conf/rdb 目錄配置多個yml檔案,分別指明不同的table名稱,

Kafka 服務配置

一、調整合理的producer引數

確認Canal-Server里的canal.properties檔案,重要引數見下表;

image.png

二、新建相關的topic名稱

根據Canal-Server里instance里組態檔instance.properties,注意磁區數目與canal.mq.partitionsNum 保持一致;

partition數目需要考慮以下因素:

  1. 上游的MySQL的資料量,原則上資料寫入量越大,應該分配更多的partition數目;

  2. 考慮下游ClickHouse的實體數目,topic的partition磁區總數 最好 不大于 下游ClickHouse的總實體數目,保證每個ClickHouse實體都能至少分配到一個partition;

ClickHouse服務配置

根據上游MySQL實體的表的schema新建資料表;

引入Kafka時需要額外新建Engine=Kafka的外表以及相關的物化視圖表;

建議:

  1. 為每個外表新增不同的 kafka_group_name,防止相互影響;

  2. 設定kafka_skip_broken_messages 引數為合理值,遇到無法決議資料會跳過;

  3. 設定合理的kafka_num_consumers值,最好保證所有ClickHouse實體該值的總和大于 topic的partition數目;

新建相關的分布式查詢表;

服務啟動

啟動相關的Canal組件行程;

  1. canal-server: sh bin/startup.sh

  2. canal-adapter: sh bin/startup.sh

在MySQL中插入資料,觀察日志是否可以正常運行;

如果使用Kafka,可以通過kafka-console-consumer.sh腳本觀察binlog資料決議;

觀察ClickHouse資料表中是否正常寫入資料;

實際案例

需求:實時同步MySQL實體的empdb_0.employees_20200801表和empdb_1.employees_20200802資料表

方案:使用方案二

環境及引數:

MySQL地址 172.21.48.35:3306
CKafka地址 172.21.48.11:9092
Canal instance名稱 employees
Kafka目的topic employees_topic

1.在MySQL新建相關表

# MySQL表的建表陳述句

CREATE DATABASE `empdb_0`;

CREATE DATABASE `empdb_1`;

 

CREATE TABLE  `empdb_0`.`employees_20200801` (

   `emp_no` int(11) NOT NULL,

   `birth_date` date NOT NULL,

   `first_name` varchar(14) NOT NULL,

   `last_name` varchar(16) NOT NULL,

   `gender` enum('M','F') NOT NULL,

   `hire_date` date NOT NULL,

   PRIMARY KEY (`emp_no`)

);

 

CREATE TABLE  `empdb_1`.`employees_20200802` (

   `emp_no` int(11) NOT NULL,

   `birth_date` date NOT NULL,

   `first_name` varchar(14) NOT NULL,

   `last_name` varchar(16) NOT NULL,

   `gender` enum('M','F') NOT NULL,

   `hire_date` date NOT NULL,

   PRIMARY KEY (`emp_no`)

);

2. Canal-Server配置

步驟1. 修改conf/canal.properties檔案

canal.serverMode = kafka

...

canal.destinations = example,employees

...

canal.mq.servers = 172.21.48.11:9092

canal.mq.retries = 0

canal.mq.batchSize = 16384

canal.mq.maxRequestSize = 1048576

canal.mq.lingerMs = 100

canal.mq.bufferMemory = 33554432

canal.mq.canalBatchSize = 50

canal.mq.canalGetTimeout = 100

canal.mq.flatMessage = true

canal.mq.flatMessage.onlyData = https://www.cnblogs.com/tencentdb/p/true

canal.mq.compressionType = none

canal.mq.acks = all

canal.mq.producerGroup = cdbproducer

canal.mq.accessChannel = local

...

步驟2. 新增employees實體,修改employees/instances.properties配置

...

canal.instance.master.address=172.21.48.35:3306

...

canal.instance.dbUsername=canal

canal.instance.dbPassword=canal

...

canal.instance.filter.regex=empdb_.*\\.employees_.*

...

canal.mq.dynamicTopic=employees_topic:empdb_.*\\.employees_.*

canal.mq.partition=0

canal.mq.partitionsNum=3

canal.mq.partitionHash=empdb_.*\\.employees_.*:emp_no

3. Kafka配置

4. 新增topic employees_topic,磁區數為3

5. ClickHouse建表

CREATE DATABASE testckdb ON CLUSTER  default_cluster;

 

CREATE TABLE IF NOT EXISTS  testckdb.ck_employees ON CLUSTER default_cluster (

   `emp_no` Int32,

   `birth_date` String,

   `first_name` String,

   `last_name` String,

   `gender` String,

   `hire_date` String

) ENGINE=MergeTree() ORDER BY (emp_no)

SETTINGS index_granularity = 8192;

 

 

CREATE TABLE IF NOT EXISTS  testckdb.ck_employees_stream ON CLUSTER default_cluster (

   `emp_no` Int32,

   `birth_date` String,

   `first_name` String,

   `last_name` String,

   `gender` String,

   `hire_date` String

) ENGINE = Kafka()

SETTINGS

   kafka_broker_list = '172.21.48.11:9092',

   kafka_topic_list = 'employees_topic',

   kafka_group_name = 'employees_group',

   kafka_format = 'JSONEachRow',

   kafka_skip_broken_messages = 1024,

  kafka_num_consumers  = 1;

 

 

CREATE MATERIALIZED VIEW IF NOT EXISTS  testckdb.ck_employees_mv ON CLUSTER default_cluster TO testckdb.ck_employees(

   `emp_no` Int32,

   `birth_date` String,

   `first_name` String,

   `last_name` String,

   `gender` String,

  `hire_date`  String

) AS SELECT

   `emp_no`,

   `birth_date`,

   `first_name`,

   `last_name`,

   `gender`,

   `hire_date`

FROM

   testckdb.ck_employees_stream;

 

CREATE TABLE IF NOT EXISTS  testckdb.ck_employees_dis ON CLUSTER default_cluster AS testckdb.ck_employees  

ENGINE=Distributed(default_cluster,  testckdb, ck_employees);

6. 啟動Canal-Server服務

MySQL實體上游插入資料,觀察資料是否在Canal-Server決議正常,是否在ClickHouse中完成同步,

本文由博客一文多發平臺 OpenWrite 發布!

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

標籤:其它

上一篇:誰是銀行核心資料庫的破局者?

下一篇:深入淺出之mysql索引--上

標籤雲
其他(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