主頁 > 資料庫 > Spark Streaming 編程入門指南

Spark Streaming 編程入門指南

2020-09-12 19:13:17 資料庫

Spark Streaming 是核心Spark API的擴展,可實作實時資料流的可伸縮,高吞吐量,容錯流處理,可以從許多資料源(例如Kafka,Flume,Kinesis或TCP sockets)中提取資料,并且可以使用復雜的演算法處理資料,這些演算法用高級函式表示,如map、reduce、join和window,最后,可以將處理后的資料推送到檔案系統,資料庫和實時儀表板,實際上,可以在資料流上應用Spark的機器學習和圖形處理演算法,

在內部,它的作業方式如下, Spark Streaming接收實時輸入資料流,并將資料分成批次,然后由Spark引擎進行處理,以生成批次的最終結果流,

Spark Streaming提供了一種高級抽象,稱為離散流或DStream,它表示連續的資料流,DStreams可以從Kafka、Flume和Kinesis等源的輸入資料流創建,也可以通過在其他DStreams上應用高級操作創建,在內部,DStream表示為RDDs序列,

1. 了解Spark

Apache Spark 是一個用于大規模資料處理的統一分析引擎

    

特性:

將作業負載運行速度提高100倍

Apache Spark使用最新的DAG調度程式,查詢優化器和物理執行引擎,為批處理資料和流資料提供了高性能,

易用

可以使用Java,Scala,Python,R和SQL快速撰寫應用程式

通用

結合SQL、流和復雜的分析

Spark為包括SQL和DataFrames,用于機器學習的MLlib,GraphX和Spark Streaming在內的一堆庫提供支持,您可以在同一應用程式中無縫組合這些庫,

到處運行

Spark可在Hadoop,Apache Mesos,Kubernetes,獨立或云中運行,它可以訪問各種資料源

可以在EC2,Hadoop YARN,Mesos或Kubernetes上使用其獨立集群模式運行Spark,訪問HDFS,Alluxio,Apache Cassandra,Apache HBase,Apache Hive和數百種其他資料源中的資料,

2. 入門案例

統計單詞出現的次數,這個例子在Hadoop中用MapReduce也寫過,

JavaStreamingContext是java版的StreamingContext,它是Spark Streaming功能的主要入口點,它提供了從輸入源創建JavaDStream和JavaPairDStream的方法,可以使用context.sparkContext訪問內部的org.apache.spark.api.java.JavaSparkContext,在創建和轉換DStream之后,可以分別使用context.start()和context.stop()啟動和停止流計算,

 1 public static void main(String[] args) throws InterruptedException {
 2     // Create a local StreamingContext with two working thread and batch interval of 1 second
 3     SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount");
 4     JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1));
 5 
 6     // Create a DStream that will connect to hostname:port, like localhost:9999
 7     JavaReceiverInputDStream<String> lines = jssc.socketTextStream("localhost", 9999);
 8 
 9     // Split each line into words
10     JavaDStream<String> words = lines.flatMap(x -> Arrays.asList(x.split(" ")).iterator());
11 
12     // Count each word in each batch
13     JavaPairDStream<String, Integer> pairs = words.mapToPair(s -> new Tuple2<>(s, 1));
14     JavaPairDStream<String, Integer> wordCounts = pairs.reduceByKey((i1, i2) -> i1 + i2);
15 
16     // Print the first ten elements of each RDD generated in this DStream to the console
17     wordCounts.print();
18 
19     // Start the computation
20     jssc.start();
21     // Wait for the computation to terminate
22     jssc.awaitTermination();
23 }

3. 基本概念

3.1. Maven依賴

1 <groupId>org.apache.spark</groupId>
2     <artifactId>spark-streaming_2.12</artifactId>
3     <version>2.4.5</version>
4     <scope>provided</scope>
5 </dependency>

為了從其它資料源獲取資料,需要添加相應的依賴項spark-streaming-xyz_2.12,例如:

1 <dependency>
2     <groupId>org.apache.spark</groupId>
3     <artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
4     <version>2.4.5</version>
5 </dependency>

