1、Hugegraph測試硬件
1.1、本機硬件
本機測試hugeGraph版本:0.10.4
后置存儲數據庫:rocksdb,1TB的普通硬盤
1.2、測試服務器硬件
測試服務器hugegraph版本:0.9.2,服務器分配16G空間,16核
后置存儲數據庫cassandra:3.11.0,存儲空間未限制,普通硬盤
2、基准測試
2.1、數據加載
加載功能:hugegraph自帶的原生的導入工具,其schema定義其數據類型,索引和邊標簽屬性,struct定義邊。
加載大量數據時間和速度:主要是測試百萬,千萬,億級別的加載速度。
2.2、查詢性能
查詢響應時間——針對於多度查詢
查詢響應時間——針對於遍歷所有路徑查詢
查詢響應時間——針對於最短路徑查詢
3、測試報告
3.1、本機和測試flink寫入速度
測試 |
寫入速度 |
硬件情況 |
本地流程 |
前期數據量少大概4000條/分鍾(數據量大概10多萬)后期數據量大的寫入未進行測試。 |
Intel® Core™ i5-9400 CPU @ 2.90GHz × 6,RocksDB后置數據庫存儲內存1TB |
測試flink |
前期數據量比較少大概寫入2624條/分鍾(3h38m-571988) 后期數據量多了大概寫入1200/分鍾(3d2h-5292999) |
hugeGraph的16G,16核,Cassandra后置數據庫存儲內存未做限制 服務器上的寫入速度小於本地寫入速度原因: 1、服務器硬件 2、網絡不穩定性 |
3.2、數據快速導入查詢
3.2.1、百萬級別導入
3.2.2、百萬級別數據查詢
點:150萬
邊:75萬+新增邊1萬
查詢最多五度,點定義有六個屬性值,邊只有一個屬性值(id)
耗時 查詢 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
第一次耗時 |
0.656S |
0.315S |
報錯 |
報錯 |
報錯 |
第一次查詢后均耗時 |
0.04S |
0.04S |
報錯 |
報錯 |
報錯 |
原因 |
g.V()遍歷只顯示250條數據 |
g.E()遍歷只顯示250條數據 |
錯誤的請求,已超過最大數值 |
遍歷的最大值不能超過80萬 |
刪除的最大值不能超過1萬 |
遍歷所有點的g.V().out()報錯:請求錯誤
遍歷所有點的出邊g.V().outE()或g.V().inE()報錯:最大值不能超過80W
刪除所有點的數據g.V().drop()或g.E().drop()報錯:最大值不能超過1W
3.2.2.1、多度查詢
時間 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查詢單個點 |
查詢耗時 |
0.04S |
0.03S |
0.03S |
0.03S |
由於數據問題,此次查詢數據結果和四度一樣,時間沒有參考意義 |
0.03S——g.V().hasLabel("person").has("id","id值") |
3.2.2.2、路徑遍歷
路徑分為兩種:有環路徑和無環路徑。
有環路徑是指路徑中至少有一個對象出現的次數大於等於兩次。
無環路徑是指路徑中所有的對象只出現一次。
查詢未過濾環路的路徑遍歷:
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
查詢耗時 |
均耗時:0.075S |
第一次:0.274S 后均耗時:0.08S |
均耗時:0.1S |
第一次:0.875S 后均耗時:0.085S |
查詢已過濾環路的路徑遍歷:
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
五層 |
查詢耗時 |
第一次:2.729S 后均耗時:0.450S
|
第一次:1.983S 后均耗時:0.300S
|
第一次:5.849S 后均耗時:5.210S
|
第一次:6.881S 后均耗時:6.75S |
Error! Failed to do request 沒有存在五層的數據,導致查詢報錯 |
3.2.2.3、最短路徑查詢
g.V("src_v_id")
.repeat(both().simplePath()).until(hasId("target_v_id")
.and().loops().is(lte(4))).hasId("target_v_id")
.path().limit(10)
src_v_id:起點頂點ID
target_v_id:終點頂點ID
lte(4):深度小於4
limit(10) :顯示10條數據
如果不限制數據量:將10改為-1
時間 最短路徑 |
深度小於2 |
深度小於3 |
深度小於4 |
深度小於5 |
查詢耗時 |
第一次:0.894S 后均耗時:0.055S |
均耗時:0.055S |
第一次:0.347S 后均耗時:0.050S |
第一次:0.241S 后均耗時:0.060S |
3.2.3、千萬級別導入
點:1500W 耗時:2H
邊:750萬 耗時:1H38M
3.2.4、千萬級別數據查詢
耗時 查詢 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
第一次耗時 |
1.212S |
0.449S |
報錯 |
報錯 |
報錯 |
第一次查詢后均耗時 |
0.05S |
0.234S |
報錯 |
報錯 |
報錯 |
原因 |
g.V()遍歷只顯示250條數據 |
g.E()遍歷只顯示250條數據 |
錯誤的請求,已超過最大數值 |
遍歷的最大值不能超過80萬 |
刪除的最大值不能超過1萬 |
3.2.4.1、多度查詢
時間 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查詢單個點 |
第一次查詢耗時 |
1.065S |
2.218S |
1.149S |
1.222S |
1.453S |
開始查詢耗時:0.232S 多次查詢后均耗時:0.035S——g.V().hasLabel("person").has("id","161f2f39beb3bdc6f2d0747a15fcefd5") |
第一次查詢后多次查詢均耗時 |
0.04S |
0.04S |
0.03S |
0.03S |
0.03S |
3.2.4.2、路徑遍歷
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
查詢耗時 |
第一次:0.958S 后均耗時:0.08S
|
第一次:0.639S 后均耗時:0.08S
|
存在環路的三層和四層路徑遍歷,存在對象大於等於2的情況,而且數據邊的不完整性,查詢的時間不具有參考性。 |
查詢已過濾環路的路徑遍歷:
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
五層 |
查詢耗時 |
第一次:0.742S 后均耗時:0.075S
|
第一次:1.284S 后均耗時:0.096S
|
第一次:6.483S 后均耗時:5.111S
|
第一次:7.574S 后均耗時:6.876S |
Error! Failed to do request 沒有存在五層的數據,導致查詢報錯 |
3.2.4.3、最短路徑查詢
時間 最短路徑 |
深度小於2 |
深度小於3 |
深度小於4 |
深度小於5 |
查詢耗時 |
第一次:2.728S 后均耗時:0.055S |
均耗時:0.082S |
耗時:0.31S |
耗時:0.264S |
3.2.5、億級別數據導入
點:1.05億 耗時:13H35M34S
邊:5268萬 耗時:12H36M
3.2.6、億級別數據查詢
耗時 查詢 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
第一次耗時 |
1.841S |
1.835S |
報錯 |
報錯 |
報錯 |
第一次查詢后均耗時 |
0.212S |
0.250S |
報錯 |
報錯 |
報錯 |
原因 |
g.V()遍歷只顯示250條數據 |
g.E()遍歷只顯示250條數據 |
錯誤的請求,已超過最大數值 |
遍歷的最大值不能超過80萬 |
刪除的最大值不能超過1萬 |
頁面上限制顯示250條數據:limit(251)
3.2.6.1、多度查詢
時間 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查詢單個點 |
第一次查詢耗時 |
7.352S |
3.958S |
3.149S |
3.12S |
1.453S |
開始查詢耗時:0.136S 多次查詢后均耗時:0.030S——g.V().hasLabel("person").has("id","161f2f39beb3bdc6f2d0747a15fcefd5") |
第一次查詢后多次查詢均耗時 |
0.254S |
0.057S |
0.04S |
0.045S |
0.03S |
3.2.6.2、路徑遍歷
路徑分為兩種:有環路徑和無環路徑。
有環路徑是指路徑中至少有一個對象出現的次數大於等於兩次。
無環路徑是指路徑中所有的對象只出現一次。
查詢未過濾環路的路徑遍歷:
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
查詢耗時(id:d9530e5495fbf25d7aae082e8a65c722) |
查詢耗時:0.759S |
查詢耗時:2.77S
|
環路的三層和四層路徑遍歷,存在對象大於等於2的情況,而且數據邊的不完整性,查詢的時間不具有參考性。 |
|
查詢耗時(id:161f2f39beb3bdc6f2d0747a15fcefd5) |
查詢耗時:2.28S
|
查詢耗時:1.358S
|
查詢已過濾環路的路徑遍歷:
時間 遍歷路徑 |
一層 |
二層 |
三層 |
四層 |
五層 |
查詢耗時(id:d9530e5495fbf25d7aae082e8a65c722) |
第一次:1.213S 后均耗時:0.095S
|
第一次:2.659S 后均耗時:0.116S
|
第一次:29.457S 后均耗時:14.990S
|
第一次:12.604S 后均耗時:9.01S
|
第一次:1.421S 后均耗時:0.122S
|
查詢耗時(id:161f2f39beb3bdc6f2d0747a15fcefd5) |
第一次:2.024S 后均耗時:0.080S
|
第一次:1.777S 后均耗時:0.096S
|
第一次:10.318S 后均耗時:5.199S
|
第一次:8.816S 后均耗時:6.615S
|
Error! Failed to do request 沒有存在五層的數據,導致查詢報錯 |
3.2.6.3、最短路徑查詢
時間 最短路徑 |
深度小於2 |
深度小於3 |
深度小於4 |
查詢耗時 |
報錯:Error! Failed to do request
|
由於深度小於2的報錯,深度3測跑也報錯,深度小於4的未進行操作。 |
4、測試總結:
①:當點的數據達到億級別的時候,最短路徑查詢出現Error!Failed to do request,不知道是由於什么原因導致該查詢出現錯誤,需到issue上查找是否有針對於該錯誤的具體的原因。
②:后端存儲數據庫cassandra是分布部署到三台服務器上,對於單服務器部署cassandra的查詢未進行測試。
該文檔僅代表測試情況,具體數據僅具供參考