主頁 > 資料庫 > 基于華為云圖引擎GES,使用Cypher子查詢進行圖探索

基于華為云圖引擎GES,使用Cypher子查詢進行圖探索

2023-05-11 08:42:09 資料庫

摘要:本文以華為云圖引擎 GES 為例,來介紹如何使用圖查詢語言 Cypher 表達一些需要做資料區域遍歷的場景,

本文分享自華為云社區《使用 Cypher 子查詢進行圖探索 -- 以華為云圖引擎 GES 為例》,作者:蜉蝣與海,

在圖資料庫 / 圖計算領域,很多查詢可以使用圖查詢語言 Cypher、Gremlin 或者指令式 API 進行表達,如多跳過濾、全域檢索以及對過濾后的結果進行聚集排序等操作,然而有些查詢不是那么容易表達,常常需要對圖中的一組資料去做區域遍歷,例如在社交網路(人 - 人,人 - 興趣,人 - 作業地的關聯網路)場景中,常常涉及以下場景:

  • 朋友推薦:看看小明的朋友的朋友中,哪些不是小明的朋友,進而推薦給小明,
  • 潛在二度人脈分析:選取一組點,每個點代表一個人,在他們朋友的朋友中,統計他們各自有多少不認識的男性朋友和女性朋友,
  • 興趣推薦 A:興趣愛好也是社交網路中的點,看看小明的朋友有哪些興趣愛好(人 - INTEREST - 興趣),從每個朋友的興趣愛好中選取至多 N 個興趣愛好推薦給小明,
  • 興趣推薦 B:看小小明有哪些朋友還沒有錄入興趣愛好,允許小明把自己的興趣愛好推薦給他們,

這些查詢往往只關注圖中的某個區域,對區域進行多跳查詢,且區域上往往有類似下列限制:

  • 數量限制:例如興趣推薦 A 場景中,限制了每個朋友的興趣數目,而不是總數目,
  • 條件限制:例如朋友推薦場景中,“哪些不是小明的朋友” 需要先查詢小明和朋友的朋友間有沒有邊,并將結果作為查詢條件輸入,

在查詢語言 Cypher 中,常常使用子查詢來解決這類問題,本文會以華為云圖引擎 GES 為例(圖引擎版本 >=2.3.6),來介紹如何使用 Cypher 表達上述場景,

注:本文同步發布至華為云 AI Gallery,文中所有代碼皆可以在AI Gallery上運行:【AI Gallery】使用Cypher子查詢進行圖探索 – 以華為云圖引擎GES為例,

閱讀前準備

基礎知識

閱讀前需要了解如下基礎知識

  • Cypher查詢語言的基本結構
    • 關于Cypher樣例陳述句,可以參考:圖引擎服務幫助檔案-業務面API-Cypher-基本操作和兼容性
    • 關于Cypher的文法說明,可以參考openCypher 9官方頁面,
  • Cypher的串列運算式
    • 華為云圖引擎GES支持的串列運算式,可以參考圖引擎服務幫助檔案-業務面API-Cypher-支持的運算式,函式及程序
    • Neo4j 3.5 Cypher Manual - Lists - List Comprehension
    • 對本文中使用到的串列運算式,提前做下述解釋:

下方三個小節會指導如何配置一個 GES 實體并使用 notebook 連接 GES 服務進而做查詢演示,如果你只想了解如何撰寫查詢陳述句,對輸入的 Cypher 查詢獲取回傳結果沒有需求,可以直接跳過下方三個小節,

本文使用的資料集

本教程使用 LDBC-SF0.1 社交資料集中截選的人物關系資料集,資料集可以從此處下載,下載后需要在 GES 中創建圖并匯入資料集,詳細指導流程可參見華為圖引擎檔案 - 快速入門和華為云圖引擎服務 GES 實戰 —— 創圖,

如何呼叫 GES 的 Cypher API

GES 官網幫助檔案上有 GES Cypher 的 API,為了方便用戶呼叫,API 設計為基于 http/https 請求,回應體的設計也兼容的 neo4j 的 json 格式,這里放置一下鏈接執行 Cypher 查詢,呼叫 API 時需要將 Token 輸入請求頭中進行鑒權,有關 Token 的獲取問題請參考業務面 API 認證鑒權,

本文會使用 ges4jupyter 工具腳本進行相關查詢的演示,該腳本中封裝了剛剛提到的鑒權 & Cypher 查詢 API,并對結果進行了一些處理,提供了相關可視化的能力,

本文使用的代碼包

ges4jupyter 是 jupyter 連接 GES 服務的工具檔案,檔案中封裝了使用 GES 查詢的預置條件,包括配置相關引數和對所呼叫 API 介面的封裝,如果你對這些不感興趣,可直接運行而不需要了解細節,這對理解后續具體查詢沒有影響,本文的所有陳述句請求都會訪問一個 GES 實體并得到實際的回應,

import moxing as mox
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.py', 'ges4jupyter.py')
mox.file.copy('obs://obs-aigallery-zc/GES/ges4jupyter/beta/ges4jupyter.html', 'ges4jupyter.html')

GESConfig 的引數都是與呼叫 GES 服務有關的引數,依次為 “公網訪問地址”、“專案 ID”、“圖名”、“終端節點”、“IAM 用戶名”、“IAM 用戶密碼”、“IAM 用戶所屬賬戶名”、“所屬專案”,其獲取方式可參考呼叫 GES 服務業務面 API 相關引數的獲取,這里通過 read_csv_config 方法從組態檔中讀取這些資訊,如果沒有組態檔,可以根據自己的需要補充下列欄位,對于開啟了 https 安全模式的圖實體,引數 port 的值為 443,

from ges4jupyter import GESConfig, GES4Jupyter, read_csv_config
eip = ''
project_id = ''
graph_name = ''
iam_url = ''
user_name = ''
password = ''
domain_name = ''
project_name = ''
port = 80
eip, project_id, graph_name, iam_url, user_name, password, domain_name, project_name, port = read_csv_config('cn_north_4_graph.csv')
config = GESConfig(eip, project_id, graph_name, 
 iam_url = iam_url, 
 user_name = user_name, 
                    password = password, 
 domain_name = domain_name,
 project_name = project_name,
                    port = port)
ges_util = GES4Jupyter(config, True);

首先在 GES 中創建索引,這有利于后續查詢加速,

import time
def wait_job_finish(util, job_id, max_loop):
 job_result = util.get_job(job_id)
 if 'errorCode' not in job_result:
 for i in range(max_loop):
 if job_result['status'] == 'success':
 break
 else:
 time.sleep(1)
 job_result = util.get_job(job_id)
 print(job_result)
job_id = ges_util.build_vertex_index()
wait_job_finish(ges_util, job_id, 100)
job_id = ges_util.build_edge_index()
wait_job_finish(ges_util, job_id, 100)

可以使用下列陳述句查看 schema 資訊:

import time
body = ges_util.generate_schema_structure()
job_id = body["jobId"]
print('開始構造schema結構:')
wait_job_finish(ges_util, job_id, 100)
print('schema結構構造完成')
cypher_result = ges_util.cypher_query("call db.schema()",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result, candidate_title = ['description', 'name'])

如圖是本文使用的資料集的 schema,主要包括下列型別的點邊:

使用子查詢

一般來說,使用 Cypher 查詢朋友的朋友是相對容易的,下列陳述句演示了如何查詢頂點 p367 朋友的朋友,

match (n)-[:KNOWS]->(a)-[:KNOWS]->(b) where id(n)='p367' return distinct b

然而,使用一般的 Cypher 語意,從朋友的朋友中移除所有的朋友,表達朋友推薦場景中的 “朋友的朋友而非我的朋友” 卻很困難,文章如何使用GES進行社交關系考據?—GES查詢能力介紹中,描述了一種常規的查詢陳述句的寫法:

match (n)-[:KNOWS]->(a) where id(n)='p367' with n, collect(a) as neighbor
match (n)-[:KNOWS]->(a)-[:KNOWS]->(b) 
where not (b in neighbor)
return b

由于 cypher 的結果是使用行(Row)組織資料,所有的計算以 “行” 作為單元進行,如果要進行過濾,只能進行行內過濾,所以上述陳述句第一步,先通過 collect (a), 將 “朋友” 這個集合組織到了一行里,而后才能將 collect (a) 作為過濾條件,進行二次查詢,

將子查詢作為查詢條件

在 GES 2.3.6 版本,實作了子查詢能力,支持 Neo4j 中的 SemiApply 算子,該算子支持類似于下列陳述句的運行,使得查詢更為簡潔:

