技多不壓身,無論是什麼數據產品經理還是其他品類的產品經理,都需要懂點資料庫知識。懂技術能讓你在跟開發撕逼中多了一個資本。
隨著近幾年AI智能,大數據的發展,「產品經理是是否需要懂技術?」「產品經理應該對技術理解到什麼程度?」諸如此類的問題又再次出現在許多人的視野中,或者說它就未曾離開過。
筆者認為,這要具體放到某個具體業務場景或者行業下去分析,例如:作為一名數據產品經理,你可能需要懂一些資料庫,大數據的相關知識;作為一名AI語音產品經理,你可能需要懂一些關於自然語言處理(NLP)的相關技術。
當然,技多不壓身,懂技術能讓你在跟開發撕逼中多了一個資本。
在進入正文之前,我們先來思考幾個小問題:
這四個問題看起來很簡單,但深究起來,它對應著資料庫的四個基本操作CRUD:即增加(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)。
百度百科對資料庫給出以下定義:
所謂「資料庫」是以一定方式儲存在一起、能予多個用戶共享、具有儘可能小的冗餘度、與應用程式彼此獨立的數據集合。
資料庫可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據進行新增、查詢、更新、刪除等操作。
簡單的理解:資料庫(DataBase,簡稱DB)是用於保存有組織的數據的容器。
在DB中,數據通常以一種結構化的文件——表,作為其展現形式。對DB的操作可以看做是對DB中表的操作,而對DB中表的操作可以類比為對Excel中表的操作。
資料庫中的表有行和列的概念,符合我們的常規認知。
列是表中的一個欄位,存儲著相同屬性的數據,例如:一列專門來存儲用戶的帳號暱稱。
行是表中的一個記錄,可用於存儲某一個用戶的完整信息,例如:用戶A,男,22歲,身高170cm,體重120斤。
表中的某一列(或一組列)我們稱為主鍵,其值可以用來唯一區分表中每個行(或者說每條記錄)。說白了,主鍵就是用來唯一代表某條記錄(某行)的。
主鍵需滿足以下條件:
舉個例子:在學生管理系統中,我們用學號來唯一代表每個學生,此時學號所在的那一列就是主鍵。
那麼,如何理解某一組列作為主鍵呢?
當我們無法用單獨的某一列來代表一條記錄時,我們就要採用某兩列或者某幾列來共同代表一條記錄。
例如:一個表格記錄著一個班級的學生,不同課程的不同考試中的數據時,你想從中找出學生A,每一次考試中的語文成績時,就需要以學號和課程名稱這兩列來作為複合主鍵。
一般情況下,我們不會去直接操作資料庫,往往是通過資料庫管理系統(Database Management System,簡稱DBMS)去對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。
典型的DBMS包括例如:MySQL,Oracle,mongoDB,Redis等等。
這裡注意一點:在平時交流的時候,許多人會直接將MySQL,Oracle等稱作是資料庫,很多網上的資料也是這麼寫的。但從嚴格意義上來講,MySQL,Oracle應該是資料庫管理系統。
為了方便大家跟網上的資料能夠共同理解,筆者在此暫時稱呼MySQL為資料庫。
目前主流資料庫基本分為兩類:關係型資料庫和非關係型資料庫。
關係型資料庫是指採用了關係模型來組織數據的資料庫。其最典型的數據結構是表,結構相對固定,格式一致,易於維護。但是靈活性不強,讀寫性能比較差,尤其是在海量數據的處理上,效率不高。
非關係型資料庫狹義上講並不是一種資料庫,而是一種數據結構化存儲方法的集合。因為大多數經典的關係型資料庫命名都為「***SQL」,為了做出區分,行業內通常將非關係型資料庫統稱為NoSQL。NoSQL格式靈活,可以很好的滿足高並發讀寫需求,成本低,速度快。
在安裝完MySQL之後,他會幫我們順帶安裝資料庫。我們就可以直接通過MySQL的命令窗口啟動服務,並對資料庫進行操作。
例如在下圖中,筆者在win10系統中,先以管理員權限打開PowerShell,然後啟動MySQL命令窗口,再通過「create database test;」創建一個名稱為test的資料庫。(一般情況下,不建議用root登陸)
這種操作方式對於非技術人員來講,並不是十分友好。因此在日常使用中,我會採用MySQL+Navicat來實現對資料庫的操作。
Navicat是一套多連接資料庫開發工具,工具中帶有靈活的資料庫圖形可視化界面,方便用戶直接進行類如Excel的表格操作,由此來實現最終的資料庫操作。
SQL(Structured Query Language)是結構化查詢語言,可以用來和資料庫通信,絕大部分DBMS都支持SQL,簡單的說就是通過編寫SQL語句來操作資料庫。
在下面的操作中,筆者也將以MySQL+Navicat作為基礎開發環境,以SQL語法為說明。
對資料庫DB,資料庫管理系統DBMS,結構化查詢語言SQL有所了解後,讓我們繼續回到開篇講的四個問題。
將這四個步驟拼接在一起,可以得出一個最簡單的用戶帳戶註冊、登錄、修改、註銷的流程。
這四部分對應到資料庫的相關操作就是增加(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)。
我們先在Navicat中跟一個已存在的資料庫進行連接,然後建立一張名為user_test的表,表中分別有欄位:ID(作為主鍵)、account(帳戶名)、password(密碼)、source(註冊來源)、name(真實姓名)、age(年齡)、job(職業)。
在用戶註冊時,會在註冊界面填寫相應的信息,點擊頁面底部的註冊按鍵,系統將執行資料庫記錄插入操作,其通用SQL語法為:
最後,所有SQL語法中都以 「;」作為語句結尾,這個不要漏了。
在本例中,對應的SQL為:
經過插入操作後,資料庫中表的結果為
在這裡,因為我們的表中的ID欄位設置為主鍵,並且由資料庫進行自增操作,所以我們不會對其進行額外操作。
假設當前資料庫中user_test表的數據如下:
在用戶登錄時,系統會根據用戶輸入的帳戶名去資料庫中檢索,如果沒有查詢到相應的帳戶名,則提示帳戶不存在;如果查詢到帳戶名,則再根據資料庫中該帳戶名的密碼去跟用戶登錄時輸入的密碼進行匹配,如果匹配失敗,則提示密碼輸入錯誤,反之登陸成功。
所以在這個步驟中,執行的是資料庫的查詢操作,其通用的SQL語句為:
在本例中,假設是RD李四登陸,則根據李四的帳戶名「用戶2」查詢其密碼,年齡,註冊來源,職業,姓名這幾個欄位信息的SQL為:
經過查詢操作後,得出的查詢結果為:
假設當前資料庫中user_test表的數據如下:
在用戶登錄成功後,可以對密碼進行更改,系統根據當前登陸帳戶,將舊密碼更改為新密碼。
所以在這個步驟中,執行的是資料庫的更新操作,其通用的SQL語句為:
其中[WHERE Clause]表示你要更新這張表時,所約束的條件。在這裡注意一點,進行UPDATE操作時,一定要跟上[WHERE Clause],不然將會把整張表的數據更新。
在本例中,假設我們要對QA王五的密碼和職業進行更新,則SQL為:
經過更新操作後,資料庫中表的結果變為:
假設當前資料庫中user_test表的數據如下:
當用戶試圖註銷自己的帳號時,系統會根據相應的帳戶名對用戶的信息進行刪除。至於刪除哪些信息,取決於業務要求。有些應用會將用戶信息全部刪除,有些則會保留一些基礎信息,方便用戶二次註冊的時候,可以快速完成。
所以,在這個步驟執行的是資料庫的刪除操作,其通用的SQL為:
在本例中,假設我們要將RD李四的帳戶註銷,並且刪除其所有數據,則SQL為:
時序資料庫(Time Series Database,簡稱TSDB)是非關係型資料庫中的一種,也是很重要的一種。
隨著目前AI智能的發展,在很多場景下,特別是將來的工業網際網路中,我們需要收集海量的過去式數據,藉此來分析和預測將來可能發生的事情。例如:金融交易股票走勢,物聯網傳感器設備的測量數據,氣溫或日溼度預測等等。
以股票走勢預測為例,單靠目前股票的位點是無法分析的,只有結合股票在前十分鐘,前一個小時,甚至前幾天的走勢,才能更加精準的預測出未來某一時刻的具體情況。
時序資料庫就是專門用來存儲海量時序數據的。而時序數據就是基於時間的一系列數據。
簡單地可以理解成,它以時間為主坐標軸,以需要被記錄的數據作為縱軸,通過規則的時間間隔或者是不規則的時間間隔去表徵一系列數據的規律性或異常性變化。
時序資料庫包含以下幾個基礎部分:
有的小夥伴可能會說,直接在一般的資料庫中,加入一個代表時間的列,不就可以完成嗎。在數據比較少,資料庫操作不頻繁的時候,這種方法還是可以的。
隨著數據存儲量的增多,如果想要達到跟時序資料庫一樣的效果,那就會頻繁的操作資料庫,這會造成極大的開銷,從而極大的降低讀寫速度。
總的來說,時序資料庫具有大規模數據支持,多精度數據存儲,多標籤數據查詢等特點。
非關係型資料庫NoSQL大致可以分為四類:
圖資料庫就是NoSQL其中的一種,它以圖這種數據結構存儲和查詢數據。圖由兩個主要元素組成:節點和關係。
節點代表一個實體(時間,地點,人或其他數據),關係則代表兩個節點之間的關聯方式。
相比於NoSQL中的其他類型資料庫而言,圖資料庫具有更加豐富的模型表現能力和更加高效的索引。
在實際應用中,業務邏輯往往十分複雜,如果用關係型資料庫來表示各個實體之間的潛在關係,則需要建立十分多的關聯表。資料庫需要通過關聯表間接地維護實體間的關係,導致資料庫的執行效能低下,同時也會引起關聯表的數量急劇上升。
例如:在一個訂單系統中,要清楚表現出用戶、訂單、商品之間的邏輯關係,需要建立四張關聯表,這顯得十分複雜,開發效率也很低。
而在圖資料庫中,我們只需要建立四個節點,並用關係來表示節點之間的邏輯,最後用任意兩個節點之間的關係去索引,即可提升效率。隨著業務邏輯性愈發的複雜,數據量的增多,關聯表數量會急劇上升,這時圖資料庫的優勢愈發明顯。
隨著大數據,AI智能的發展,為解決不同業務需求,越來越多的創新資料庫隨之出現,時序資料庫和圖資料庫就是其中之一。時序資料庫解決了時間序列數據存儲,索引的問題;圖資料庫則解決了複雜邏輯下,各個實體之間相互表徵,索引的問題。
對於每個應用而言,資料庫為其提供了前後臺數據交互的作用。對於企業而言,資料庫存儲了海量的用戶數據,一旦資料庫被攻擊或被破壞,將會導致用戶信息洩露,進而導致一系列無法彌補的損失。因而,資料庫的保護工作極其重要,特別是一些涉及金融,政府層面的數據。
在雲計算領域中,資料庫還被作為一種資源進行出售。例如:亞馬遜的AWS資料庫、騰訊雲資料庫、阿里雲資料庫、百度雲資料庫等等。通過租用有實力公司的雲資料庫,不僅能免除小企業自身架設機房,採購物理硬體,招聘專業運維人員的成本,還能享受高性能雲資料庫服務以及高質量的防護措施。
常見的資料庫攻擊方式及其防護措施如下:
在早期的資料庫中,有些資料庫在安裝時會有一個默認的口令,有些管理人員偷懶,乾脆就延用了默認口令,那麼黑客就可能從這個口令出發去獲取攻擊資料庫。
措施:採用安全程度高的口令,避免使用默認口令。
SQL注入指通過任意SQL代碼插入資料庫查詢,使攻擊者能夠繞過應用程式安全措施,完全控制Web應用程式後面的資料庫伺服器,對數據進行CRUD操作。
措施:儘量避免直接將用戶的輸入放到SQL語句中,使用準備好的語句和參數化查詢,並且定期測試與資料庫交互的Web應用程式,查看後臺日誌信息。
資料庫會被許多人共同使用,有測試人員、開發人員、產品經理等等,每個人員分配的權限是不一樣的。
最高級的root權限一般只開放給高級別的Leader。如果在權限配置中,一個用戶被誤授予超過其實際需要的訪問權限。那麼攻擊者只需要得到少許特權用戶的口令,就可以毫無阻礙的進入資料庫系統。
措施:定期審查每個用戶的權限,通過後臺日誌分析及時更改誤授人員的權限。
至此為止,相信大家對資料庫以及相關知識已經有了一個感性的認知。
資料庫的知識比較多,不是一兩篇文章就能講清楚的。筆者整體寫的也比較粗糙,希望能給各位同行帶來一些幫助。承蒙大家不嫌棄的話,筆者願意在後續再寫幾篇相關的,與大家一同學習和進步。
文中部分內容參考網上資料。
本文由 @pm_SWolf 原創發布於人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基於CC0協議