3.2. 初始化StreamingContext

為了初始化一個Spark Streaming程式,必須創建一個StreamingContext物件,該物件是所有Spark Streaming功能的主要入口點, 

我們可以從SparkConf物件中創建一個JavaStreamingContext物件

1 import org.apache.spark.SparkConf;
2 import org.apache.spark.streaming.Duration;
3 import org.apache.spark.streaming.api.java.JavaStreamingContext;
4 
5 SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
6 JavaStreamingContext ssc = new JavaStreamingContext(conf, new Duration(1000)); 

appName 引數是顯示在集群UI上的你的應用的名字

master 引數是一個Spark、 Mesos 或 YARN 集群URL,或者也可以是一個特定的字串“local[*]”表示以本地模式運行,實際上,當在集群上運行時,肯定不希望對在程式中對master進行硬編碼,而希望通過spark-submit啟動應用程式并在其中接收它,然而,對于本地測驗,你可以傳“local[*]”來運行Spark Streaming,

還可以從一個已存在的JavaSparkContext中創建一個JavaStreamingContext物件

1 import org.apache.spark.streaming.api.java.*;
2 
3 JavaSparkContext sc = ...   //existing JavaSparkContext
4 JavaStreamingContext ssc = new JavaStreamingContext(sc, Durations.seconds(1));

在定義完context之后,必須做以下事情:

  1. 通過創建input DStreams來定義input sources
  2. 通過對DStreams應用transformation(轉換)和output(輸出)操作來定義流計算
  3. 用streamingContext.start()來開始接收資料并處理它
  4. 用streamingContext.awaitTermination()等待處理停止(手動停止或由于任何錯誤)
  5. 用streamingContext.stop()可以手動停止

需要記住的點:

  • 一旦啟動背景關系,就無法設定新的流計算或將其添加到該流計算中
  • 背景關系一旦停止,就無法重新啟動
  • 一個JVM中只能同時激活一個StreamingContext
  • StreamingContext中的stop()也會停止SparkContext,但如果要僅停止StreamingContext的話,設定stop(false)
  • 只要在創建下一個StreamingContext之前停止了上一個StreamingContext(不停止SparkContext),就可以將SparkContext重用于創建多個StreamingContext

3.3. DStreams(離散流)

Discretized StreamDStream 是Spark Streaming提供的基本抽象,它表示一個連續的資料流,可以是從源接收的輸入資料流,也可以是通過轉換輸入流生成的已處理資料流,在內部,DStream由一系列連續的RDD表示,這是Spark對不變的分布式資料集的抽象,DStream中的每個RDD都包含來自特定間隔的資料,如下圖所示, 

在DStream上執行的任何操作都轉換為對基礎RDD的操作,例如,最簡單的將一行句子轉換為單詞的例子中,flatMap操作應用于行DStream中的每個RDD,以生成單詞DStream的RDD,如下圖所示:

 

3.4. Input DStreams 和 Receivers

Input DStream是表示從源接收的輸入資料流,在上圖中,lines是輸入DStream,因為它表示從netcat服務器接收的資料流,每一個輸入DStream都關聯著一個Receiver物件,該物件從源接收資料并將其存盤在Spark的記憶體中以進行處理,

Spark Streaming提供了兩類內置的streaming源:

  • Basic sources :直接在StreamingContext API中可用的源,例如,檔案系統和socket連接
  • Advanced sources :像Kafka,Flume,Kinesis等這樣的源,可通過額外的程式類獲得 

如果要在流應用程式中并行接收多個資料流,則可以創建多個輸入DStream,這將創建多個Receiver(接收器),這些接收器將同時接收多個資料流,重要的是要記住,必須為Spark Streaming應用程式分配足夠的內核(或執行緒,如果在本地運行),以處理接收到的資料以及運行接收器,

