Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การรับรองความสมบูรณ์ของข้อมูล: คู่มือครบถ้วนสำหรับ Database Consistency

Database Consistency (ความสอดคล้องของฐานข้อมูล) คืออะไร?

Database consistency ถูกกำหนดโดยชุดค่าที่ทุกจุดข้อมูล (data points) ภายใน ระบบฐานข้อมูล ต้องสอดคล้อง (align) เพื่อที่จะอ่านและยอมรับได้อย่างถูกต้อง หากมีข้อมูลใดที่ไม่ตรงตามค่าที่กำหนดไว้ล่วงหน้า (preconditioned values) เข้าสู่ฐานข้อมูล จะทำให้เกิด consistency errors สำหรับชุดข้อมูล Database consistency ถูกบรรลุผ่านการสร้างกฎ (rules) การทำธุรกรรมข้อมูล (transaction of data) เขียน (written) ลงฐานข้อมูล ต้องเปลี่ยนแปลงเฉพาะข้อมูลที่ได้รับผลกระทบ ตามที่กำหนดโดย constraints, triggers, variables, cascades ฯลฯ ที่เฉพาะเจาะจง ที่ถูกสร้างโดยกฎที่ developer ของฐานข้อมูลตั้งไว้

ตัวอย่าง: สมมติคุณทำงานที่ National Traffic Safety Institute (NTSI) คุณได้รับมอบหมายสร้างฐานข้อมูลใบขับขี่ใหม่ของ California ประชากรของ California เพิ่มขึ้นอย่างรวดเร็วใน 10 ปีที่ผ่านมา ทำให้ต้องมีรูปแบบอักษรและตัวเลขใหม่สำหรับผู้ถือใบขับขี่ครั้งแรก ทีมของคุณกำหนดว่า ชุดค่าใหม่สำหรับใบขับขี่ California ในฐานข้อมูลของคุณคือ: 1 ตัวอักษร + 7 ตัวเลข ทุกรายการต้องปฏิบัติตามกฎนี้ รายการที่อ่านว่า "C08846024" – จะคืนค่า error ทำไม? เพราะค่าที่ป้อนเข้ามาคือ 1 ตัวอักษร + 8 ตัวเลข ซึ่งเป็นรูปแบบหนึ่งของ inconsistent data (ข้อมูลไม่สอดคล้อง)

Consistency ยังหมายความว่า การเปลี่ยนแปลงข้อมูลของ object ใด object หนึ่งในตารางหนึ่ง ต้องถูกเปลี่ยนแปลงในทุกตารางที่ object นั้นมีอยู่ ถ้ากลับไปที่ตัวอย่างใบขับขี่ ถ้าที่อยู่ของผู้ขับขี่ใหม่เปลี่ยน การอัปเดตนั้นต้องแสดงในทุกตารางที่ที่อยู่เดิมเคยมีอยู่ ถ้าตารางหนึ่งมีที่อยู่เก่า และอีกทั้งหมดมีที่อยู่ใหม่ นั่นจะเป็นตัวอย่างที่ดีของ data inconsistency (ความไม่สอดคล้องของข้อมูล)


หมายเหตุ: Database consistency ไม่รับประกันว่าข้อมูลที่นำเข้ามาในธุรกรรมใดๆ ถูกต้อง มันรับประกันแค่ว่าข้อมูลที่เขียนและอ่านภายในระบบ ตรงตาม prerequisites ทั้งหมดของข้อมูลที่มีคุณสมบัติเข้าได้ในฐานข้อมูล กล่าวง่ายๆ ตามตัวอย่างข้างต้น คุณสามารถป้อนธุรกรรมข้อมูลที่ตรงตามกฎ 1 ตัวอักษร + 7 ตัวเลข ได้ แต่ไม่รับประกันว่าข้อมูลตรงกับใบขับขี่จริง Database consistency ไม่คำนึงถึงว่าข้อมูลแทนอะไร แค่รูปแบบ (format) เท่านั้น

ทำไม Database Consistency จึงสำคัญ?

Consistent data (ข้อมูลที่สอดคล้อง) คือสิ่งที่ทำให้ฐานข้อมูลทำงานเหมือนเครื่องจักรที่เคลือบน้ำมันดี กฎ/ค่าที่ตั้งไว้ที่กัน inconsistent data (ข้อมูลไม่สอดคล้อง) ไม่ออกจาก primary databases และ replicas ทำให้ operations สบายคล่องกับ:

  • Accuracy (ความแม่นยำ)
  • Increased database space (พื้นที่ฐานข้อมูลเพิ่มขึ้น)
  • Faster and more efficient data retrieval (การดึงข้อมูลเร็วขึ้นและมีประสิทธิภาพมากขึ้น)

