การกำหนดขอบเขตในธุรกรรม IndexedDB

IndexedDB คืออะไร

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

มีอะไรใหม่บ้าง

การเปลี่ยนแปลงเพื่อน... เรามีการเปลี่ยนแปลงบางอย่างที่จะแสดงข้อผิดพลาดหากเราไม่จัดการด้วยการเปลี่ยนแปลงไวยากรณ์ง่ายๆ

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

หมายความว่าอย่างไรในโค้ด แทนที่จะส่งอาร์เรย์ว่างไปยัง database.transaction ให้ทำดังนี้

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

คุณควรกําหนดขอบเขตเป็นออบเจ็กต์สตอเรจหรือรายการออบเจ็กต์สตอเรจที่เฉพาะเจาะจง ดังนี้

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

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

แหล่งที่มาอื่นๆ

ไว้พบกันใหม่