主頁 > 資料庫 > Impala基礎知識

Impala基礎知識

2020-12-27 10:21:36 資料庫

概述

基于Hive的大資料實時分析查詢引擎,

Hive適合于長時間的批處理查詢分析,而Impala適合于實時互動式SQL查詢,

建表陳述句

建表陳述句中的location指向實際資料的路徑;
了解一個表的基本類別可以通過show create table命令;
洗掉impala的一行資料:不是delete

基本概念

元資料與資料

元資料是記錄資料的資料,Impala的資料就是檔案,而元資料是記錄檔案存在什么位置,多少個,大小,時間等,

重繪

invalidate metadata和refresh
refresh輕量級,適用于資料更新(不是Impala途徑增加或者洗掉資料)的場景;
invalidate metadata,適用于表結構發生改變(非Impala途徑創建或者修改表結構);

統計資訊

收集統計資訊:compute stats db.table
查看表統計資訊:show table stats db.table
查看欄位統計資訊:show column stats db.table

用途:
join query缺少統計資訊時,可能會生成錯誤的執行計劃,查詢緩慢;

join

join演算法有兩類:

  1. hash join:對于等值join,Impala將采用hash的方式處理,具體又分兩種策略:broadcast 和 Shuffle,
    1. broadcast join 非常適合右表是小表的情形,Impala先將右表復制到各個節點,再和左表做join
    2. shuffle join:亦partitioned join,適合大表和大表關聯,partitioned join 和右表的 partition 沒有直接關系,Impala會將右表打散成N份,發送到左表所在的節點,然后join;有點類似于mapreduce中的shuffle
  2. nested loop join:針對非等值join,Impala將使用 nested loop join,這時不能設定 SHUFFLE/BROADCAST hint,也不能使用 spill disk 功能,Impala的非等值join的效率較低,Vertica的效率非常高,Hive直接不支持

broadcast vs shuffle

broadcast,廣播連接,Impala默認方式,大表一定要放在左邊,因為impala在廣播右側表,所有右側表會復制到需要右側表進行聯接的所有節點,右側的表被認為比左側的表小,并且它的內容被發送到查詢涉及到的其他節點上,

在join后面加[shuffle],將broadcast join轉換為shuffle join,

替代的技術稱作分割連接(partitioned join,與磁區表無關),更適用于近乎相同大小的大型表的連接,每一個表的部分內容被發送到對應的其他節點,然后這些行的子集可以并行處理,廣播和磁區連接的選擇仍然依賴于連接中所有表的可用的、使用 COMPUTE STATS 陳述句的統計資訊,

Impala join查詢最簡單的優化手段就是通過使用compute stats來收集join中每張表的統計資訊,然后由Impala根據表的大小、列的唯一值數目等來自動優化查詢,為了更加精確地獲取每張表的統計資訊,每次表的資料變更時(如執行insert、load data、add partition、或drop partition等)都要重新執行一遍compute stats,

如果join查詢中表的統計資訊不全或者Impala選擇的join順序不是最優時,你可以在select [distinct 、all]之后指定straight_join來覆寫掉impala的join順序如:

select straight_join x
from medium join small join (select * from big where c1 < 10) as big
where medium.id = small.id
and small.id = big.id;

select distinct straight_join x
from medium join small join (select * from big where c1 < 10) as big
where medium.id = small.id
and small.id = big.id;
這樣Impala就會使用查詢陳述句中表的順序來指導join的處理,

當使用STRAIGHT_JOIn技術時,你必須手動指定join查詢中表的順序而不是依賴于Impala優化器,Impala優化器使用特殊的手段來估算join中每個階段的結果集大小,而對于手動指定順序來說,可以根據如下方式開始,然后再手動調節來達到最優:

首先指定最大的表,此表一般保存于磁盤中
指定最小的表,第二張表、第三張表等等之后的表都是通過網路傳輸的,你需要對這些結果集進行裁剪處理以降低傳輸資料量
指定次小表,再到次次小表等
例如:如果你的表的大小如下:BIG、MEDIUM、SMALL和TINY,那么你的順序應該如此:BIG join TINY join SMALL join MEDIUM,

Impala查詢優化器根據表的絕對或者相對大小來選擇不同技術來執行join查詢,默認情況下是 broadcast join,右邊的表都是小于左邊的表,右邊的表的內容會被分發到其他的查詢節點中,

另一種技術就是partitioned join,這種技術更加適用于大小差不多大的大表join,使用這種方式的話,每張表中的磁區都會把資料分發到其他節點中,這樣就可以這些資料子集就可以并發處理了, broadcast或者partition join的選擇是根據compute stats采集到的可用統計指標來衡量的,對于指定查詢陳述句,可以通過執行EXPLAIN就可以查看選用的是哪個join策略,

統計指標不可用時join如何查詢
?? 當join中表或者列的統計指標不可用時,Impala將無統計指標的表認為統計指標都為0,這些表都將作為右表處理,

外部表

創建表的時候可以通過指定location來指定表檔案的存放路徑,如果不指定的話,默認是將資料存放在/user/hive/warehouse/庫名下,
未被external修飾的表是內部表(managed table),被external修飾的是外部表(external table)

區別:

  1. 內部表的資料是由Hive自身管理的,外部表的資料是由HDFS管理的;
  2. 洗掉內部表會洗掉存盤在hive元資料庫的元資料和存盤在HDFS的檔案資料;洗掉外部表只洗掉元資料不洗掉存盤的資料;
  3. 兩者都可以在建表的時候指定location,指定資料檔案的存放位置;如果不指定的話,默認都是在/user/hive/warehouse/目錄下(這個目錄是可以在組態檔中修改的),
  4. 兩者的load 操作都會移動資料

磁區表

存盤格式

通常對于大資料量來說,Parquet檔案格式是最佳的

運算子

Impala特有運算子

ILIKE:忽略大小寫的 like 運算子
REGEXP:正則匹配運算子
RLIKE:同 REGEXP 運算子
IREGEXP:忽略大小寫的正則匹配符
IS DISTINCT FROM:判斷前后兩個運算式是否不相等,和<>運算子類似,但 null IS DISTINCT FROM null 回傳 false
IS not DISTINCT FROM:判斷前后兩個運算式是否相等,和=運算子類似,唯一不同的是,處理 null 時候,null IS not DISTINCT FROM null 結果為 ture

例外

set DISABLE_UNSAFE_SPILLS=0/FALSE; #0(FALSE)記憶體運算瀕臨溢位時轉為磁盤運算,1(TRUE)時,當記憶體溢位時直接報記憶體溢位“Memory limit exceeded”錯誤

set mem_limit=-1 #取消記憶體限制;

java.sql.SQLException:memory limit exceeded常見原因:

優化技巧

在優化之前,可先拿到查詢計劃,類似mysql explain查詢計劃,在執行后也可以查看詳細的執行資訊,

查詢計劃

Impala提供三種方式得知查詢計劃

  1. EXPLAIN:獲取執行計劃,而無須真正的執行query
  2. PROFILE:產生一個關于最近一次查詢的底層報告的詳細資訊展示,與EXPLAIN不同,這些資訊只在查詢完成之后才會生成,它顯示每個節點上的物理詳細資訊如:讀取的位元組數,最大記憶體消耗等,
    想要查看一個查詢的物理性能特性的概覽,可以在執行查詢之后立馬在impala-shell中執行PROFILE命令,輸出的資訊中將展示哪個階段耗時最多,以及每一階段估算的記憶體消耗、行數與實際的差異,進行性能分析,可根據這些資訊來確定查詢時I/O密集型,還是CPU密集型,網路是否導致瓶頸,是否某些節點性能差但是其它節點性能好等資訊,
  3. SUMMAY:輸出每一階段的耗時,可以快速地了解查詢的性能瓶頸,SUMMARY輸出也會在PROFILE的頭部輸出的顯示,
    想要了解查詢的詳細性能特征,可以在執行查詢之后立馬在impala-shell中執行PROFILE命令,這些底層的資訊包括記憶體、CPU、I/O以及網路消耗的詳細資訊,只能在一個真實的查詢之后才可用,

