แนวคิดของกรด

มีอยู่

3.1 การเกิดกรด

ตัวย่อ ACID ปรากฏ ครั้งแรกในปี 1983 ในบทความของ Theo Haerder และ Andreas Reuter เพื่อให้ข้อความง่ายขึ้นและทำให้น่าเชื่อถือมากขึ้น ฉันจะแปลส่วนหนึ่งของบทความนี้ (โดยลดขนาดลงเล็กน้อย) ข้อมูลโค้ดนี้ใช้ตัวอย่างธุรกรรมธนาคารที่มีการโอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่ง

แนวคิดของการทำธุรกรรมซึ่งในตัวอย่างรวมถึงการโต้ตอบทั้งหมดกับฐานข้อมูลระหว่าง$BEGIN_TRANSACTIONและ$COMMIT_TRANSACTIONกำหนดให้การดำเนินการทั้งหมดดำเนินการแยกกันไม่ได้: การดำเนินการทั้งหมดจะสะท้อนให้เห็นอย่างถูกต้องในสถานะของฐานข้อมูล หรือไม่มีอะไรเกิดขึ้น หาก ณ จุดใดเวลาหนึ่งก่อนที่จะเข้าถึง$COMMIT_TRANSACTIONผู้ใช้ป้อนคำสั่งERRORที่มี การ$RESTORE_TRANSACTIONเปลี่ยนแปลงจะไม่สะท้อนให้เห็นในฐานข้อมูล

เพื่อให้บรรลุถึงการแบ่งแยกไม่ได้ ธุรกรรมต้องมีคุณสมบัติสี่ประการต่อไปนี้:

ปรมาณู (ปรมาณู). ธุรกรรมต้องเป็นประเภททั้งหมดหรือไม่มีเลยตามที่อธิบายไว้ข้างต้น และไม่ว่าจะเกิดอะไรขึ้น ผู้ใช้ต้องรู้ว่าธุรกรรมอยู่ในสถานะใด

ความสอดคล้อง (ความสอดคล้อง). ธุรกรรมที่ถึงจุดสิ้นสุดตามปกติของธุรกรรม (EOT) และด้วยเหตุนี้จึงยอมรับผลลัพธ์ที่รักษาความสอดคล้องของฐานข้อมูล กล่าวอีกนัยหนึ่ง ธุรกรรมที่สำเร็จทุกรายการตามคำนิยาม ให้ผลลัพธ์ที่ถูกต้องเท่านั้น เงื่อนไขนี้จำเป็นต่อการรองรับคุณสมบัติที่สี่ - ความทนทาน

ความโดดเดี่ยว (การแยก). เหตุการณ์ที่เกิดขึ้นภายในธุรกรรมต้องถูกซ่อนไว้จากธุรกรรมอื่นๆ ที่กำลังดำเนินการพร้อมกัน หากไม่เป็นไปตามเงื่อนไขนี้ ด้วยเหตุผลดังกล่าวข้างต้น ธุรกรรมจะไม่สามารถกลับสู่จุดเริ่มต้นได้ เพื่อให้ได้การแยกจะใช้วิธีการที่เรียกว่าการซิงโครไนซ์ ...

ความทนทาน (ความทนทาน). เมื่อธุรกรรมเสร็จสมบูรณ์และยืนยันผลลัพธ์ไปยังฐานข้อมูลแล้ว ระบบจะต้องแน่ใจว่าผลลัพธ์เหล่านั้นรอดพ้นจากความล้มเหลวที่ตามมา เนื่องจากไม่มีขอบเขตของการควบคุมที่ครอบคลุมชุดของธุรกรรม ระบบจัดการฐานข้อมูล (DBMS) จึงไม่สามารถควบคุมเกินขอบเขตของธุรกรรมได้

ดังนั้นผู้ใช้ต้องรับประกันว่าหากระบบแจ้งว่ามีบางอย่างเกิดขึ้น แสดงว่ามี "บางอย่าง" เกิดขึ้นจริง เนื่องจากตามคำนิยามแล้ว ธุรกรรมใด ๆ (สำเร็จลุล่วง - S.K.) นั้นถูกต้อง ผลลัพธ์ของธุรกรรมที่ไม่ถูกต้องปรากฏขึ้นอย่างหลีกเลี่ยงไม่ได้ (เช่น ธุรกรรมที่มีข้อมูลที่ผิดพลาด) สามารถถูกกำจัดได้โดยธุรกรรม "เคาน์เตอร์" ที่เกี่ยวข้องเท่านั้น (ธุรกรรมเคาน์เตอร์)

3.2 การเกิดขึ้นของธุรกรรม

คุณสมบัติทั้งสี่นี้ ได้แก่ Atomicity, Consistency, Isolation และ Durability (ACID) อธิบายคุณลักษณะหลักของกระบวนทัศน์ของทรานแซกชันที่ส่งผลต่อการออกแบบระบบฐานข้อมูลหลายด้าน ดังนั้นเราจึงเชื่อว่าความสามารถของระบบใด ๆ เพื่อรองรับการทำธุรกรรมเป็นมาตรฐาน (การทดสอบกรด) ของคุณภาพของระบบนี้

โปรแกรม PL/1-SQL อย่างง่ายที่โอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่ง

FUNDS_TRANSFER. PROCEDURE,
 $BEGIN_TRANSACTION;
 ON ERROR DO;                                   /* in case of error */
          $RESTORE_TRANSACTION,                 /* undo all work */
          GET INPUT MESSAGE;                    /* reacquire input */
          PUT MESSAGE ('TRANSFER FAILED');      /* report failure */
          GO TO COMMIT;
          END;
 GET INPUT MESSAGE;                             /* get and parse input */
 EXTRACT ACCOUNT_EBIT, ACCOUNT_CREDIT,
  AMOUNT FROM MESSAGE,
 $UPDATE ACCOUNTS                               /* do debit */
              SET BALANCE ffi BALANCE - AMOUNT
     WHERE ACCOUNTS.NUMBER = ACCOUNT_DEBIT;
 $UPDATE ACCOUNTS                               /* do credit */
              SET BALANCE = BALANCE + AMOUNT
     WHERE ACCOUNTS.NUMBER = ACCOUNT_CREDIT;
 $INSERT INTO HISTORY                           /* keep audit trail */
    <DATE, MESSAGE>;
 PUT MESSAGE ('TRANSFER DONE');                 /* report success */
COMMIT:                                         /* commit updates */
 $COMMIT_TRANSACTION;
 END;                                           /* end of program */

ฉันได้ให้ตัวอย่างโค้ดนี้เพื่อเตือนคุณว่า อันที่จริง คุณสมบัติของกรด ในแง่หนึ่ง ถือได้ว่าเป็นข้อกำหนดสำหรับ DBMS ใด ๆ ที่อ้างสิทธิ์ในการสนับสนุนธุรกรรม และในทางกลับกัน เป็นคำจำกัดความของธุรกรรมในระบบฐานข้อมูล คำจำกัดความนี้สอดคล้องกับการปฏิบัติทางโลกอย่างเต็มที่ เป็นเรื่องยากที่จะจินตนาการ ตัวอย่างเช่น ลูกค้าที่ทำธุรกรรมธนาคาร (ไม่ว่าจะด้วยความช่วยเหลือจากพนักงานธนาคารหรือใช้บริการธนาคารทางอินเทอร์เน็ต) ไม่คาดหวังว่าธนาคารจะตอบสนองคุณสมบัติทั้งหมดของ ACID ธนาคารที่ไม่รองรับคุณสมบัติของกรดในการทำธุรกรรมจะดีที่สุดคือสูญเสียลูกค้าและที่เลวร้ายที่สุดคือล้มละลาย

3.3 การเชื่อมต่อกรด

เป็นสิ่งสำคัญอย่างยิ่งที่คุณสมบัติของกรดจะแยกออกจากกันไม่ได้ การละทิ้งคุณสมบัติใด ๆ จะทำให้ชุดค่าผสมที่เหลือไม่มีความหมาย โดยเฉพาะอย่างยิ่ง หากเราละทิ้งคุณสมบัติความสอดคล้อง (ตามความหมายที่ใช้ในข้อความข้างต้น) เราจะสูญเสียเกณฑ์สำหรับความถูกต้องของการทำธุรกรรม ระบบฐานข้อมูลจะไม่สามารถตัดสินใจในทางที่มีความหมายว่าการทำธุรกรรมจะได้รับอนุญาตหรือไม่กระทำ และการตรวจสอบความถูกต้องของการดำเนินการในสถานะปัจจุบันของฐานข้อมูลทั้งหมดจะต้องดำเนินการในรหัสแอ็พพลิเคชัน