Database consistency ควบคุมข้อมูลทั้งหมดที่เข้ามา แม้ฐานข้อมูลจะเปลี่ยนแปลงเมื่อยอมรับข้อมูลใหม่ มันก็เปลี่ยนแปลงอย่างสอดคล้องและสอดคล้องกับ validation rules ที่ตั้งไว้ตั้งแต่ต้น ในโลกวันนี้ มีการตัดสินใจหลายล้านดอลลาร์ทุกวันทั่วโลกโดยอิงจาก perceived consistency ของฐานข้อมูล เมื่อข้อมูลเรียลไทม์กลายเป็นสถานะปกติใหม่สำหรับธุรกิจดิจิทัลสมัยใหม่ จึงมีความสำคัญมากที่จะมี validation rules เพื่อให้ชุดข้อมูลปราศจากข้อมูลผิดพลาด เพราะนั่นก็เพิ่ม latency ทำให้ real-time experiences ไม่ได้เป็น real-time จริงๆ แล้ว

ตัวอย่าง Database Consistency

ตัวอย่างของ database consistency operation ในโลกจริงคืออะไร? เราได้สำรวจตัวอย่างหนึ่งกับ NTSI scenario ข้างต้นแล้ว มาเปลี่ยนไปที่โลกของการธนาคาร

สมมติคุณโอนเงินจากบัญชีหนึ่งไปอีกบัญชี คุณเพิ่งโอน $1200 เข้าบัญชีที่มีอยู่แล้ว $300 คุณ refresh มั่นใจว่าจะเห็น balance $1500 แต่มันไม่สะท้อน operation ล่าสุดนี้ ในบัญชีของคุณ กลายเป็น $0 ความผิดปกติทางเทคนิคนี้เป็นตัวอย่างหลักของ weak consistency (ความสอดคล้องอ่อน) และอาจทำให้ต้องใช้เวลา troubleshooting กับเจ้าหน้าที่ธนาคาร ปัญหาแบบนี้อาจทำลายชื่อเสียงแบรนด์และมีค่าใช้จ่ายสูงมาก Strong consistency ในระบบฐานข้อมูลกำลังกลายเป็น non-negotiable (สิ่งที่ต่อรองไม่ได้) สำหรับ developers และ consumers ทั้งคู่

Strong Consistency vs Weak Consistency

Strong Consistency (ความสอดคล้องแข็งแกร่ง) หมายถึง ข้อมูลทั้งหมดใน primary, replica และ nodes ที่เกี่ยวข้องทั้งหมด ตรงตาม validation rules และเหมือนกันในเวลาใดเวลาหนึ่ง ด้วย strong database consistency ไม่ว่า client ไหนเข้าถึงข้อมูล พวกเขาจะเห็นข้อมูลที่อัปเดตล่าสุดซึ่งปฏิบัติตามกฎที่ตั้งไว้สำหรับฐานข้อมูลเสมอ

Weak consistency (ความสอดคล้องอ่อน) คล้ายกับ far west (ตะวันตกโหด) ไม่มี assurance (การรับประกัน) ว่าข้อมูลใน primary, replica, หรือ nodes เหมือนกันในเวลาใดเวลาหนึ่ง Client คนหนึ่งในอินเดียอาจเข้าถึงข้อมูลและเห็นข้อมูลที่ผ่าน validation rules แต่อาจไม่ใช่ข้อมูลที่อัปเดตล่าสุด ทำให้เกิด consistency errors พวกเขาอาจกระทำจากข้อมูลที่ไม่อัปเดตแล้ว แม้จะเคยเกี่ยวข้องในอดีต

Consistency Levels (ระดับความสอดคล้อง)

Consistency levels เป็นอีกชุดค่าที่กำหนดไว้ล่วงหน้า ที่สั่งว่าต้องมี replicas หรือ nodes กี่ตัวต้องตอบกลับด้วยข้อมูลใหม่ที่ permissible ก่อนที่จะ acknowledge ว่าเป็น valid transaction การดำเนินการนี้สามารถเปลี่ยนได้ต่อ transaction basis (ต่อธุรกรรม) ดังนั้น เช่น programmer สามารถสั่งได้ว่าแค่สอง nodes ต้องอ่านข้อมูลที่ป้อนเข้ามาใหม่ ก่อนจะ acknowledge data consistency เมื่อข้ามเกณฑ์นั้น มันจะถูกมองว่าเป็น consistent data ตลอดไป

Isolation Levels (ระดับการแยกตัว)

