ผู้พัฒนาโครงการ SQLite ได้เริ่มทดสอบแบ็กเอนด์ HCtree แบบทดลองแล้ว ซึ่งรองรับการล็อกระดับแถวและให้ความขนานในระดับสูงในการประมวลผลคิวรี
เกี่ยวกับแบ็กเอนด์ใหม่ที่พวกเขากำลังทำงานอยู่ มีการกล่าวถึงสิ่งนี้ มีวัตถุประสงค์เพื่อปรับปรุงประสิทธิภาพของการใช้ SQLite ในระบบไคลเอ็นต์เซิร์ฟเวอร์ พวกเขาต้องประมวลผลคำขอเขียนพร้อมกันจำนวนมากไปยังฐานข้อมูล
ลา โครงสร้าง b-tree เดิมใช้ ใน SQLite เพื่อเก็บข้อมูล ไม่ได้ออกแบบมาสำหรับการโหลดประเภทนี้ซึ่งจำกัด SQLite ให้เขียนไปยังสตรีมเท่านั้น ในการทดลอง นักพัฒนาเริ่มพัฒนาโซลูชันทางเลือกที่ใช้โครงสร้าง HCtree สำหรับการจัดเก็บ ซึ่งเหมาะสมกว่าสำหรับการดำเนินการเขียนแบบขนาน
โครงการ HC-tree (hctree) เป็นความพยายามในการพัฒนาแบ็กเอนด์ฐานข้อมูลใหม่ที่ปรับปรุงบน SQLite ปกติดังนี้:
การทำงานพร้อมกันที่ดีขึ้น: การใช้ส่วนขยายเริ่มต้นพร้อมกันจะเปลี่ยนแปลงสิ่งนี้เพื่อให้สามารถดำเนินการพร้อมกันได้โดยใช้การล็อกในแง่ดีที่ระดับเพจ สิ่งนี้ช่วยปรับปรุงการทำงานพร้อมกันได้บ้าง แต่การล็อกระดับเพจสามารถตรวจพบความขัดแย้งระหว่างธุรกรรมที่ไม่ขึ้นกับตรรกะ และการดำเนินการ COMMIT ยังจำเป็นต้องทำให้เป็นอนุกรม
การสนับสนุนการจำลองแบบ: Stock SQLite รองรับ ส่วนขยายเซสชันซึ่งช่วยให้เนื้อหาของธุรกรรมที่ตกลงได้รับการทำให้เป็นอนุกรมสำหรับการส่งและแอปพลิเคชันไปยังฐานข้อมูลที่สอง Hctree รวมสิ่งนี้เข้ากับแบ็กเอนด์ของฐานข้อมูลและเพิ่มการสนับสนุนสำหรับการใช้ธุรกรรมดังกล่าวกับฐานข้อมูลผู้ตามในการกำหนดค่าผู้นำและผู้ตาม ในกรณีนี้ ธุรกรรมที่ได้รับจากฐานข้อมูลชั้นนำสามารถนำไปใช้ได้เร็วกว่าและมีการทำงานพร้อมกันมากกว่าที่เคยใช้กับฐานข้อมูลชั้นนำ เนื่องจากไม่มี การตรวจสอบธุรกรรม
การขจัดข้อจำกัดด้านขนาดฐานข้อมูล: Stock SQLite ใช้หมายเลขหน้า 32 บิต การใช้ขนาดหน้าเริ่มต้นที่ 4 KiB ทำให้มีขนาดฐานข้อมูลสูงสุด 2^44 ไบต์หรือ 16 TiB
เพื่อจัดการการทำงานหลายอย่างในเวลาเดียวกัน บันทึก HCtree ใช้กลไกการแยกธุรกรรม ซึ่งใช้การล็อกระดับเพจ คล้ายกับ MVCC (การควบคุมการบรรจุหลายเวอร์ชัน) แต่ใช้การควบคุมธุรกรรมตามช่วงคีย์และช่วงคีย์แทนชุดเพจ
การดำเนินการอ่านและเขียนจะดำเนินการโดยสัมพันธ์กับสแนปชอตของฐานข้อมูล การเปลี่ยนแปลงดังกล่าวจะมองเห็นได้ในฐานข้อมูลหลักหลังจากการทำธุรกรรมเสร็จสิ้นเท่านั้น
ลูกค้าสามารถใช้การดำเนินการสามอย่างเพื่อเปิดธุรกรรม:
- «เริ่ม«: การทำธุรกรรมไม่คำนึงถึงการเข้าถึงข้อมูลของลูกค้ารายอื่น หากมีการดำเนินการเขียนภายในธุรกรรม ธุรกรรมนั้นจะสามารถยอมรับได้ก็ต่อเมื่อไม่มีการดำเนินการเขียนอื่นๆ ไปยังฐานข้อมูลในช่วงเวลาที่ดำเนินการ
«เริ่มต้นพร้อมกัน«: การทำธุรกรรมรวบรวมข้อมูลเกี่ยวกับการเข้าถึงของลูกค้ารายอื่น หากดำเนินการเขียนภายในธุรกรรม ธุรกรรมนั้นสามารถคอมมิตได้หากทรานแซกชันอื่นถูกคอมมิตกับฐานข้อมูลตั้งแต่สร้างสแน็ปช็อต
«เริ่มต้นพิเศษ«: หลังจากเปิดธุรกรรมแล้ว ให้บล็อกการดำเนินการของธุรกรรมอื่นๆ จนกว่าจะเสร็จสิ้น
HCtree รองรับการจำลองแบบมาสเตอร์-สเลฟ ซึ่งช่วยให้คุณถ่ายโอนธุรกรรมไปยังฐานข้อมูลอื่นและเก็บฐานข้อมูลรองให้ซิงค์กับฐานข้อมูลหลัก
HCtree ยังลบขีดจำกัดขนาดฐานข้อมูล: แทนที่จะใช้ตัวระบุหน้าข้อมูล 32 บิต HCtree ใช้ตัวระบุ 48 บิต ซึ่งเพิ่มขนาดฐานข้อมูลสูงสุดจาก 16 เทบิไบต์เป็น 1 exbibyte (ล้านเทบิไบต์)
ประสิทธิภาพของ SQLite พร้อมแบ็กเอนด์ HCtree นั้นคาดว่าจะดีเท่ากับแบ็คเอนด์แบบเธรดเดี่ยวแบบคลาสสิกเป็นอย่างน้อย ไคลเอ็นต์ SQLite ที่รองรับ HCtree จะสามารถเข้าถึงทั้งฐานข้อมูล HC-tree และฐานข้อมูล SQLite เดิมได้
Fuente: https://sqlite.org/