Untuk memastikan semantik atomicity, consistency, isolation, dan durability (ACID) pada tabel Delta, MetaService mengelola semua operasi modifikasi data sebagai transaksi secara seragam. Model kontrol konkurensi multiversi (MVCC) digunakan untuk menjamin isolasi operasi baca dan tulis pada snapshot, sedangkan model kontrol konkurensi optimis (OCC) digunakan untuk mengontrol konkurensi transaksi optimis.
Aturan deteksi konflik
Tabel berikut menjelaskan aturan yang digunakan untuk menangani konflik antara pekerjaan konkuren pada tabel non-partisi atau partisi yang sama.
Jenis Pekerjaan | INSERT OVERWRITE /TRUNCATE (pekerjaan yang selesai kemudian) | INSERT INTO (pekerjaan yang selesai kemudian) | UPDATE / DELETE (pekerjaan yang selesai kemudian) | MINOR COMPACT (pekerjaan yang selesai kemudian) | MAJOR COMPACT (pekerjaan yang selesai kemudian) |
INSERT OVERWRITE /TRUNCATE (pekerjaan yang selesai lebih awal) | Kedua pekerjaan berhasil. Data hasil pekerjaan yang selesai kemudian menimpa data hasil pekerjaan yang selesai lebih awal. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. |
INSERT INTO (pekerjaan yang selesai lebih awal) | Kedua pekerjaan berhasil. Data hasil pekerjaan yang selesai kemudian menimpa data hasil pekerjaan yang selesai lebih awal. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Kedua pekerjaan berhasil. Operasi kompaksi pekerjaan yang selesai kemudian berhasil. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. |
UPDATE /DELETE (pekerjaan yang selesai lebih awal) | Kedua pekerjaan berhasil. Data hasil pekerjaan yang selesai kemudian menimpa data hasil pekerjaan yang selesai lebih awal. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Kedua pekerjaan berhasil. Operasi kompaksi pekerjaan yang selesai kemudian berhasil. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. |
MINOR COMPACT (pekerjaan yang selesai lebih awal) | Kedua pekerjaan berhasil. Data hasil pekerjaan yang selesai kemudian menimpa data hasil pekerjaan yang selesai lebih awal. | Kedua pekerjaan berhasil. Data baru ditulis untuk pekerjaan yang selesai kemudian. | Kedua pekerjaan berhasil. Data baru ditulis untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Kedua pekerjaan berhasil. Operasi kompaksi pekerjaan yang selesai kemudian berhasil. |
MAJOR COMPACT (pekerjaan yang selesai lebih awal) | Kedua pekerjaan berhasil. Data hasil pekerjaan yang selesai kemudian menimpa data hasil pekerjaan yang selesai lebih awal. | Kedua pekerjaan berhasil. Data baru ditulis untuk pekerjaan yang selesai kemudian. | Kedua pekerjaan berhasil. Data baru ditulis untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. | Pekerjaan yang selesai lebih awal berhasil. Kesalahan dikembalikan untuk pekerjaan yang selesai kemudian. |
Optimalisasi konflik konkurensi
Aturan deteksi konflik yang disebutkan di atas tidak berlaku untuk operasi konkuren pada tingkat baris atau file. Serangkaian operasi pemrosesan data dikelola sebagai sebuah transaksi. Untuk operasi tertentu yang sering dilakukan, logika penanganan konflik transaksi dioptimalkan berdasarkan semantik operasi dengan prasyarat keakuratan data. Ini mendukung kontrol konkurensi dengan lebih baik. Sebagai contoh, Anda dapat melakukan operasi pengelompokan dan operasi INSERT INTO dalam satu transaksi secara bersamaan. Transaksi tidak gagal meskipun waktu mulai dan waktu commit transaksi tumpang tindih karena operasi pengelompokan hanya mengubah metode pengorganisasian data tanpa mengubah status data. Operasi pengelompokan dan operasi INSERT INTO tidak menyebabkan ketidaksesuaian status sehingga dapat dilakukan secara bersamaan. Logika penanganan konflik transaksi akan terus dioptimalkan untuk menyesuaikan dengan lebih banyak skenario.
Jika deteksi konflik gagal, ulangan tingkat metadata dilakukan dengan prasyarat keakuratan data. Data tidak perlu dibaca atau ditulis ulang, meningkatkan pengalaman pengguna dan mengurangi konsumsi sumber daya.
Metadata diperbarui secara atomik untuk memastikan konsistensi data.
Optimalisasi konflik konkurensi hanya berlaku untuk pengelolaan transaksi tabel tunggal.
Pengelolaan versi file data
Setiap transaksi menghasilkan sekumpulan file data baru. File data ini dikaitkan dengan versi transaksi berikut:
Versi Waktu: Menunjukkan waktu commit transaksi dari tipe TIMESTAMP. Versi waktu baru hanya dihasilkan untuk operasi yang dipicu oleh pengguna dan memiliki perubahan data logis. Operasi pengelompokan dan kompaksi hanya mengatur ulang dan mengoptimalkan data fisik tanpa menambahkan atau memodifikasi data, sehingga tidak ada versi waktu baru yang dihasilkan. Dengan cara ini, saat pengguna melakukan kueri inkremen berdasarkan versi waktu, file data yang dihasilkan oleh operasi pengelompokan dan kompaksi tidak di-query, memenuhi kebutuhan bisnis.
Versi ID: Integer auto-increment. Versi ID inkremen dihasilkan untuk setiap operasi data dalam transaksi, termasuk operasi pengelompokan dan kompaksi yang dilakukan dalam mesin. Versi ID terutama digunakan untuk manajemen transaksi internal tetapi juga tersedia bagi pengguna untuk kueri inkremen.