最後更新時間 03/06/2022
SQL 的世界有秩序、準則、結構,它無法容忍零散、彈性、隨意,因此 NoSQL 出現了,它的世界能零散、彈性、隨意,可以運作起來就是沒有 SQL 有效率。
天啊,那天資料庫的課堂上,老師一席天書般的話,不就是在講我的人生嗎。原本被大量英文技術名詞弄瘋的我,猛然看到一點光。
就像人生,人生的藍圖很長,從小到大,多數父母們總希望孩子可以照著制式範本、社會規則走,但不可能千篇一律,失控、脫序總是會在某些時候發生,甚至是常常發生,此時必須有機制去解決這個問題,可能是接受、寬容、或者調整、改變。
什麼?你問我 SQL 和 NoSQL 是什麼?他們是指查詢資料庫的兩類方法,並非資料庫。
從名字來看,SQL 是 Structured Query Language 的簡寫,就是指一套層次分明、規定清楚的查資料指令,而 NoSQL 是 Not Only SQL,除了 SQL 以外的查詢方法,都屬於後者。單從字面就看出他們出現的先後,SQL 在前,NoSQL 在後。
許多大公司開發的資料庫,例如 Oracle 的 MySQL 、Microsoft 的 SQL Server 等,他們就是用 SQL 查詢的資料庫。而MongoDB則是以一組組 NoSQL 來查詢的資料庫。
簡單來說 SQL 的限制很多,需要在種種限制、秩序、規則下才能存放資料,它的基本原則為 ACID- Atomicity, Consistency, Isolation, Durability,A 是原子性(Atomicity),每一次交易得像是一顆完整的原子(Atomic),不能有任何切割,在沒有意外的情況下,整次交易,不管過程有多少個動作,都會直接完整地全部執行,一旦發生錯誤,就會回到最原初還沒交易之前的模樣,不會有部分完成的情況發生。要就是成功,不然就是失敗。再來是 C 一致性(Consistency),資料庫的資料必須滿足綱要所定義的所有限制;I為隔離性(Isolation)就是被隔離,在執行交易時不會被其他同時正在執行的動作影響。最後是 D 持久性(Durability),指令成功後永久有效。
SQL 這思維根本整人嘛,誰能在第一步建資料庫時把所有東西都想好(好吧我知道有),但我腦子天生亂序,可能一輩子都卡關。所以呢,NoSQL的出現就是為了解救我們這種隨意的人,它可彈性,接受隨意、零散的資料。它的基本原則是是 CAP 定理,C 一樣是一致性(Consistency),A 是可用性(Availability),P 為部分容忍性(Partition Tolerance)。這裡的一致性跟SQL的一致性定義並不同,這裡的一致性是指所有節點(nodes)在同一時間具有相同資料內容。而可用性則是說,在某部分節點忽然故障的情況下,整體是否還能繼續使用。
最後講的這項「部分容忍性」是我覺得非常有趣的地方,也是因為這個詞萌生了我寫這篇的念頭。從字面來看。可以解釋成,這是一種不完美苛求,而要能容忍部分錯誤(正確的反面多半為錯誤)的能力,技術層面來說就是資料庫在執行任務時,發現資料部分有遺失、不一致,並不會影響整個資料庫的運作。
不過,學者證明過,CAP 定理只能同時滿足其中的兩項,不可能三項都滿足; 而要進入 SQL 資料庫的資料,卻得完整符合 ACID 的每一項要求。可見 SQL 和 NoSQL 真的很不一樣。
實際的例子如 NoSQL 適合搜集數據。像臉書無時無刻就在蒐集使用者資料,手機的App 也會,可能是手機廠牌、型號、作業系統版本等等,這些資料零散,因為我們給出資料並不一致,若此時一定要符合 ACID,那各家公司們永遠搜集不到資料作分析。SQL 的嚴謹則是適合金融業、電信業。
這樣的發展使我想到,人不也如此嗎,每個人不可能都在同一套公式裡過活,也不可能始終如一,我們會隨著時間空間的變化而有所改變,如果腦子裡覺得一定要怎麼樣的想法活著,會很痛苦很難受。當遇到例外、突發狀況、甚至是不自覺地改變,我們可以做的是想辦法解決、調整或是接受。資料庫這種看似死的東西都有這樣的問題,何況是我們這種一分一秒都可以動來動去的生物呢(不過資料庫好像也不是死的,因為是我們在使用它哈哈哈
L Note
這篇主要不是介紹他們的差異,單純只是分享從中獲得的人生啟示。這源於我在這學期修的其中一門課 Database Foundation,它整體有不有趣我就不多說了。但到了學期末我發現一開始說的 SQL 到後來出現的 NoSQL 有著這樣的演變,欣喜若狂,覺得驚艷所以決定寫下來以茲紀念。
這學期我修了課統計學(Statistics)、行銷管理(Marketing Management)、R、Database Foundation,多數看似冰冷理性的數字、程式語言裡( Marketing 例外),都有著人生道理以及哲學,當我學越多發現很多情緒是數字帶來的變化而發生,也或者藉由數字來具體描述感性。
延伸閱讀:
Life: Just Like Development of SQL to NoSQL (Enlgish Version)
Is it possible to predict a person’s future by linear regression?
Ways the Job Search Process Resembles Machine Learning: Gradient Descent Helps Us to Get Dream Jobs