ระดับการแยกฐานข้อมูลด้วย PostgreSQL และ Spring Boot
ในระบบการจัดการฐานข้อมูล การแยกหมายถึงระดับที่ธุรกรรมถูกแยกออกจากผลกระทบของธุรกรรมอื่นที่ทำงานพร้อมกัน
คุณสามารถสอบถามฐานข้อมูล PostgreSQL หรือ MySQL โดยใช้ระดับการแยกที่แตกต่างกันในแอปพลิเคชัน Spring Boot ทั้งนี้ขึ้นอยู่กับความต้องการของแอปพลิเคชันของคุณ
คุณสามารถทำได้โดยการรวม คำอธิบายประกอบ @Transactionalเข้ากับIsolationenum ซึ่งช่วยให้เราระบุระดับการแยกที่ต้องการสำหรับธุรกรรมของคุณ
ในบล็อกนี้ เราจะเห็นว่าเรามีการแยกประเภทใดบ้าง และเราจะบรรลุสิ่งนั้นได้อย่างไรโดยใช้แบบสอบถาม PostgreSQL และ Spring Boot@Transactional annotation.
ระดับการแยกฐานข้อมูล
- อ่านไม่มีข้อผูกมัด : ธุรกรรมสามารถเข้าถึงข้อมูลที่ไม่มีข้อผูกมัดจากธุรกรรมอื่นที่ระดับการแยกนี้ ซึ่งอาจส่งผลให้เกิดการอ่านที่สกปรก พิจารณาธุรกรรมที่แก้ไขบันทึกฐานข้อมูล แต่ล้มเหลวในการยืนยันหรือย้อนกลับธุรกรรม ธุรกรรมอื่นที่อ่านเรกคอร์ดเดียวกันอาจดึงข้อมูลที่ไม่มีข้อผูกมัด ส่งผลให้เกิดความไม่สอดคล้องกัน
- Read Commited : ธุรกรรมที่ระดับการแยกนี้สามารถอ่านข้อมูลที่คอมมิตจากธุรกรรมอื่นๆ เท่านั้น พิจารณาธุรกรรมที่ปรับเปลี่ยนเรกคอร์ดฐานข้อมูล และยอมรับธุรกรรมนั้น ธุรกรรมที่ตามมาซึ่งอ่านเรกคอร์ดเดียวกันจะสามารถดึงข้อมูลที่คอมมิตเท่านั้น
- อ่านซ้ำได้ : ธุรกรรมในระดับการแยกนี้สามารถอ่านข้อมูลที่คอมมิตจากธุรกรรมอื่นเท่านั้น และจะไม่เห็นการแก้ไขใด ๆ ที่ทำโดยธุรกรรมอื่น ๆ จนกว่าจะมีการคอมมิต พิจารณาการทำธุรกรรมที่อ่านชุดของบันทึกจากฐานข้อมูล แม้ว่าธุรกรรมอื่นจะแก้ไขหรือลบเรกคอร์ด ธุรกรรมแรกจะยังคงเห็นข้อมูลดั้งเดิมต่อไปจนกว่าจะยอมรับ
- ทำให้เป็นอนุกรมได้ : ธุรกรรมจะดำเนินการที่ระดับการแยกนี้ในลักษณะที่ดูเหมือนว่าจะดำเนินการตามลำดับ ทีละรายการ พิจารณาธุรกรรมที่เกิดขึ้นพร้อมกันสองรายการ โดยธุรกรรมหนึ่งแก้ไขเรกคอร์ด และอีกธุรกรรมหนึ่งลบเรกคอร์ดเดียวกัน ธุรกรรมถูกประมวลผลตามลำดับที่ระดับการแยกนี้ และธุรกรรมหนึ่งรายการจะถูกบล็อกจนกว่าธุรกรรมถัดไปจะเสร็จสมบูรณ์
หมายเหตุ: ระดับการแยกเริ่มต้นใน PostgreSQL READ COMMITTEDคือ
กำหนดค่าระดับการแยกใน PostgreSQL
ใน PostgreSQL คุณสามารถกำหนดค่าระดับการแยกได้โดยใช้SET TRANSACTIONคำสั่ง ซึ่งช่วยให้คุณกำหนดระดับการแยกสำหรับธุรกรรมปัจจุบันได้ ขั้นตอนมีดังนี้:
ใช้เครื่องมือไคลเอ็นต์ เช่น pgAdmin เพื่อเชื่อมต่อกับฐานข้อมูล PostgreSQL ของคุณ
เริ่มต้นการทำธุรกรรมโดยพิมพ์BEGINหรือSTART TRANSACTION.
หากต้องการให้ระดับการแยกที่เหมาะสม ให้ใช้SET TRANSACTIONคำสั่ง หากต้องการเปลี่ยนระดับการแยกเป็นการอ่านที่คอมมิต ให้ดำเนินการคำสั่งต่อไปนี้:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
ภายในธุรกรรม ดำเนินกิจกรรมฐานข้อมูลของคุณ
เมื่อคุณทำกิจกรรมของคุณเสร็จแล้ว ให้ใช้ คำสั่ง COMMITหรือROLLBACKเพื่อคอมมิตหรือย้อนกลับธุรกรรม
โปรดทราบว่าระดับการแยกสามารถปรับเปลี่ยนได้ทั่วโลกสำหรับเซิร์ฟเวอร์ Postgresql ทั้งหมดโดยใช้postgresql.confไฟล์ อย่างไรก็ตาม การตั้งค่าระดับการแยกที่ระดับธุรกรรมจะให้การควบคุมที่ละเอียดมากขึ้นสำหรับระดับความสอดคล้องและการทำงานพร้อมกันในแอปพลิเคชันของคุณ
หากต้องการเปลี่ยนระดับการแยก ให้เปิด ไฟล์และ แก้ไขpostgresql.confพารามิเตอร์ transaction_isolationพารามิเตอร์นี้สามารถมีค่าต่อไป[serializable, repeatable read, read committed, read uncommitted]นี้ ตรวจสอบเพิ่มเติมได้ที่ลิงค์ นี้
กำหนดค่าระดับการแยกใน Spring Boot
ขั้นตอนมีดังนี้:
ใช้ คำอธิบายประกอบ @Transactionalเพื่ออธิบายวิธีการดำเนินการค้นหาฐานข้อมูล
ตั้งค่าแอตทริบิวต์การแยกของ คำอธิบายประกอบ @Transactionalเป็นจำนวนการแยกที่ต้องการ ในการตั้งค่าระดับการแยกเป็น READ COMMITTED ให้ใช้รหัสต่อไปนี้:
@Transactional(isolation = Isolation.READ_COMMITTED)
public void performDatabaseQuery() {
// Perform your database query here
}
ตั้งค่าระดับการแยกธุรกรรมเริ่มต้นใน DataSource bean ของแอปพลิเคชัน Spring Boot คุณสามารถทำได้โดยการใส่รหัสต่อไปนี้ในไฟล์กำหนดค่าของแอปพลิเคชันของคุณ:
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
dataSource.setUsername("myusername");
dataSource.setPassword("mypassword");
dataSource.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); // Set default isolation level
return dataSource;
}
หากคุณสนุกกับการอ่านข้อความนี้ อย่าลืมปรบมือ
ฉันหวังว่าฉันจะสามารถอธิบายระดับการแยกในฐานข้อมูลและวิธีสืบค้นด้วยการแยกประเภทต่างๆ ได้
ขอบคุณ





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)