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

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

最開始是計(jì)算機(jī)的出現(xiàn),那時(shí)候沒有硬盤,只有內(nèi)存,數(shù)據(jù)不會(huì)進(jìn)行存儲(chǔ),一般只用于科技計(jì)算,計(jì)算完輸出結(jié)果后,程序就撤出內(nèi)存了。
后來技術(shù)發(fā)展,才有了硬盤、文件,在文件的基礎(chǔ)上有了文件系統(tǒng)。文件系統(tǒng)可以滿足數(shù)據(jù)存放和查找的需求。
數(shù)據(jù)庫的誕生
文件系統(tǒng)作為數(shù)據(jù)庫用了一段時(shí)間,當(dāng)數(shù)據(jù)越來越多、規(guī)模越來越大后,數(shù)據(jù)查找特別麻煩。數(shù)據(jù)很容易重復(fù)(冗余)、占用存儲(chǔ)空間多,數(shù)據(jù)結(jié)構(gòu)化被迫推進(jìn)。

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

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


nosql
隨著經(jīng)濟(jì)發(fā)展,村里小孩越來越多了(云計(jì)算的到來),玩具廠每年生產(chǎn)的玩具也多了。一個(gè)玩具庫(單機(jī))不夠用了,所以要多建立幾個(gè)公共玩具庫,玩具存放在不同的玩具庫(多臺(tái)計(jì)算機(jī))。為了滿足數(shù)據(jù)爆發(fā)式增長(zhǎng)的存儲(chǔ)需求,數(shù)據(jù)庫部署在多臺(tái)計(jì)算機(jī)上,也就是分布式數(shù)據(jù)庫,但是分布式和單機(jī)不同的地方在于關(guān)系嚴(yán)格性上,分布式要求數(shù)據(jù)關(guān)系不那么嚴(yán)格(半結(jié)構(gòu)化),主要是擴(kuò)容和大數(shù)據(jù)存儲(chǔ),所以Nosql(not only sql)就誕生了。
常見的Nosql有mongodb、hbase等,這里以mongodb為例。
數(shù)據(jù)庫連接
- 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集群
很多人可能會(huì)混淆分布式和集群的概念,分布式更像是業(yè)務(wù)拆分到不同服務(wù)器上,集群則是多臺(tái)服務(wù)器一起處理同個(gè)業(yè)務(wù)。比較復(fù)雜,后續(xù)再解釋。
數(shù)據(jù)庫圖鑒
目前市面上常見的數(shù)據(jù)庫品牌,主要有關(guān)系型和非關(guān)系型數(shù)據(jù)庫兩種。計(jì)算機(jī)世界發(fā)展快速,數(shù)據(jù)庫就像一個(gè)大生態(tài),愈發(fā)多態(tài)化多樣化。
關(guān)系型:Oracle、mysql、Postgresql nosql:mongodb、hbase

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

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