sql >> Databáze >  >> RDS >> SQLite

Změnilo se chování Android SQLite Journal?

@CL má pravdu, zdá se, že režim žurnálu se mění v závislosti na úrovni API (možná se mění i výrobcem?).

Nicméně pro budoucí použití jsem se dotázal databáze na journal_mode na několika úrovních API a výsledky jsou:

  • Android 2.3.7 (API 10) =smazat
  • Android 4.0.4 (API 15) =zkrácení
  • Android 4.1.1 (API 16) =trvalé
  • Android 4.3.0 (API 18) =trvalé
  • Android 4.4.4 (API 19) =trvalé
  • Android 5.0.0 (API 21) =trvalé
  • Android 5.1.0 (API 22) =trvalé

Kód pro získání režimu deníku:

Cursor c = db.rawQuery("PRAGMA journal_mode;", null);
c.moveToFirst();
String journalMode = c.getString(c.getColumnIndex("journal_mode"));

O režimech deníku:

Režim žurnálování DELETE je normální chování. V režimu DELETE je žurnál vrácení odstraněn na konci každé transakce. Operace odstranění je ve skutečnosti akce, která způsobí potvrzení transakce.

Režim žurnálování TRUNCATE potvrzuje transakce zkrácením žurnálu vrácení na nulovou délku namísto jeho odstranění. Na mnoha systémech je zkrácení souboru mnohem rychlejší než smazání souboru, protože adresář, který obsahuje, není třeba měnit.

Režim žurnálování PERSIST zabraňuje odstranění žurnálu vrácení na konci každé transakce. Místo toho je záhlaví deníku přepsáno nulami. To zabrání ostatním databázovým připojením vrátit žurnál zpět. Režim žurnálování PERSIST je užitečný jako optimalizace na platformách, kde je smazání nebo zkrácení souboru mnohem dražší než přepsání prvního bloku souboru nulami.

Více informací



  1. Výkon TPC-H od PostgreSQL 8.3

  2. GROUP nebo DISTINCT po JOIN vrátí duplikáty

  3. Optimistická souběžnost:IsConcurrencyToken a RowVersion

  4. Co jsou spouštěče v SQL a jak je implementovat?