需要記住的點:

  • 在本地運行Spark Streaming程式時,請勿使用“ local”或“ local [1]”作為master URL,這兩種方式均意味著僅一個執行緒將用于本地運行任務,如果使用的是基于接收器的輸入DStream(例如套接字,Kafka,Flume等),則將使用單個執行緒來運行接收器,而不會留下任何執行緒來處理接收到的資料, 因此,在本地運行時,請始終使用“ local [n]”作為主URL,其中n>要運行的接收器數 
  • 為了將邏輯擴展到在集群上運行,分配給Spark Streaming應用程式的內核數必須大于接收器數, 否則,系統將接收資料,但無法處理它,

Basic Sources 

為了從檔案中讀取資料,可以通過StreamingContext.fileStream[KeyClass, ValueClass, InputFormatClass]來創建一個DStream

例如:streamingContext.textFileStream(dataDirectory);

Spark Streaming將監視目錄dataDirectory并處理在該目錄中創建的所有檔案

  • 可以監視一個簡單的目錄,例如:"hdfs://namenode:8040/logs/2017/*",在這里,DStream將由目錄中與模式匹配的所有檔案組成,也就是說:它是目錄的模式,而不是目錄中的檔案,
  • 所有檔案必須使用相同的資料格式
  • 根據檔案的修改時間而不是創建時間,將其視為時間段的一部分
  • 一旦已經被處理后,在當前視窗中對檔案的更改不會導致重新讀取該檔案,即:更新被忽略,

3.5. Transformations on DStreams

對DStreams做轉換,與RDD相似,轉換允許修改輸入DStream中的資料,DStream支持普通Spark RDD上可用的許多轉換,一些常見的方法如下:

map(func) 通過將源DStream的每個元素傳遞給函式func來處理并回傳新的DStream
flatMap(func) 與map類似,但是每個輸入項可以映射到0個或多個輸出項
filter(func) 過濾
repartition(numPartitions)  通過創建更多或更少的磁區來更改此DStream中的并行度
union(otherStream)  將源DStream和另一個DStream中的元素合并在一起,回傳一個新的DStream,相當于SQL中的union 
count() 回傳元素的個數
reduce(func)  通過使用函式func(接受兩個引數并回傳一個)來聚合源DStream的每個RDD中的元素,從而回傳一個單元素RDD的新DStream, 
countByValue() 


在型別為K的元素的DStream上呼叫時,回傳一個新的(K,Long)形式的DStream,其中每個鍵的值是其在源DStream的每個RDD中的頻率,

 
reduceByKey(func, [numTasks])  在一個(K,V)形式的DStream上呼叫時,回傳一個新的(K,V)DStream,其中使用給定的reduce函式匯總每個鍵的值
join(otherStream, [numTasks])  在(K,V)和(K,W)兩個DStream上呼叫時,回傳一個新的(K,(V,W))DStream 
cogroup(otherStream, [numTasks])  在(K,V)和(K,W)DStream上呼叫時,回傳一個新的(K,Seq [V],Seq [W])元組的DStream 
transform(func)  通過對源DStream的每個RDD應用RDD-to-RDD函式來回傳新的DStream,這可用于在DStream上執行任意RDD操作,
updateStateByKey(func)  回傳一個新的“state” DStream 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其實,這次操作跟Java Stream很像

Window Operations(視窗操作)

Spark Streaming還提供了視窗計算,可以在資料的滑動視窗上應用轉換,下圖說明了此滑動視窗:

如圖所示,每當視窗在源DStream上滑動時,就會對落入視窗內的源RDD進行操作,以生成視窗DStream的RDD,

任何視窗函式所必須的兩個引數:

  • 視窗的長度
  • 滑到的頻率(或者說時間間隔)

舉個例子,我們來擴展前面的示例,假設我們想要每10秒在資料的最后30秒生成一次單詞次數統計,為此,必須在資料的最后30秒內對(word,1)對的DStream對應用reduceByKey操作,

 1 import org.apache.spark.streaming.Durations;
 2 import org.apache.spark.streaming.api.java.JavaDStream;
 3 import org.apache.spark.streaming.api.java.JavaPairDStream;
 4 import scala.Tuple2;
 5 
 6 
 7 JavaDStream<String> words = lines.flatMap(x -> Arrays.asList(x.split(" ")).iterator());
 8 JavaPairDStream<String, Integer> pairs = words.mapToPair(s -> new Tuple2<>(s, 1));
 9 