Isolation levels เป็นส่วนหนึ่งของ ACID (Atomicity, Consistency, Isolation, Durability) properties ของฐานข้อมูล ACID เป็นแนวคิดพื้นฐานของ database consistency กับ SQL databases และเป็นสิ่งที่ฐานข้อมูลบางอย่างปฏิบัติตามเพื่อเพิ่มประสิทธิภาพ database consistency Isolation เป็นหนึ่งใน properties ของ ACID และ它把某些数据从数据库网络中的所有信息中隔离出来,防止被其他用户事务修改。Isolation 被用来限制并发事务中产生的无关数据的读取和写入。

มี 4 ประเภทของ isolation levels:

  • Read Uncommitted: ระดับต่ำสุด หยุด row updates หาก transaction ก่อนหน้าให้ uncommitted update แก่ row นั้น
  • Read Committed: ไม่อนุญาต "dirty reads" บล็อก reads หรือ writes ทั้งหมด หาก transaction ถูก update แล้วแต่ยังไม่ committed
  • Repeatable Read: ระดับนี้เก็บ row ของข้อมูลที่กำลังอ่าน ไม่ให้ถูกเข้าถึงและอาจจะถูก update
  • Serializable: ระดับ isolation สูงสุด serializable มักจะ lock ตารางทั้งหมด แทนที่จะเป็น row เฉพาะของข้อมูล

Database Consistency FAQs

ข้อมูลสอดคล้อง (consistent) หมายถึงอะไร?

ข้อมูลสอดคล้องหากมันปรากฏเหมือนกันใน nodes ที่เกี่ยวข้องทั้งหมดในเวลาเดียวกัน ไม่ว่าผู้ใช้จะเป็นใคร และเข้าถึงจากที่ไหน ทางภูมิศาสตร์

Data consistency เหมือนกับ Database consistency หรือไม่?

ไม่ Database consistency ต้องการ validation rules สำหรับข้อมูลที่เข้าสู่ network เพื่อให้มัน consistent สูตรมาก (formula-wise) กับข้อมูลอื่นๆ ในตาราง

Data consistency คือกระบวนการที่ข้อมูลถูกเก็บให้ uniform (สม่ำเสมอ) ที่สุดตลอด network และระหว่างแอปพลิเคชันจำนวนมากที่ใช้ข้อมูลนั้น

Eventual consistency คืออะไร?

ด้วย eventual consistency ข้อมูลที่ผ่านการ update จะในที่สุด (eventually) สะท้อนในทุก nodes ที่ข้อมูลนั้นถูกเก็บ ในที่สุด ทุก nodes จะผลิตข้อมูลเดียวกันเมื่อ client ใดๆ เข้าถึงใน network ผ่าน eventual consistency

ตารางเดียวใน relational database ประกอบด้วย?

ข้อมูลทั้งหมดใน relational database จัดเก็บในตาราง ซึ่งประกอบด้วย rows และ columns จุดข้อมูลจัดระเบียบใน rows และ columns นี้ Rows ซึ่งมักเรียกว่า "records" ปกติแทน categories ของข้อมูล ในขณะที่ columns หรือ "fields" แทน "instances" ตารางอยู่ภายในฐานข้อมูลและช่วยให้ข้อมูลไม่ซ้ำซ้อนด้วย subject-based design

Relational database ประกอบด้วย collection ของ?

Tables

ACID Model เปรียบเทียบกับ BASE Model ยังไง?

ความแตกต่างหลักระหว่าง ACID และ BASE (Basically Available, Soft State, Eventually Consistent) models คือ ในขณะที่ ACID ทำงานเพื่อเพิ่มประสิทธิภาพ database consistency BASE 强化 high availability ACID รักษา transactions ให้ consistent ดังนั้น ถ้าคุณไปกับ BASE model โปรดแน่ใจว่า consistency ยังคงเป็น top priority และได้รับการแก้ไขอย่างครบถ้วน

Redis databases consistent หรือไม่?

เมื่อ Redis ถูกใช้เป็น cache consistency ที่ถามอาจเป็นระหว่าง Redis instances (primary/replica) และระหว่าง Redis cache และ Redis as a primary database ในกรณีนี้ data สามารถ inconsistent ได้ หากข้อมูลระหว่างสองอย่างนั้นไม่ตรงกัน บล็อกของเรา Three Ways to Maintain Cache Consistency แก้ปัญหานี้

สำหรับ open source Redis มี weak consistency แต่ Redis Enterprise's Active–Active Geo-Distribution ให้ strong eventual consistency

สนใจ cloud caching techniques สำหรับ enterprise applications? คลิกด้านล่างเพื่ออ่าน Lee Atchison's Caching at Scale with Redis