التوافق مع تسجيل الكتابة المسبقة للتطبيقات

يقدم Android 9 وضعًا خاصًا لـ SQLiteDatabase يسمى تسجيل التوافق للكتابة المسبقة (WAL) والذي يسمح لقاعدة البيانات باستخدام journal_mode=WAL مع الحفاظ على سلوك الاحتفاظ باتصال واحد كحد أقصى لكل قاعدة بيانات.

يتم تمكين التوافق WAL لقاعدة بيانات التطبيق بشكل افتراضي ما لم يكن التطبيق يحتوي على أي مما يلي:

  1. تم الاشتراك أو إلغاء تسجيل الكتابة المسبقة عن طريق استدعاء SQLiteDatabase.enableWriteAheadLogging أو disableWriteAheadLogging
  2. وضع دفتر اليومية المطلوب بشكل صريح عن طريق استدعاء SQLiteDatabase.OpenParams.setJournalMode(String mode)

يمكن أن يؤدي تمكين وضع دفتر اليومية WAL إلى تحسين كبير في الأداء وتقليل كمية عمليات الكتابة. على سبيل المثال، في نظام الملفات ext4، يمكن أن يؤدي WAL إلى تحسين سرعة الكتابة بمقدار 4x.

يتم تمكين التوافق WAL افتراضيًا ولا يتطلب أي تنفيذ إضافي.

تعطيل التوافق WAL

لتعطيل وضع التوافق WAL، قم بتراكب مورد التكوين المدعوم db_compatibility_wal_supported .

على سبيل المثال:

<bool name="db_compatibility_wal_supported">false</bool>

قد ترغب في تعطيل التوافق WAL للتكوينات التي لا يوفر فيها وضع دفتر اليومية WAL ميزة الأداء مقارنة بأوضاع دفتر اليومية التقليدية. على سبيل المثال، في نظام الملفات F2FS، على الرغم من أن SQLite يدعم الكتابة الذرية وأن أداء دفتر يومية DELETE مشابه لـ WAL، إلا أن WAL يمكنه زيادة كمية الكتابة بنسبة 10% إلى 15%.

تصديق

للتحقق من صحة وضع التوافق WAL، قم بتشغيل اختبارات CTS من الوحدة النمطية CtsDatabaseTestCases. ستتحقق اختبارات CTS من السلوك المتوقع عند تمكين التوافق WAL.