ACID同CAP嘅分別?

 在 科技, 資料庫

近期好忙,因為公司要起新project,所以要不斷自學好多嘢。而其中一樣就係同database有關嘅,事源係新project喺想起d microservice,而service背後都會儲data。咁就當然會考慮用邊隻database。而依家市面上有好多選擇,relational database已經有好多,依家仲有一埋nosql database,同時nosql database又有好多唔同類型,例如key-value、column family、document、graph、等等等等。

咁要決定用邊隻就有好多因表例如:business data model,使唔使好快,會唔會有update動作,使唔使search,點search,使唔使做clustering同幾銀等等等等。但今次我想講嘅只係一細part,因為我發現我好多同事唔知咩係CAP同埋會同ACID搞亂咗。希望我喺度會可以解釋清楚你聽。😄

首先講過出名嘅先,ACID。WIKI其實都有詳細解釋,我就嘗試深入淺出講下。

  • Atomicity
    依個對好多情況好重要!有佢會令到一個transaction(小心,transaction係有分level,例如relational database可以做到唔同statements喺同一條transaction,但好多出名嘅document database就只可係document level transaction)一係全部得,一係全部唔得。
    最出名嘅例子係櫃員機過數:我過錢俾你,我戶口扣咗錢,你戶口加錢。咁如果你戶口加唔到錢,理應我戶口就唔應該扣錢,咁只要扣錢同加錢喺同一個transaction度,就唔會出現扣咗錢但冇加到去人哋戶口嘅情況。
  • Consistency
    為咗可以令到data喺任何operation之後都唔會爛,為咗可以做到依點,所以relational database會有trigger、cascade、constraint等功能。
    用返上邊個例子,每個戶口可以有上限係一千蚊,咁如果我過五百去你邊,扣錢嗰度就冇問題,但到你加錢嗰度,如果加五百後多過一千,咁個database就會鬧你同唔俾你做住依樣。同時如個依兩個動作係Atomicity(同一個transaction),咁我個戶口就會還原(rollback)。
  • Isolation
    同時我哋會預咗個database會喺同一時間俾好多人用,由其係依個係distrubited computing年代,technical d講就會要識處理concurrent case。要處理concurrent case其實唔難😎,如果大家都係對住同一個住做嘢,解決方法就係「等」。我做緊嗰時你就要等,咁當然你要話俾人知做緊嘢啦,方法就係我做之前睇下有冇做喺度開咗transaction,如果有,變相其實佢個lock咗依度。咁我就唯有等等佢完晒先做嘢。
    又有上邊嘅例子,我又過錢俾你,但同時某某又過錢俾你,我喺個database就會叫某某個operation等等,當我個operation完成咗或者衰咗,咁某某個operation就會開始
  • Durability
    最後依個其實係common sense。用得database就梗係想佢唔會唔見咗,依個要求就係話當個database話你知你過數成功後,就算佢死機,佢都唔會冇咗你做過嘅嘢。
    再再用上邊例子,我過完數俾你,點知database死咗,但當佢著返時,我個戶口過咗俾你嘅錢係不變,同時你都會收到嗰筆錢。

好啦,到新嘢,咁當然講講少少背景先,喺WIKI度可以知道CAP係講緊喺distributed computer system度我哋只可以做到是但兩個(即係CA、AP或者PC)。依樣嘢好緊要,因為我識好多同行係唔知道

  1. CAP同ACID其他係講繄唔同level嘅嘢
    1. CAP:cluster level
    2. ACID:single instance level
  2. 唔會有distributed database可以做晒CAP

同埋個「C」係唔同意思嘅,詳情如下:

  • Consistency
    依個Consistency係指cluster level,即係喺同一個cluster度,唔同嘅node之間會唔會儲咗唔同嘅嘢。例如我有十隻node,咁頭先我喺node 1度過咗數俾你,完成咗。喺distributed computer system,你係唔會知你去咗邊個node度,如是者我過咗數後,你去check,可能你會入咗node 2度,咁你當然會預你會睇到筆錢過咗入你戶口啦。依個要求就係CAP嘅Consistency。
    而市面上大多數都係用eventually consistent,即係唔係即刻update晒全部node,而佢只係保證有朝一日全部node都會update咗。
  • Availability
    依個即係話佢一定會俾到反應你,即使唔係最update嘅。咁樣會令你唔會因為佢某一個node有事而令你做唔到樣。
  • Partition tolerance
    即使網絡有事,有d nodes之間communicate唔到,但佢哋各自都function到。喺依個情況就要做出取捨,一係要Consistency,一係要Availability。

希望大家睇完唔會再搞錯ACID同CAP啦。😎

Recent Posts

發表意見

This site uses Akismet to reduce spam. Learn how your comment data is processed.

聯絡我們

如有任何查詢,可發送電郵給我,我會盡快回覆。

辨認不到?更換驗證碼。 captcha txt
0

請輸入關鍵字,然後按搜尋