ธุรกรรมฐานข้อมูลคืออะไร?


114

ใครสามารถให้คำอธิบายที่ตรงไปตรงมา (แต่ไม่ง่ายกว่าที่เป็นไปได้) เกี่ยวกับธุรกรรมที่ใช้กับคอมพิวเตอร์ (แม้ว่าจะคัดลอกมาจาก Wikipedia)

คำตอบ:


239

ธุรกรรมคือหน่วยงานที่คุณต้องการถือว่าเป็น "ทั้งหมด" มันจะต้องเกิดขึ้นเต็มหรือไม่เกิดขึ้นเลย

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

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


ขอบคุณสำหรับตัวอย่างง่ายๆ
Nomadme

อธิบายได้ดี!
Yan Myo Aung

81

ธุรกรรมเป็นวิธีการแสดงการเปลี่ยนแปลงสถานะ การทำธุรกรรมมีคุณสมบัติสี่ประการหรือที่เรียกกันทั่วไปว่ากรด:

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

ดูรายการ Wikipedia ACIDสำหรับรายละเอียดเพิ่มเติม

แม้ว่าโดยทั่วไปจะใช้กับฐานข้อมูล แต่ก็ไม่จำเป็นต้องเป็นเช่นนั้น (โดยเฉพาะอย่างยิ่งโปรดดูที่Software Transactional Memory )


46

นี่คือคำอธิบายง่ายๆ คุณต้องโอนเงิน 100 เหรียญจากบัญชี A ไปยังบัญชี B คุณสามารถทำได้:

accountA -= 100;
accountB += 100;

หรือ

accountB += 100;
accountA -= 100;

หากมีบางอย่างผิดพลาดระหว่างการดำเนินการครั้งแรกและครั้งที่สองในคู่ที่คุณมีปัญหา - เงิน 100 เหรียญหายไปหรือดูเหมือนว่าไม่มีที่ไหนเลย

ธุรกรรมคือกลไกที่อนุญาตให้คุณทำเครื่องหมายกลุ่มของการดำเนินการและดำเนินการในลักษณะที่พวกเขาทั้งหมดดำเนินการ (กระทำ) มิฉะนั้นสถานะของระบบจะเหมือนกับว่าพวกเขายังไม่ได้เริ่มดำเนินการเลย (ย้อนกลับ)

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

จะโอนเงิน 100 เหรียญหรือปล่อยให้ทั้งสองบัญชีอยู่ในสถานะเริ่มต้น


31

"ชุดคำสั่งการจัดการข้อมูลที่ต้องสมบูรณ์หรือล้มเหลวทั้งหมดโดยปล่อยให้ฐานข้อมูลอยู่ในสถานะที่สอดคล้องกัน"


2
ฐานข้อมูลไม่เพียง เราสามารถขยายแนวคิดนี้ไปยังส่วนประกอบอื่น ๆ เช่นบริการจัดคิวหรือสถานะของระบบภายนอก ดังนั้น "ชุดคำสั่งการจัดการข้อมูลที่ต้องสมบูรณ์หรือล้มเหลวทั้งหมดโดยปล่อยให้ระบบอยู่ในสถานะที่สอดคล้องกัน"
Michał Chaniewski

10

ธุรกรรมคือลำดับของการดำเนินการ SQL อย่างน้อยหนึ่งรายการที่ถือว่าเป็นหน่วย

โดยเฉพาะอย่างยิ่งธุรกรรมแต่ละรายการดูเหมือนจะทำงานแยกกันและยิ่งไปกว่านั้นหากระบบล้มเหลวธุรกรรมแต่ละรายการจะดำเนินการอย่างครบถ้วนหรือไม่ทั้งหมด

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

ธุรกรรมรองรับสิ่งที่เรียกว่าคุณสมบัติของกรด:

  • A: ปรมาณู;
  • C: ความสม่ำเสมอ;
  • ฉัน: การแยก;
  • D: ความทนทาน

4

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID = A tomicity, C onsistency, I solation, D urability

เมื่อคุณต้องการให้ทรัพยากรการทำธุรกรรมหลายรายการมีส่วนร่วมในธุรกรรมเดียวคุณจะต้องใช้บางอย่างเช่นโซลูชันการคอมมิตสองเฟส XAได้รับการสนับสนุนอย่างกว้างขวาง


1

ฉันขอแนะนำว่าคำจำกัดความของ 'การประมวลผลธุรกรรม' จะมีประโยชน์มากกว่าเนื่องจากครอบคลุมธุรกรรมเป็นแนวคิดในวิทยาการคอมพิวเตอร์

จากวิกิพีเดีย:

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

http://en.wikipedia.org/wiki/Transaction_processing#Implementations


1

นอกเหนือจากคำตอบข้างต้นแล้วควรสังเกตว่าอย่างน้อยในทางทฤษฎีไม่มีข้อ จำกัด ใด ๆ เกี่ยวกับทรัพยากรประเภทใดที่เกี่ยวข้องกับธุรกรรม

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


1

ธุรกรรมสามารถกำหนดเป็นชุดของงานที่ถือว่าเป็นหน่วยประมวลผลขั้นต่ำ หน่วยประมวลผลขั้นต่ำแต่ละหน่วยไม่สามารถแบ่งออกได้อีก

การดำเนินการหลักของธุรกรรมคือการอ่านและเขียน

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


0

ฉันคิดว่าธุรกรรมคือการกระทำของปรมาณูในแง่ของ DBMS

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

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


0

ธุรกรรมเป็นหน่วยประมวลผลข้อมูลที่แบ่งแยกไม่ได้ - ธุรกรรมทั้งหมดต้องมีคุณสมบัติของกรด:

เช่น: Atomicity, Consistency, Isolation and Durable Transaction คือทั้งหมดหรือไม่มีอะไรเลย แต่ไม่ใช่การคั่นกลาง (หมายความว่าหากคุณโอนเงินจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่งบัญชีหนึ่งจะต้องสูญเสียไปมากและอีกบัญชีหนึ่งจะต้องได้รับเงินจำนวนนั้น แต่ถ้า คุณโอนเงินจากบัญชีหนึ่งและอีกบัญชียังว่างอยู่ซึ่งจะไม่ใช่ธุรกรรม)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.