match (n) where id(n)='p367'
match (n)-[:KNOWS*2..2]->(b)
where not (n)-[:KNOWS]->(b)
return id(b) limit 10
cypher_result = ges_util.cypher_query("""
match (n) where id(n)='p367' 
match (n)-[:KNOWS*2..2]->(b) where not (n)-[:KNOWS]->(b) 
return id(b) limit 10""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result)

注意到這里 where 條件后面跟從的不是一個一般的條件運算式,不是大于小于這樣的比較運算,在條件運算 not 后跟隨了一個圖模式(Graph Pattern),整個 where 條件表示 “不存在從頂點 n 連向頂點 b,且 label 為 KNOWS 的邊”,這樣的表達方式使得整條查詢陳述句看起來更為簡潔,   也可以使用 explain 查看其查詢計劃,可以看到是 AntiSemiApply 在發揮作用,這里條件查詢主要包含兩個算子:
  • SemiApply: 用于支撐 “where (n)-[:KNOWS]->(b)” 這樣的條件,表示對應的查詢模式存在,
  • AntiSemiApply:用于支撐 “where not (n)-[:KNOWS]->(b)” 這樣的條件,表示對應的查詢模式不存在,

這兩個算子對每個左子樹生成的結果,都去檢查右子樹是否會 / 不會產生滿足條件的結果,并將右子樹的結果作為過濾條件,輔助左子樹的結果過濾,

通過這兩個算子,即可實作簡單的條件子查詢,

cypher_result = ges_util.cypher_query("""explain 
match (n) where id(n)='p367' 
match (n)-[:KNOWS*2..2]->(b) where not (n)-[:KNOWS]->(b) 
return id(b) limit 10""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result)

antiSemiApply 

子查詢作為條件,也可以用來描述興趣推薦 B 場景:看小小明有哪些朋友還沒有錄入興趣愛好,允許小明把自己的興趣愛好推薦給他們,

match (n:Person) where id(n)='p933' 
match (n)-[r]->(m) where not (m)-[:HAS_INTEREST]-() return id(m)

將子查詢作為中間結果

此外,還可以將子查詢作為中間結果,朋友推薦場景下,cypher 陳述句還可以這么寫:

match (n) where id(n)='p367' 
with [(n)-[:KNOWS*2..2]->(b)|id(b)] as hop2, [(n)-[:KNOWS]->(b)|id(b)] as hop1
return [x in hop2 where not x in hop1|x] limit 10

在這條查詢陳述句中,Graph Pattern 出現在了 with 子句中,用于收集某個點的多跳結果,

另外采用類似的寫法還可以篩選三度好友中 “我不認識的人” 的數目,示例如下:

match (n) where id(n)='p367' 
with [(n)-[:KNOWS*3..3]->(b)|id(b)] as hop3, [(n)-[:KNOWS*1..2]->(b)|id(b)] as hop2
return size([x in hop3 where not x in hop2|x])
cypher_result = ges_util.cypher_query("""
match (n) where id(n)='p367' 
with [(n)-[:KNOWS*3..3]->(b)|id(b)] as hop3,  [(n)-[:KNOWS*1..2]->(b)|id(b)] as hop2 
return size([x in hop3 where not x in hop2|x])""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result, boxHeight=200)

 

同時這種子查詢也可以包含子查詢過濾條件,進行各類統計操作,如上述提到的潛在二度人脈分析:

match (n:Person) where id(n) in ['p367','p13194139534836','p932','p4398046512206','p6597069767359'] 
with n, [(n)-[:KNOWS*2..2]->(m) where not (n)-->(m)|m] as recSet
return id(n) as key, 
 size([x in recSet where x.gender='male']) as maleNumber,
 size([x in recSet where x.gender='female']) as femaleNumber
cypher_result = ges_util.cypher_query("""
match (n:Person) where id(n) in ['p367','p13194139534836','p932','p4398046512206','p6597069767359'] 
with n, [(n)-[:KNOWS*2..2]->(m) where not (n)-->(m)|m] as recSet 
return id(n), size([x in recSet where x.gender='male']),size([x in recSet where x.gender='female'])
""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result, boxHeight=200)

 

下列元素出現在 with 子句中,描述了一個子查詢:

[(n)-[:KNOWS*2..2]->(m) where some-condition|m] as recSet

這里會對每個遍歷到的 n,都進行二跳查詢, 取二跳查詢的末端節點 m,然后組裝成一個串列,

注意到 where 條件中,使用了剛剛提到的條件子查詢:

where not (n)-->(m)

這里條件使用 where 條件,對子查詢的結果進行了過濾,且過濾時,是將一個 Graph Pattern 作為的過濾條件,最后使用豎線進行投影,

在 return 子句中,使用了 Cypher 中 List Comprehension 的語法,進行串列過濾,并獲取大小:

return id(n) as key, 
 size([x in recSet where x.gender='male']) as maleNumber,
 size([x in recSet where x.gender='female']) as femaleNumber

支撐子查詢作為過濾條件的,是 RollUpApply 算子,可以通過 explain 看到其在查詢計劃中發揮價值:

cypher_result = ges_util.cypher_query("""explain 
match (n:Person) where id(n) in ['p367','p13194139534836','p932','p4398046512206','p6597069767359'] 
return n, [(n)-[:KNOWS*2..2]->(m) where not (n)-->(m)|m] as recSet""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result, boxHeight=200)

 

對每個左子樹生成的結果(這里是 (n:Person))都會作為變數輸入,并執行右子樹,將右子樹的結果打包回傳為 list,

此外還可以限制子查詢的數目,對查詢進行 PerNodeLimit(單點跳出限制:每個點每層只能向外跳出限定個數的頂點),

例如興趣推薦 A 場景中,看看小明的朋友有哪些興趣愛好(人 - INTEREST - 興趣),從每個朋友的興趣愛好中選取至多 N 個興趣愛好推薦給小明,

match (n:Person) where id(n)='p367' 
match (n)-[r]->(m) 
return [(m)-[:HAS_INTEREST]-(a)|a][0..3]

 

為了可視化演示效果,可視化時同步列印了 “朋友” 和 “INTEREST” 邊,

同樣的,也可以使用 RollUpApply+Limit 對每跳做 PerNodeLimit,例如統計和小明的朋友有共同興趣愛好的朋友,每跳最多找 3 個點,最后一跳每個點最多找 1 個點:

match (n:Person) where id(n)='p367' 
match (n)-[r]->(m) with m limit 3 
with m,[(m)<-[r1:HAS_INTEREST]-(a)|a][0..3] as interests 
unwind interests as interest 
with interest, [(interest)-[r1:HAS_INTEREST]->(a) where not (a)--(m)|[r1,a]][0..1] as soulMate
return *

 

其他子查詢

使用 with 也可以實作其他子查詢任務,例如上一跳的查詢結果經過 limit 限制后輸入下一跳,成為查詢條件:

match (n:Person) where id(n) in ['p367','p13194139534836','p932','p4398046512206','p6597069767359'] 
with n limit 10
match (m:Person{lastName:n.lastName}) return n.lastName, m.firstName

使用 explain 也可以看到其查詢計劃:

cypher_result = ges_util.cypher_query("""explain 
match (n:Person) where id(n) in ['p367','p13194139534836','p932','p4398046512206','p6597069767359'] 
with n limit 10
match (m:Person{lastName:n.lastName}) return n.lastName, m.firstName""",formats=['row','graph']);
ges_util.format_cypher_result(cypher_result)

 

由于不同的 n,其 n.lastName 的值是不固定的,所以需要針對每個 n,去做 match (m:Person {lastName:n.lastName}) 這樣的查詢,因此需要使用 Apply 子查詢算子支撐這樣的陳述句,

總結

借助子查詢區域遍歷是圖查詢中的常用操作,將子查詢作為條件過濾或者中間結果,可以滿足某些業務場景下的對查詢的區域有限制的訴求,如文中提到的社交網路分析,再如股權穿透網路中穿透層數分析、裝備制造和配置管理(IT 設備管理)領域依賴識別和變更影響分析等,

此外,由于 Cypher 以行的形式組織資料,某些情況下使用子查詢可以節省中間結果產生,加速 Cypher 查詢的執行,

當然,使用更高效的 API(如 GES 產品中有多跳過濾 API) 或者使用非行存的查詢執行引擎也是可選的解決方案,

 

點擊關注,第一時間了解華為云新鮮技術~

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

標籤:其他

上一篇:如何進行MySQL原始碼除錯(一條select陳述句的執行流程)

下一篇:返回列表

標籤雲
其他(158828) Python(38125) JavaScript(25413) Java(18025) C(15225) 區塊鏈(8264) C#(7972) AI(7469) 爪哇(7425) MySQL(7177) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5338) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4570) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1972) 功能(1967) Web開發(1951) HtmlCss(1935) python-3.x(1918) 弹簧靴(1913) C++(1913) xml(1889) PostgreSQL(1875) .NETCore(1860) 谷歌表格(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
最新发布
  • 基于華為云圖引擎GES,使用Cypher子查詢進行圖探索

    摘要:本文以華為云圖引擎 GES 為例,來介紹如何使用圖查詢語言 Cypher 表達一些需要做資料區域遍歷的場景。 本文分享自華為云社區《使用 Cypher 子查詢進行圖探索 -- 以華為云圖引擎 GES 為例》,作者:蜉蝣與海。 在圖資料庫 / 圖計算領域,很多查詢可以使用圖查詢語言 Cypher ......

    uj5u.com 2023-05-11 08:42:09 more
  • 如何進行MySQL原始碼除錯(一條select陳述句的執行流程)

    一、背景 MySQL是當今世上最受歡迎的使用最廣泛的開源資料庫,它的繁榮離不開它的開源特性。放在過去商業資料庫的時代,大家都沒有機會接觸到資料庫的源代碼,但在如今開源資料庫的時代,越來越多的人開始研究資料庫的原始碼,并給社區貢獻代碼,MySQL官方每次發布新版本都要感謝一些在社區上貢獻代碼的程式員。現 ......

    uj5u.com 2023-05-11 08:41:58 more
  • SQL Server資料庫判斷最近一次的備份執行結果

    1 麻煩的地方 在SQL Server的官方檔案里面可以看到備份和還原的表,但是這些表里面只能找到備份成功的相關資訊,無法找到備份失敗的記錄,比如msdb.dbo.backupset。對于一些監控系統未監控作業的情況下,想要監控資料庫備份任務執行失敗而觸發告警規則,有些麻煩。 但是SQL serve ......

    uj5u.com 2023-05-11 08:36:30 more
  • 基于華為云圖引擎GES,使用Cypher子查詢進行圖探索

    摘要:本文以華為云圖引擎 GES 為例,來介紹如何使用圖查詢語言 Cypher 表達一些需要做資料區域遍歷的場景。 本文分享自華為云社區《使用 Cypher 子查詢進行圖探索 -- 以華為云圖引擎 GES 為例》,作者:蜉蝣與海。 在圖資料庫 / 圖計算領域,很多查詢可以使用圖查詢語言 Cypher ......

    uj5u.com 2023-05-11 08:29:48 more
  • SQL Server資料庫判斷最近一次的備份執行結果

    1 麻煩的地方 在SQL Server的官方檔案里面可以看到備份和還原的表,但是這些表里面只能找到備份成功的相關資訊,無法找到備份失敗的記錄,比如msdb.dbo.backupset。對于一些監控系統未監控作業的情況下,想要監控資料庫備份任務執行失敗而觸發告警規則,有些麻煩。 但是SQL serve ......

    uj5u.com 2023-05-11 08:29:15 more
  • 從快取的本質說起,說服技術大佬用Redis

    摘要:在技術領域中,沒有銀彈。我們需要不斷探索和研究新的技術,結合具體問題和需求,選擇最適合的解決方案。 本文分享自華為云社區《知乎問題:如何說服技術老大用 Redis ?》,作者:勇哥java實戰分享。 最近在某問答平臺看到一個技術討論:如何說服技術老大用Redis? “他總覺得用Redis每次都 ......

    uj5u.com 2023-05-11 08:28:47 more
  • V$INDEX_USAGE_INFO中找不到監控索引資料的尷尬經歷

    在一個Oracle 12.1實體中,想監控一個表的索引使用情況,在system用戶下執行了下面腳本以及輸出的監控索引腳本后,發現V$OBJECT_USAGE下一直沒有對應的記錄(在system用戶下查詢) SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME|| ......

    uj5u.com 2023-05-11 08:28:24 more
  • Oracle之table()函式的使用,提高查詢效率

    (Oracle之table()函式) 一、序言 前段時間一直在弄報表,快被這些報表整吐了,然后接觸到了Oracle的table()函式。所以今天把table()函式的具體用法整理下,防止下次遇到忘記了。。 利用table()函式,可接收輸入引數,然后將pl/sql 回傳的結果集代替table。由于表 ......

    uj5u.com 2023-05-11 08:28:19 more
  • mysql資料記錄

    mysql資料記錄 準備作業 創建庫、表 #創建資料庫 create database mysql02; #使用資料庫 use mysql02; #創建表 create table student(id int ,name varchar(10),age int); 查看student表結構 資料增 ......

    uj5u.com 2023-05-11 08:27:58 more
  • 如何進行MySQL原始碼除錯(一條select陳述句的執行流程)

    一、背景 MySQL是當今世上最受歡迎的使用最廣泛的開源資料庫,它的繁榮離不開它的開源特性。放在過去商業資料庫的時代,大家都沒有機會接觸到資料庫的源代碼,但在如今開源資料庫的時代,越來越多的人開始研究資料庫的原始碼,并給社區貢獻代碼,MySQL官方每次發布新版本都要感謝一些在社區上貢獻代碼的程式員。現 ......

    uj5u.com 2023-05-11 08:27:50 more