EXPLAIN陳述句概述了查詢將執行的邏輯步驟,例如如何在節點間分配作業以及中間結果如何合并為最終結果, 這些你都可以在查詢真正執行之前獲得,你可以使用這些資訊來檢查查詢是否會以某種非高效的方式執行,

explain select ds,count(*) from t_ed_xxxx_newuser_read_feature_n group by ds order by ds;
+----------------------------------------------------------------------------------------------+
| Explain String                                                                               |
+----------------------------------------------------------------------------------------------+
| Max Per-Host Resource Reservation: Memory=9.94MB                                             |
| Per-Host Resource Estimates: Memory=27.00MB                                                  |
|                                                                                              |
| PLAN-ROOT SINK                                                                               |
| |                                                                                            |
| 05:MERGING-EXCHANGE [UNPARTITIONED]                                                          |
| |  order by: ds ASC                                                                          |
| |                                                                                            |
| 02:SORT                                                                                      |
| |  order by: ds ASC                                                                          |
| |                                                                                            |
| 04:AGGREGATE [FINALIZE]                                                                      |
| |  output: count:merge(*)                                                                    |
| |  group by: ds                                                                              |
| |                                                                                            |
| 03:EXCHANGE [HASH(ds)]                                                                       |
| |                                                                                            |
| 01:AGGREGATE [STREAMING]                                                                     |
| |  output: sum_init_zero(default.t_ed_xxxx_newuser_read_feature_n.parquet-stats: num_rows) |
| |  group by: ds                                                                              |
| |                                                                                            |
| 00:SCAN HDFS [default.t_ed_xxxx_newuser_read_feature_n]                                    |
|    partitions=372/372 files=2562 size=15.15GB

自底向上讀取EXPLAIN的輸出:
00階段: 顯示了底層的詳細資訊,如:掃描的表,表的磁區數,檔案數以及檔案大小等資訊,根據這些資訊,你可以估算大概的耗時
01階段: 聚合操作SUM并行地在不同的節點上執行
03階段: 將01階段的結果進行傳輸
04階段: 將SUM結果進行合并
02階段: 排序操作并行地在不同的節點中進行
05階段: 排序結果合并,并且輸出
EXPLAIN也會在PROFILE結果的頭部輸出,

SUMMARY命令可以輸出每一階段的耗時,可以快速地了解查詢的性能瓶頸,與PROFILE輸出一樣,它只能在查詢之后才可用,并且顯示實際的時間消耗,SUMMARY輸出也會在PROFILE的頭部輸出的顯示,

select ds,count(*) from t_ed_xxxx_newuser_read_feature_n group by ds order by ds;
summary;
+---------------------+--------+----------+----------+-------+------------+----------+---------------+--------------------------------------------+
| Operator            | #Hosts | Avg Time | Max Time | #Rows | Est. #Rows | Peak Mem | Est. Peak Mem | Detail                                     |
+---------------------+--------+----------+----------+-------+------------+----------+---------------+--------------------------------------------+
| 05:MERGING-EXCHANGE | 1      | 3.20s    | 3.20s    | 372   | 372        | 0 B      | 0 B           | UNPARTITIONED                              |
| 02:SORT             | 51     | 517.22us | 2.54ms   | 372   | 372        | 6.02 MB  | 6.00 MB       |                                            |
| 04:AGGREGATE        | 51     | 1.75ms   | 7.85ms   | 372   | 372        | 2.12 MB  | 10.00 MB      | FINALIZE                                   |
| 03:EXCHANGE         | 51     | 2.91s    | 3.10s    | 2.44K | 372        | 0 B      | 0 B           | HASH(ds)                                   |
| 01:AGGREGATE        | 51     | 135.29ms | 474.62ms | 2.44K | 372        | 2.03 MB  | 10.00 MB      | STREAMING                                  |
| 00:SCAN HDFS        | 51     | 1.08s    | 2.58s    | 2.56K | 96.53M     | 1.05 MB  | 1.00 MB       | default.t_ed_xxxx_newuser_read_feature_n |