คุณต้องเข้าใจว่าในกรณีนี้เรากำลังพูดถึงความสอดคล้องเชิงตรรกะ ลูกค้าของธนาคารต้องการให้ธนาคารทำงานตามกฎที่กำหนดโดยเขาและลูกค้าทราบ ดังนั้นจึงเป็นไปไม่ได้ที่จะดำเนินการธุรกรรมใด ๆ ที่ละเมิดกฎเหล่านี้ เพื่อให้ธุรกรรมถัดไปของลูกค้ารายเดียวกันถูกดำเนินการใน สิ่งแวดล้อมตกลงตามกฎเหล่านี้

ลูกค้าของร้านค้าออนไลน์ต้องการให้สินค้าที่เขาสั่งซื้อและชำระเงินส่งถึงเขาในเวลาที่เหมาะสม (ตามกฎที่กำหนดและเป็นที่รู้จักของลูกค้า) ไม่อย่างนั้นเขาจะไม่ไว้ใจร้านนี้ ในขณะเดียวกัน ลูกค้าของธนาคารหรือลูกค้าของร้านอินเทอร์เน็ตก็ไม่สนใจเกี่ยวกับครัวภายในขององค์กร การดำเนินการภายในใดที่ต้องทำเพื่อทำธุรกรรมให้เสร็จสมบูรณ์ ลูกค้าไม่สนใจว่าจะรักษาความสอดคล้องทางกายภาพขององค์กรนี้อย่างไร การดำเนินการในระดับกายภาพเป็นอย่างไร

หาก DBMS ดูแลการรักษาความสอดคล้องทางตรรกะของธุรกรรม (และฐานข้อมูล) แอปพลิเคชันก็จะง่ายขึ้น เข้าใจได้มากขึ้น และเชื่อถือได้มากขึ้น ตรรกะทั้งหมดของพื้นที่แอปพลิเคชัน (ธนาคาร ร้านค้า คลังสินค้า ฯลฯ) เกี่ยวกับธุรกรรมและสถานะที่ถูกต้องของข้อมูลจะเข้าสู่ระบบฐานข้อมูล และข้อกำหนดสำหรับระบบนี้ง่ายมาก: รองรับธุรกรรม ACID โดยคำนึงถึงกฎความสอดคล้องที่แอปพลิเคชันให้ไว้ในฐานข้อมูล จากมุมมองของฉัน การปฏิเสธธุรกรรม ACID สร้างความยุ่งยากให้กับนักพัฒนาแอปพลิเคชัน ซึ่งไม่ว่าคุณจะชอบหรือไม่ก็ตาม จะต้องดำเนินการบางอย่างที่คล้ายคลึงกันเพื่อตอบสนองความต้องการตามธรรมชาติของลูกค้า

และขอย้ำอีกครั้งว่าคุณสมบัติ ACID กำหนดแนวคิดของการทำธุรกรรม ในความเห็นของฉัน เพื่อให้มีความเป็นไปได้อย่างน้อยในการพูดคุยเกี่ยวกับระบบการจัดการข้อมูลธุรกรรมซึ่งไม่รองรับคุณสมบัติของความสอดคล้องของธุรกรรม จำเป็นอย่างยิ่งที่จะต้องกำหนดความหมายของคำว่าธุรกรรมในกรณีนี้

น่าเสียดายที่ทุกวันนี้ ในหลาย ๆ กรณี (โดยเฉพาะอย่างยิ่ง นี่เป็นลักษณะเฉพาะของทิศทางของ NoSQL) ผู้คนพูดถึงการรองรับแอปพลิเคชัน OLTP โดยไม่ได้ระบุว่าหมายถึงธุรกรรมประเภทใดเลย ดังนั้นในบทความนี้ ฉันจะใช้ธุรกรรม ACID ที่รวมกันเพื่ออ้างถึงธุรกรรมจริง และธุรกรรมที่ไม่เข้าเงื่อนไขจะใช้ในความหมายที่ไม่เป็นทางการ ซึ่งแตกต่างกันในบริบทที่แตกต่างกัน

ให้เราจัดการกับ "ทฤษฎีบท" ของ CAP และพยายามค้นหาว่าความสอดคล้องหมายถึงอะไรในความหมายของบรูเออร์

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