10 // Reduce last 30 seconds of data, every 10 seconds
11 JavaPairDStream<String, Integer> windowedWordCounts = pairs.reduceByKeyAndWindow((i1, i2) -> i1 + i2, Durations.seconds(30), Durations.seconds(10));

一些常見的視窗操作如下,所有這些操作均采用上述兩個引數:windowLength和slideInterval

window(windowLength, slideInterval) 回傳基于源DStream的視窗批處理計算的新DStream
countByWindow(windowLength, slideInterval) 回傳流中元素的滑動視窗數
reduceByWindow(func, windowLength, slideInterval) 對視窗內的資料進行聚合操作
reduceByKeyAndWindow(func, windowLength, slideInterval, [numTasks]) 在(K,V)DStream上呼叫時,回傳新的(K,V)DStream,其中使用給定的reduce函式func在滑動視窗中的批處理上匯總每個鍵的值
reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks])  
countByValueAndWindow(windowLength, slideInterval, [numTasks])  

 

 

 

 

 

 

 

 

 

 

 

 

3.6. Output Operations on DStreams

輸出操作允許將DStream的資料輸出到外部系統,例如資料庫或檔案系統,

 

流式應用程式必須24/7全天候運行,因此必須能夠抵抗與應用程式邏輯無關的故障(例如,系統故障,JVM崩潰等),為此,Spark Streaming需要將足夠的資訊檢查點指向容錯存盤系統,以便可以從故障中恢復,檢查點有兩種型別的資料,

  • 元資料檢查點-將定義流計算的資訊保存到HDFS等容錯存盤中,這用于從運行流應用程式的驅動程式的節點的故障中恢復,
  • 資料檢查點-將生成的RDD保存到可靠的存盤中 

 

完整代碼:

 1 package com.example.demo;
 2 
 3 import org.apache.spark.SparkConf;
 4 import org.apache.spark.streaming.Durations;
 5 import org.apache.spark.streaming.api.java.JavaDStream;
 6 import org.apache.spark.streaming.api.java.JavaPairDStream;
 7 import org.apache.spark.streaming.api.java.JavaStreamingContext;
 8 import scala.Tuple2;
 9 
10 import java.util.Arrays;
11 import java.util.regex.Pattern;
12 
13 /**
14  * @author ChengJianSheng
15  */
16 public class JavaWordCount {
17 
18     private static final Pattern SPACE = Pattern.compile(" ");
19 
20     public static void main(String[] args) {
21         if (args.length < 1) {
22             System.err.println("Usage: JavaWordCount <file>");
23             System.exit(1);
24         }
25 
26         SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("JavaWordCount");
27         JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1));
28 
29         JavaDStream<String> lines = jssc.textFileStream(args[0]);
30         JavaDStream<String> words = lines.flatMap(line -> Arrays.asList(SPACE.split(line)).iterator());
31         JavaPairDStream<String, Integer> ones = words.mapToPair(word -> new Tuple2<>(word, 1));
32         JavaPairDStream<String, Integer> counts = ones.reduceByKey((i1, i2) -> i1 + i2);
33         counts.print();
34 
35         /*
36         JavaStreamingContext jsc = new JavaStreamingContext(conf, Durations.seconds(1));
37         JavaDStream<String> textFileStream = jsc.textFileStream("/data");
38         textFileStream.flatMap(line->Arrays.asList(line.split(" ")).iterator())
39                 .mapToPair(word->new Tuple2<>(word, 1))
40                 .reduceByKey((a,b)->a+b)
41                 .print();
42         jsc.start();
43         */
44     }
45 }

4. Docs

https://spark.apache.org/ 

https://spark.apache.org/docs/latest/streaming-programming-guide.html 

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

標籤:大數據

上一篇:已建立好存盤程序,在運行時提示:如正文圖片

下一篇:portlist.ini

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