PROFILE和SUMMAY區別
profile:輸出底層資訊計劃
summary:查看查詢時間及占用記憶體
區別不重要,都可用,

除了查詢計劃,可以

  1. 為資料存盤選擇合適的檔案格式(如Parquet),通常對于大資料量來說,Parquet檔案格式是最佳
  2. 防止入庫時產生大量的小檔案(insert ... values會產生大量小檔案,應該避免使用)
    在impala外生成資料時,最好是text格式或Avro,可逐行的構建檔案,到impala后再通過簡單的insert ... select陳述句將其轉換為Parquet格式.
  3. 根據實際的資料量大小選擇合適的磁區粒度
    合適的磁區策略可以對資料進行物理拆分,查詢時可以忽略掉無用資料,提高查詢效率,通常建議磁區數量在3萬以下(太多的磁區也會造成元資料管理的性能下降)
  4. 為磁區key選擇最小的整數型別
    雖然使用string型別也可以作為磁區key,因為磁區key最后都是作為HDFS目錄使用,但是使用最小的整數型別作為磁區key可以降低記憶體消耗
  5. 選擇合適的Parquet塊大小
    默認情況下,Impala的insert ... select陳述句創建的Parquet檔案都是每個磁區256M(在2.0之后改為1G),通過Impala寫入的Parquet檔案只有一個塊,因而只能被一個機器當作一個單元進行處理,如果在你的Parquet表中只有一個或者幾個磁區,或者一個查詢只能訪問一個磁區,那么你的性能會非常慢,因為沒有足夠的資料來利用Impala并發分布式查詢的優勢,
  6. 在追求性能或者大資料量查詢時,要先獲取所需要的表的統計指標(如執行compute stats)
  7. 減少傳輸到client端的資料量,如:使用聚合(如 count、sum、max等)、過濾(如WHERE)、LIMIT
    結果集禁止使用美化格式進行展示(在通過impala-shell展示結果時,添加這些可選引數:-B, --output_delimiter)
  8. 選擇合適的join演算法

具體地:

  1. 最大的表應該放在表清單的最左邊
  2. 多個join的查詢陳述句,應該將選擇性最強的join放在最前面
  3. 定期對表收集統計資訊或在大量DML操作后主動收集統計資訊
  4. 在單一join查詢中,涉及到的資料表個數盡量不要超過4個,不然效率比較低下

COMPUTE STATS

和HIVE的ANALYZE TABLE類似,這個命令主要也是為了優化查詢,加快查詢的速度,本來IMPALA是依靠HIVE的ANALYZE TABLE的,但是這個命令不是很好用同時不穩定,所以IMPALA自己實作了個命令完成相同功能,

有兩類,語法:

# 全量
COMPUTE STATS [db_name.]table_name
# 增量
COMPUTE INCREMENTAL STATS [db_name.]table_name [PARTITION (partition_spec)]

作用:
收集有關表中資料的容量和分布以及所有相關列和磁區的資訊,這些資訊存盤在metastore資料庫中,Impala使用這些資訊來幫助優化查詢,
區別:

參考

Impala性能優化總結
Apache Impala 性能優化

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

標籤:其他

上一篇:事務的特征與隔離級別

下一篇:MySQL學習-子查詢及limit分頁

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