大數據時代下人還有隱私么?帶你了解數據庫的前世今生
大數據時代
小奈:表哥,為什么瀏覽器好像什么都知道的?我只是剛剛搜了下感冒怎么治,現在就彈出xx醫院廣告了。
大仁:當xx公司有了海量的數據,再根據這些數據進行精準營銷(廣告),他們每年都可以掙一大筆廣告費。
大仁:廣告雖然令人厭惡,但是數據推薦還是必要的,尤其是在信息大爆炸的時代,讓信息更精準的出現在你手里。
大數據時代:人還需要隱私么?(不授權不給用)
小奈:表哥,公司最近好像在招聘DBA(數據庫管理員),后端工程師不就可以管理數據庫的么?數據庫和后端有什么區別?數據庫又是什么呢?
大仁:看來你們公司是大公司喔,一般小公司沒有dba的崗位。
其實我們常說的后端工程師,他們也設計和管理數據庫。但是如果數據到了一定量級,數據庫性能調優、安全穩定就需要專業的dba。

大數據背后的一塊塊基石,則是數據庫。
數據庫背后有好多故事,你可能不知道數據庫,但是最近火的不行區塊鏈,其實就是去中心化的分布式數據庫。
說完高大上的區塊鏈,我們開始回溯數據庫的發展吧
文件&文件系統

最開始是計算機的出現,那時候沒有硬盤,只有內存,數據不會進行存儲,一般只用于科技計算,計算完輸出結果后,程序就撤出內存了。
后來技術發展,才有了硬盤、文件,在文件的基礎上有了文件系統。文件系統可以滿足數據存放和查找的需求。
數據庫的誕生
文件系統作為數據庫用了一段時間,當數據越來越多、規模越來越大后,數據查找特別麻煩。數據很容易重復(冗余)、占用存儲空間多,數據結構化被迫推進。

文件系統和數據庫的主要區別是?
簡單舉個例子,如上圖所示。我們理解的數據和文件比較接近,例如文件1存放了玩具狗的數據,文件2存放了系鈴鐺的狗的數據。但其實玩具狗、玩具貓都是玩具,鈴鐺和玩具是可以拆分的。數據庫的結構化(玩具庫架子),讓數據不會重復,玩具狗可以系鈴鐺,也可以不系。
關系型數據庫
數據庫出現后,慢慢演化出關系型數據庫,之后又演化成非關系型數據庫。我們首先介紹關系型數據庫,什么是關系型數據庫?
關系數據就是指數據之間是有關系的。像是上圖中系鈴鐺的玩具狗,鈴鐺是屬于(系在)玩具狗,那我把鈴鐺取下來放到玩具貓上可以么?可以,那關系就變了,鈴鐺在數據庫里的記錄變更為屬于貓。
其實數據庫有個(存儲的關系規范)數據庫范式,第一范式到到第五范式。玩具狗與鈴鐺的拆分只是滿足了第一范式,越往下數據的壓縮率就越高,相應的存儲也會變慢(需要關系范式驗證)。

數據庫的除了是結構化存儲、它還可以共享給程序訪問。文件系統時候,程序a讀取文件1(小明的玩具),數據庫時代,所有程序只要有權限就可以訪問所有數據庫里的數據(大家的玩具共享)。
數據表長什么樣
數據:例如玩具狗,他的各個字段:玩具名稱、是否有耳朵、多少條腿等等,玩具狗的所有信息算是一條數據。
數據表:玩具表就像一個excel表格,里面存了所有玩具的數據。


nosql
隨著經濟發展,村里小孩越來越多了(云計算的到來),玩具廠每年生產的玩具也多了。一個玩具庫(單機)不夠用了,所以要多建立幾個公共玩具庫,玩具存放在不同的玩具庫(多臺計算機)。為了滿足數據爆發式增長的存儲需求,數據庫部署在多臺計算機上,也就是分布式數據庫,但是分布式和單機不同的地方在于關系嚴格性上,分布式要求數據關系不那么嚴格(半結構化),主要是擴容和大數據存儲,所以Nosql(not only sql)就誕生了。
常見的Nosql有mongodb、hbase等,這里以mongodb為例。
數據庫連接
- var mongoose = require('mongoose')
- var db = 'mongodb://127.0.0.1/test';
- mongoose.connect(db, {
- server: { poolSize: 20 }
- },function(err){
- if (err) {
- console.log('connect to %s error:', db, err.message)
- process.exit(1)
- }else {
- console.log('connected')
- }
- })
增刪改查
- var UserSchema=newSchema({
- name: { type: String},
- phone: { type: Number}
- })
- var User = mongoose.model('User', UserSchema);
- //create 增加
- var user1 = new User;
- user1.name = 'jack1';
- user1.phone = 123456;
- user1.save(function (err) {
- if (err) {
- console.log(err.message)
- }
- })
- var user2 =newUser;
- user2.name = 'jack2';
- user2.phone = 234567;
- user2.save(function (err) {
- if (err) {
- console.log(err.message)
- }
- })
- //查找
- User.find(function(err,users){
- if (err) {
- return console.error(err)
- }else {
- console.log(users)
- }
- })
分布式vs集群
很多人可能會混淆分布式和集群的概念,分布式更像是業務拆分到不同服務器上,集群則是多臺服務器一起處理同個業務。比較復雜,后續再解釋。
數據庫圖鑒
目前市面上常見的數據庫品牌,主要有關系型和非關系型數據庫兩種。計算機世界發展快速,數據庫就像一個大生態,愈發多態化多樣化。
關系型:Oracle、mysql、Postgresql nosql:mongodb、hbase

區塊鏈:去中心化的分布式數據庫
回到區塊鏈,大數據時代無隱私,區塊鏈的去中心化能否保護隱私?
首先得介紹下去中心化,那么中心化又是什么?中心化就是我們常見的通訊模型,客戶端需要以服務器獲取數據(服務端和數據庫交互),上次我們也講過 輸入url 后發生的事情,如果兩個客戶端之間互相知道彼此的地址,他們可以直接建立通訊。p2p技術常用于資源共享、音視頻等。

區塊鏈本質上是一種去中心化的分布式數據庫,該數據庫是由一串使用密碼學方法產生的數據區塊按時間順序有序連接而成,每個數據塊中包含了一段時間內的全網產生的無法篡改的數據記錄信息。
區塊鏈技術讓我們的隱私得到了一定程度上的保護。
關于網絡通訊、區塊鏈后續繼續展開。
失控
最后引用下凱文*凱里在《失控》里的一段話:
沒有強制性的中心控制,次級單位具有資質的性質:次級單位之間批次高度連接,點對點間的影響通過網絡形成了非線性因果關系。
計算機的高速發展,數據庫不斷進化,大數據越來越精確化,越來越智能,但用戶也需要隱私,區塊鏈這種去中心化、自組織的形態會不會成為新趨勢?