Ⅰ NetworkX和Graphscope哪個運算速度更快
近年來,全球大數據進入加速發展時期,數據量呈現指數級爆發式增長,而這些大量數據中不同個體間交互產生的數據以圖的形式表現,如何高效地處理這些圖數據成為了業界及其關心的問題。很過用普通關系數據無法跑出來的結果,用圖數據進行關聯分析會顯得異常高效。
提到處理圖數據,我們首先想到NetworkX,這是網路計算上常用的Python包,可提供靈活的圖構建、分析功能。但是我們使用NetworkX跑大規模圖數據時,不僅經常碰到內存不足的問題,而且分析速度很慢,究其原因,是NetworkX只支持單機運行。通過網上搜索,新發現了一個名為GraphScope的系統不僅號稱兼容NetworkX的API,而且支持分布式部署運行,性能更優。針對GraphScope和NetworkX的處理能力,我們參考圖計算中常用的測試框架LDBC,通過一組實驗來對比下二者的性能。
一、實驗介紹
為了比較兩者的計算效率,先用阿里雲拉起了配置為8核CPU,32GB內存的四台ECS,設計了三組比較實驗,分別是NetworkX單機下的計算性能,GraphScope單機多worker的計算性能以及GraphScope分布式多機多worer的計算性能。
數據上,我們選取了SNAP開源的圖數據集twitter,來自 LDBC數據集的datagen-7_5-fb,datagen-7_7-zf和datagen-8_0-fb作為實驗數據,以下是數據集的基本信息:
· Twitter: 81,307個頂點,1,768,135條邊
· Datagen-7_5-fb: 633,432個頂點,34,185,747條邊,稠密圖
· Datagen-7_7-zf: 13,180,508個頂點,32,791,267條邊,稀疏圖
· Datagen-8_0-fb: 1,706,561個頂點,107,507,376條邊,這個數據集主要測試兩個系統可處理的圖規模能力
實驗設計上我選擇常用的SSSP、BFS、PageRank、WCC演算法,以及較高復雜度的All Pair shortest Path length演算法,以載圖時間,內存佔用和計算時間這三個指標為依據,對兩個系統進行計算性能的比較。
NetworkX是一個單機系統,在實驗中只考慮NetworkX在單機環境下的運行時間;GraphScope支持分布式運行,故進行兩個配置,一個是單機4worker,另外一個配置是4台機器,每台機器4個worker。
二、實驗結果
首先,GraphScope的載圖速度比NetworkX顯著提升。
在前三個圖數據集中,無論是GraphScope的單機多worker模式,還是GraphScope的分布式模式,載圖速度都比NetworkX快:
GraphScope單機模式載圖速度平均比NetworkX快5倍,最高紀錄——在datagen-7_5-fb上比NetworkX快了6倍。
分布式模式下GraphScope的載圖時間比NetworkX平均快了27倍,最高紀錄——在datagen-7_7-zf數據集上比NetworkX快了63倍。
在datagen-8_0-fb數據集上,NetworkX因內存溢出無法載圖,GraphScope單機多worker和GraphScope分布式載圖時間分別為142秒和13.6秒。
表一:載圖時間對比
載圖時間
NetworkX
GraphScope單機
GraphScope分布式
twitter
11.2
3.1
1.8
datagen-7_5-fb
256
45.6
36.6
datagen-7_7-zf
316
71.3
50
datagen-8_0-fb
OOM
142
13.6
其次,GraphScope的內存使用效率比NetworkX顯著提升。
在datagen-8_0-fb數據集上,NetworkX在32G的內存上無法載完圖,而GraphScope僅需要24G的內存即可載入在datagen-8_0-fb數據集。
表二:內存佔用對比
內存佔用
NetworkX
GraphScope
datagen-7_5-fb
14G
6G
datagen-7_7-zf
28G
18G
datagen-8_0-fb
OOM
24G
再次,GraphScope的計算速度比NetworkX顯著提升。
SSSP演算法上,GraphScope單機多worker模式平均要比NetworkX快22倍,最快在datagen-7_7-zf數據集上快了32倍。GraphScope分布式模式下平均要比NetworkX快103倍,最快datagen-7_5-fb數據集上快了182倍。
表三: SSSP計算時間對比(單位:秒)
SSSP
NetworkX
GraphScope單機
GraphScope分布式
twitter
2.45
1.32
0.28
datagen-7_5-fb
37.9
1.21
0.31
datagen-7_7-zf
5.84
0.18
0.03
datagen-8_0-fb
OOM
2.76
0.82
BFS演算法上,GraphScope單機多worker模式平均要比NetworkX快13倍,最快datagen-7_5-fb數據集上快了22倍。GraphScope分布式模式下平均要比NetworkX快16倍,最快在datagen-7_5-fb數據集上快了28倍。
表四: BFS計算時間對比(單位:秒)
BFS
NetworkX
GraphScope單機
GraphScope分布式
twitter
1.53
0.16
0.17
datagen-7_5-fb
44.68
2.52
1.56
datagen-7_7-zf
7.98
0.75
0.72
datagen-8_0-fb
OOM
11.02
5.73
PageRank演算法上,GraphScope單機多worker模式平均要比NetworkX快62倍,最快twitter數據集上快了80倍。GraphScope分布式模式下平均要比NetworkX快65倍,最快在twitter數據集上快了71倍。
另外,PageRank計算過程中,NetworkX在datagen-7_7-zf上內存溢出,沒有完成計算,GraphScope單機多worker模式和分布式模式計算時間分別為25秒和22秒;
表五:PageRank計算時間對比(單位:秒)
PageRank
NetworkX
GraphScope單機
GraphScope分布式
twitter
24.01
0.37
0.33
datagen-7_5-fb
300
6.73
5.17
datagen-7_7-zf
OOM
19.31
7.79
datagen-8_0-fb
OOM
24.96
21.88
WCC演算法上,GraphScope單機多worker模式平均要比NetworkX快44倍,最快在datagen-7_7-zf數據集上快了104倍。GraphScope分布式模式下平均要比NetworkX快76倍,最快datagen-7_5-fb數據集上快了194倍。
表六: WCC計算時間對比(單位:秒)
WCC
NetworkX
GraphScope單機
GraphScope分布式
twitter
0.6392
0.0296
0.0233
datagen-7_5-fb
26.03
0.25
0.13
datagen-7_7-zf
83.19
14.57
12.98
datagen-8_0-fb
OOM
0.34
0.4991
在復雜度極高的All pair shortest path length演算法上,NetworkX在twitter圖上即內存溢出,無法計算。GraphScope在分布式模式下完成了twitter圖的All pair shortest path length計算,耗時76分鍾。
表七: All Pair Shortest Path Length(單位:秒)
APSP
NetworkX
GraphScope單機
GraphScope分布式
twitter
OOM
OOM
4575.87
三、總結
從實驗結果可以看到,在同等條件下,無論在載圖時間、內存佔用和計算時間上,GraphScope都要大大優於NetworkX,性能優化可以達到幾十倍甚至上百倍。
6979阿強
關注
0
0
0
@網路演算法工具 networkX igraph 的性能問題
alston_ethannical的博客
24
@網路演算法工具 networkX igraph 的性能問題 問題的提出 當我用 50萬數據去跑 networkX 開發出來的演算法時,遇到了一個計算性能的問題,這個問題時很慢。 尋找答案 發現 networkX再性能方面比較差。當節點上萬,邊上十萬的時候,新能慢的問題就會顯現出來 為了解決圖演算法問題,該怎麼辦呢 遇到問題,首先定義問題的邊界。也就是 先找到限制問題的條件。然後縮小問題范圍。我要解決的問題是:在解決圖演算法相關的問題時,如何能夠快速計算出結果。但是目前的演算法時用networks實現的。問題的根源是
開源!一文了解阿里一站式圖計算平台GraphScope
阿里雲開發者
2767
簡介:隨著大數據的爆發,圖數據的應用規模不斷增長,現有的圖計算系統仍然存在一定的局限。阿里巴巴擁有全球最大的商品知識圖譜,在豐富的圖場景和真實應用的驅動下,阿里巴巴達摩院智能計算實驗室研發並開源了全球首個一站式超大規模分布式圖計算平台GraphScope,並入選中國科學技術協會「科創中國」平台。本文詳解圖計算的原理和應用及GraphScope的架構設計。一 什麼是圖計算圖數據對一組對象(頂點)及其關系(邊)進行建模,可以直觀、自然地表示現實世界中各種實體對象以及它們之間的關系。在大數據場景下,社交網路、交
一文了解阿里一站式圖計算平台GraphScope_阿里雲雲棲號
10-2
GraphScope 提供了各類常用的分析演算法,包括連通性計算類、社區發現類和 PageRank、中心度等數值計算類的演算法,後續會不斷擴展演算法包,在超大規模圖上提供與 NetworkX 演算法庫兼容的分析能力。此外也提供了豐富的圖學習演算法包,內置支持 Graph...
5大典型模型測試單機訓練速度超對標框架,飛槳如何做到...
10-28
導讀:飛槳(PaddlePaddle)致力於讓深度學習技術的創新與應用更簡單。在單機訓練速度方面,通過高並行、低開銷的非同步執行策略和高效率的核心運算元,優化靜態圖訓練性能,在Paddle Fluid v1.5.0的基準測試中,在7個典型模型上進行了測試(圖像領域...
強化學習經典演算法筆記(六):深度Q值網路 Deep Q Network
hhy_csdn的博客
9093
前期回顧 強化學習經典演算法筆記(零):貝爾曼方程的推導 強化學習經典演算法筆記(一):價值迭代演算法Value Iteration 強化學習經典演算法筆記(二):策略迭代演算法Policy Iteration 強化學習經典演算法筆記(三):蒙特卡羅方法Monte Calo Method 強化學習經典演算法筆記(四):時間差分演算法Temporal Difference(Q-Learning演算法) 強化學習經典算...
GraphX和GraphFrame connectedComponent計算性能對比
高臭臭的博客
3046
測試文件:用Graph rmatGraph 1000000 2000000 去重後 494587個點,1997743個邊 運行環境:三台伺服器,246 GB,core 71. 測試三個運行例子1:Graph connectedComponents 2:GraphFrame connectedComponents 3:GraphFrame connectedComponents setAlgor
...network、偽代碼、演算法理解、代碼實現、tensorboard...
11-3
定義一個q_network函數來構建Q network,輸入游戲狀態Q network並得到對所有動作的Q值。 網路構成給為三個帶有池化的卷積層和一個全連接層。 tf.reset_default_graph()defq_network(X,name_scope):# Initialize layersinitializer=tf....
【讀書筆記】【機器學習實戰】第十一章:訓練深度神經網路
MJ_Lee的博客
612
閱讀書籍為《Hands-On Machine Learning with Scikit-Learn & TensorFlow》王靜源等翻譯的中文譯版《機器學習實戰,基於 Scikit-Learn 和 TensorFlow》,本文中所有圖片均來自於書籍相關部分截圖。 本章介紹了DNN訓練過程中三個常見問題,並依次給出解決方案。 章節的最後還給出當不知道如何DNN訓練時一些屬性可以選的比較好的...
Networkx 計算網路效率
tengqingyong的博客
5860
本人在計算網路效率的時候遇到了一個問題 networkx 提供了最短路徑函數shortest_path及shorest_path_length 我在計算網路效率構造了一個無向圖,但是我在計算點與點之間的最短路徑長度時總是提示我說點不存在圖中, 我在上面使用nx.average_shortest_path_length(UG)的時候可以得到網路平均最短路徑長度;這個說明我的點都...
Pandas/networkx圖分析簡單入門
weixin_34306676的博客
516
對於圖論而言,大家或多或少有些了解,數學專業或計算機相關專業的讀者可能對其更加清楚。圖論中的圖像是由若干給定的點及連接兩點的線所構成的圖形,這樣的圖像通常用來描述某些事物之間的某種特定關系,用點代表事物,用兩點之間的連接線表示二者具有的某種關系,在互聯網與通信行業中應用廣泛。圖論分析(Graph analysis)並不是數據科學領域中的新分...
networkx--四種網路模型
weixin_30764883的博客
380
NetworkX提供了4種常見網路的建模方法,分別是:規則圖,ER隨機圖,WS小世界網路和BA無標度網路。 一. 規則圖 規則圖差不多是最沒有復雜性的一類圖,random_graphs.random_regular_graph(d, n)方法可以生成一個含有n個節點,每個節點有d個鄰居節點的規則圖。 下面一段示例代碼,生成了包含20個節點、每個節點有3個鄰居的規則...
igraph/networkx學習筆記之…
nuoline的專欄
1萬+
原文地址:—— 數據結構">igraph/networkx學習筆記之一 —— 數據結構作者:zhengw789 首先,基本上所有的graph library都有其局限性,不同的數據結構有優點的同時必然有缺點,圖演算法對數據結構的依賴性構成另一個原因。所以如果是想用一個工具包解決所有的問題顯然是一種奢望,很多時候甚至必須要從頭寫自己的代碼。但是閱讀igraph和networkx這樣成型了的函數庫對熟悉
python下的復雜網路編程包networkx的使用(摘抄)
weixin_30631587的博客
2335
原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&view=me&from=space 復雜網路分析庫NetworkX學習筆記(1):入門 NetworkX是一個用Python語言開發的圖論與復雜網路建模工具,內置了常用的圖與復雜網...
更快更簡單|飛槳PaddlePaddle單機訓練速度優化最佳實踐
PaddlePaddle
1672
導讀:飛槳(PaddlePaddle)致力於讓深度學習技術的創新與應用更簡單。在單機訓練速度方面,通過高並行、低開銷的非同步執行策略和高效率的核心運算元,優化靜態圖訓練性能,...
GraphX與GraphLab、Pregel的對比
yang灬仔
588
分布式批同步BSP Pregel、GraphLab、GraphX都是基於BSP(Bulk Synchronous Parallel)模式,即整體同步並行。一次計算過程由一系列全局超步組成,每一個超步由並發計算、通信和同步三個步驟組成。從垂直上看,一個程序由一系列串列的超步組成。從水平上看,在一個超步中,所有的進程並行執行局部計算。BSP最大的好處是編程簡單,但在某些情況下BSP運算的性能非常差,...
TensorFlow學習記錄:VGGNet卷積神經網路模型
weixin_41137655的博客
308
1.VGGNet模型結構簡介 VGGNet是由牛津大學計算機視覺幾何組(Visual Geomety Group,VGG)和Google Deepmind公司的研究員合作研發的深度卷積神經網路,VGG的成員Karen Simonyan和Andrew Zisserman在2014年撰寫的論文《Very Deep Convolutional Networks for Large-Scale Image...
11月編程語言排行冠軍揭曉,穩
熱門推薦
IT教育任姐姐的博客
4萬+
大家好 今天任姐姐要跟小夥伴們分享 2021年11月最新TIOBE指數 11月編程排行榜 Python繼續榜首 本月的幸運兒只有一個,那就是Python! 繼上個月我們見證了Python奪冠這一歷史性的畫面之後,這個月Python仍舊穩坐榜首,看來Python這股大風還在繼續刮。 隨後分別是 C、Java、C++、C#,這些也都是我們的老朋友了。 PHP即將跌出前十 自20多年前TIOBE 指數開始發布以來,PHP 一直常駐在榜單前十,然而最近,該語言已經開始在前十
python能做什麼軟體?Python到底能幹嘛,一文看懂
小分享
6573
Python培訓有哪些內容?很多零基礎學員不知道Python軟體是干什麼用的?Python軟體是Python工程師編寫代碼時所需要的編輯工具,現在比較常用的Python軟體有Visu... 那麼在選擇Python培訓機構時學生尤為關注的就是培訓內容,從現在幾家大的機構可以看出,Python培訓主要學習第一階段Python核心編程(Pyth... 一文讀懂Python內置變數,函數,模塊在這里解釋下什麼是解釋性語言什麼是編譯性語言: 編譯性語言:如c++,c等,寫好的代碼要通過編譯器編譯成操作系統直接可
Django中超級用戶的創建和刪除操作
最新發布
Protinx的博客
91
創建超級用戶 這就很easy了,畢竟這是所有初學者都會的,操作如下: 打開Terminal,輸入: python manage.py createsuperuser 然後按照提示輸入相應的用戶名、郵箱和密碼就可以啦,如下: 創建超級用戶 可以看到上面我的密碼輸入了三次,還有不成功的提示,Django本身對於超級用戶的密碼要求還是很多的,大家定義密碼要注意啊,或者如果只是自己學習的話,也可在『Bypass password validation and create user an.
上海python培訓中心
weixin_63757190的博客
166
前幾天,有個讀者在後台留言,說: 「最近被論文折磨得快崩潰了,我現在是恨不得克隆十個自己,一個呆在科室值班,一個去寫月底要送審的稿子,一個去上百個網站翻數據..... 還有另外七個「我」,這邊六七篇論文還沒搞定。那邊又有新論文要開題了,加上最後一個「本我」,剛剛夠用,我可真是個數學天才! 可現實是只有一個我,只能天天熬夜。 好傢伙,整得我都開始反問自己,是不是只有我的科研生活這么兵荒馬亂?」 其實他不是個例,成千上萬的科研人都要面對無盡的實驗分析、反復修改的論文。 難道就只有被虐的份嗎?
python裝飾器
Live&Learn的博客
1208
學習目標:一口氣把裝飾器描述清楚 弄清楚裝飾器前要理解三個東西: 函數對象、函數嵌套、函數構成閉包。 學習內容: 函數對象好說,python編程語言屬於動態語言,python中一切皆對象,所以函數也是對象。 函數對象用函數名稱表示(僅名稱,沒有括弧,也沒有參數)。 例如,定義了一個求和函數add,那麼此處的add就是個函數對象。 def add(username, a, b): print(f"{a}+{b}={a + b}") return a + b 函數嵌套或者嵌套函數,就是定
©️2021 CSDN 皮膚主題: 游動-白 設計師:白松林 返回首頁
關於我們
招賢納士
廣告服務
開發助手
400-660-0108
[email protected]
在線客服
工作時間 8:30-22:00
公安備案號11010502030143
京ICP備19004658號
京網文〔2020〕1039-165號
經營性網站備案信息
北京互聯網違法和不良信息舉報中心
網路110報警服務
中國互聯網舉報中心
家長監護
Chrome商店下載
©1999-2021北京創新樂知網路技術有限公司
版權與免責聲明
版權申訴
出版物許可證
營業執照
6979阿強
碼齡0年
暫無認證
11
原創
13萬+
周排名
12萬+
總排名
579
訪問
等級
132
積分
1
粉絲
1
獲贊
0
評論
1
收藏
私信
關注
熱門文章
GraphScope、Neo4j與TigerGraph單機環境下性能對比 146
NetworkX與GraphScope的性能對比 88
GraphScope、Gemini與GraphX的性能對比 60
分布式圖計算引擎 46
國足歷屆世界盃對戰圖關系 45
最新評論
圖分析入門
大家一起學編程(python): 感謝博主的分享!
您願意向朋友推薦「博客詳情頁」嗎?
強烈不推薦
不推薦
一般般
推薦
強烈推薦
最新文章
2021-10-11
圖資料庫在社交方向上的應用
國足歷屆世界盃對戰圖關系
2021年11篇
你的瀏覽器目前處於縮放狀態,頁面可能會出現錯位現象,建議100%大小顯示。
舉報
————————————————
版權聲明:本文為CSDN博主「6979阿強」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tanekf6979/article/details/120067176
Ⅱ Mysqlworkbench cross 用法csdn
使用:
Prerequisites准備好後點擊文件夾中的「MySQLWorkbench.exe」,打開系統界面:
界面分為3個區域,區域1用於建立資料庫連接,區域2是打開過的界面的歷史記錄,區域3是相關網站的快捷方式。
1、 建立連接
在區域1中點擊圖中的加號:
在彈出的界面中填寫好mysql資料庫的連接信息,點擊「Test Connection」可以測試連接,測試成功後點擊「OK」確定,首頁就會產生一個連接的快捷圖標。
單擊圖標進入連接:
如圖所示的3個區域是比較常用的:
區域1:「Navigator」是一些常用功能的鏈接
區域2:「Schema」列出了該連接下的Schema,也就是當前連接下的庫
區域3:「Query」用於書寫SQL,進行查詢等。進行查詢的時候,先將SQL寫好,選中,然後點擊上方的閃電圖標即可:
2 、創建Model(設計ER圖)
使用workbench設計ER圖也很簡單。選擇File -> New Model:
在新展開的頁面中「Model Overview」界面雙擊「Add Diagram」圖標:
雙擊後即可看到設計界面,workbench中叫EER圖,其實就是增強的(enhanced)ER圖。在這個界面中即可進行ER圖的設計,例如添加一個table等:
注意有些信息可以進行詳細設置:
3 、使用Model生成SQL語句
如果你需要sql語句,那麼需要利用Model來生成。
首先打開一個Model,點擊File -> Open Model,如圖:
選擇一個mvb類型文件,就是Model。
打開這個Model後,要生成它對應的sql語句,需要點擊File -> Export -> Forward Engineer SQL CREATE SCRIPT:
打開**「Forward Engineer SQL SCRIPT」**。
Ⅲ 如何把blob類型數據存到資料庫csdn
BLOB (binary large object)----二進制大對象,是一個可以存儲二進制文件的容器。
在計算機中,BLOB常常是資料庫中用來存儲二進制文件的欄位類型。
BLOB是一個大文件,典型的BLOB是一張圖片或一個聲音文件,由於它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個資料庫)。
根據Eric Raymond的說法,處理BLOB的主要思想就是讓文件處理器(如資料庫管理器)不去理會文件是什麼,而是關心如何去處理它。
但也有專家強調,這種處理大數據對象的方法是把雙刃劍,它有可能引發一些問題,如存儲的二進制文件過大,會使資料庫的性能下降。在資料庫中存放體積較大的多媒體對象就是應用程序處理BLOB的典型例子。
Ⅳ CSDN中的軟體如何下載
1.只有注冊賬號才能下載的,如果是需要積分的話注冊賬號就應該有積分可以下載,但不要浪費,積分寶貴,下載之後評論評論可以返還積分,但不是直接形式,而是進行積分轉換,注冊之後上面有提示。賬號注冊免費的,也不難,相對資源來講個人覺得挺值得的,尤其是對計算機感興趣的同志。
2.csdn是編程人員中非常好的一個網站,有很多學習資料在裡面,如果想學習的話就進csdn的學生大本營,裡面n多免費視頻教程,包括java,資料庫,3g,,,,等等。
3.在csdn下載里當然也包括很多大家共享的軟體了。
4.非廣告,均屬個人意見,希望對你有幫助
Ⅳ 遠程影像診斷主要解決什麼問題
摘要 主要能夠解決醫療資源(診斷醫生)不足的問題,因為設備花錢就能買得到,但醫生不好請,二是留不足,三是誤診率。
Ⅵ 設計一個圖書館管理系統的資料庫
1500錢也做不出來呀。不要說是15分了,我在大學時做學校做的還給我們8000塊錢呢
Ⅶ ubuntu 安裝了mysql怎麼運行
如果樓主想圖形化操作資料庫,可以使用phpmyadmin對你的mysql資料庫進行操作,具體安裝方法可以參考這篇文章
http://blog.csdn.net/zly_ir/article/details/51264511
同樣,樓主也可以使用navcat來對你的資料庫進行操作,可以網路navcat安裝包,如果遇到10038登錄問題也可以參考給你的這篇博客中博主的另一篇文章,有解決方法
Ⅷ 怎樣用access配置成資料庫伺服器 csdn
創建新資料庫文件的方法有很多。主要有兩種方法:一、空白資料庫,直接結構與數據同時進行輸入(如果果建立完成後再修改結構,原內容可能丟失);二、結構和數據分兩步進行了操作(推薦);那麼第一種方法注意在ACCESS主窗口中區域左上角的"空白資料庫"按鈕。該按鈕和"文件"菜單中的"新建"按鈕都可以展現主窗口右側的"空白資料庫"區域。單擊二者中的任何一個按鈕都可以轉換到主窗口,如圖右所示。" 空白資料庫"區域代替了主窗口中的最近打開的資料庫列表。
在"空白資料庫"區域的"文件名"框中輸入新資料庫的名稱。默認情況下, Access 會在一個最近使用Access 打開的Windows 文件夾中創建新的資料庫文件。如需使用不同的文件夾,可以使用"文件名"右側的文件夾圖標進行瀏覽並將資料庫創建在所需的位置。
Access 為新資料庫提供了Dat abasel.accdb 的默認名稱。
需確保提供的名稱可以識別。在圖右中,新的資料庫命名為教務信息管理.accdb (擴展名.accdb 為可選項,這是因為在未提供擴展名時, Access 將自動提供擴展名)。創建完新的資料庫後, Access 將自動打開該資料庫。
圖右 在"空白資料庫" 區域的"文件名"框中輸入新資料庫的名稱
Ⅸ 你好、MySql存儲圖片用什麼類型呢
背景
MySQL 一直以來都有 TEXT、BLOB 等類型用來存儲圖片、視頻等大對象信息。比如一張圖片,隨便一張都 5M 以上。視頻也是,隨便一部視頻就是 2G 以上。
假設用 MySQL 來存放電影視頻等信息,一部是 2G,那麼存儲 1000 部就是 2TB,2TB 也就是 1000 條記錄而已,但是對資料庫性能來說,不僅僅是看記錄數量,更主要的還得看佔用磁碟空間大小。空間大了,所有以前的經驗啥的都失效了。
所以一般來說存放這類信息,也就是存儲他們的存放路徑,至於文件本身存放在哪裡,那這就不是資料庫考慮的范疇了。資料庫只關心怎麼來的快,怎麼來的小。
舉例
雖然不推薦 MySQL 這樣做,但是也得知道 MySQL 該怎麼做才行,做到心裡有數。比如下面一張微信圖片,大概 5M 的樣子。
root@ytt:/var/lib/mysql-files# ls -sihl 微信圖片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信圖片_20190711095019.jpg
拷貝 100 份這樣的圖片來測試
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信圖片_20190711095019.jpg "$i".jpg;done;
root@ytt:/var/lib/mysql-files# ls
100.jpg 17.jpg 25.jpg 33.jpg 41.jpg 4.jpg 58.jpg 66.jpg 74.jpg 82.jpg 90.jpg 99.jpg f8.tsv
10.jpg 18.jpg 26.jpg 34.jpg 42.jpg 50.jpg 59.jpg 67.jpg 75.jpg 83.jpg 91.jpg 9.jpg 微信圖片_20190711095019.jpg
1111.jpg 19.jpg 27.jpg 35.jpg 43.jpg 51.jpg 5.jpg 68.jpg 76.jpg 84.jpg 92.jpg f1.tsv
11.jpg 1.jpg 28.jpg 36.jpg 44.jpg 52.jpg 60.jpg 69.jpg 77.jpg 85.jpg 93.jpg f2.tsv
12.jpg 20.jpg 29.jpg 37.jpg 45.jpg 53.jpg 61.jpg 6.jpg 78.jpg 86.jpg 94.jpg f3.tsv
13.jpg 21.jpg 2.jpg 38.jpg 46.jpg 54.jpg 62.jpg 70.jpg 79.jpg 87.jpg 95.jpg f4.tsv
14.jpg 22.jpg 30.jpg 39.jpg 47.jpg 55.jpg 63.jpg 71.jpg 7.jpg 88.jpg 96.jpg f5.tsv
15.jpg 23.jpg 31.jpg 3.jpg 48.jpg 56.jpg 64.jpg 72.jpg 80.jpg 89.jpg 97.jpg f6.tsv
16.jpg 24.jpg 32.jpg 40.jpg 49.jpg 57.jpg 65.jpg 73.jpg 81.jpg 8.jpg 98.jpg f7.tsv
mysql> show create table tt_image1G
*************************** 1. row ***************************
Table: tt_image1
Create Table: CREATE TABLE `tt_image1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table tt_image2G
*************************** 1. row ***************************
Table: tt_image2
Create Table: CREATE TABLE `tt_image2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table tt_image3G
*************************** 1. row ***************************
Table: tt_image3
Create Table: CREATE TABLE `tt_image3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
tt_image1
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)
values (load_file('/var/lib/mysql-files/$i.jpg'))";done;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytt.tt_image3(image_file) values
('/var/lib/mysql-files/$i.jpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";
- mysql> select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+-----------+----------+| name | count(*) |+-----------+----------+| tt_image1 | 100 || tt_image2 | 100 || tt_image3 | 100 |+-----------+----------+3 rows in set (0.00 sec)
- root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd274605 80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd
- mysql> select * from tt_image3;+----+----------------------------+| id | image_file |+----+----------------------------+| 1 | /var/lib/mysql-files/1.jpg |+----+----------------------------+...100 rows in set (0.00 sec)
- mysql> DELIMITER $$mysql> USE `ytt`$$mysql> DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql> CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql> BEGIN DECLARE i,cnt INT DEFAULT 0; SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt; WHILE i < cnt DO SET @stmt = CONCAT('select image_file from tt_image1 limit ',i,',1 into mpfile ''/var/lib/mysql-files/image',i,'.jpg'''); PREPARE s1 FROM @stmt; EXECUTE s1; DROP PREPARE s1; SET i = i + 1; END WHILE; END$$mysql> DELIMITER ;mysql> call sp_get_image;
佔用磁碟空間大(這樣會帶來各種各樣的功能與性能問題,比如備份,寫入,讀取操作等)
使用不易
還是推薦用文件路徑來代替實際的文件內容存放
我們建三張表,分別用 LONGBLOB、LONGTEXT 和 VARCHAR 來存儲這些圖片信息
我們來給三張表插入 100 張圖片(插入前,建議把 max_allowed_packet 設置到最大)
檢查下三張表記錄數
看下文件大小,可以看到實際大小排名,LONGTEXT 欄位存儲的最大,LONGBLOB 欄位縮小到一半,最小的是存儲圖片路徑的表 tt_image3。所以這里從存儲空間來看,存放路徑最占優勢。
那麼怎麼把圖片取出來呢?
tt_image3 肯定是最容易的
tt_image1 直接導出來二進制文件即可,下面我寫了個存儲過程,導出所有圖片。
tt_image2 類似,把 select 語句里 image_file 變為 unhex(image_file) 即可。
總結
這里我舉了個用 MySQL 來存放圖片的例子,總的來說有以下三點: