рд╢реБрдн рджрд┐рдиред рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдореБрдЭреЗ рддреБрд░рдВрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╢реБрд░реБрдЖрддреА рдбреЗрдЯрд╛ рд╕реЗрдЯ (рд▓рдЧрднрдЧ 5000-6000 рд░рд┐рдХреЙрд░реНрдб) рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рдереЗред рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП JSON рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдкреБрди: рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдмрддрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛, рдЙрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рддреБрд░рдВрдд рдЬрд╛рдирд╛ рдерд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдкрдХреЛ рдХрд╣рд╛рдирд┐рдпреЛрдВ рд╕реЗ рдКрдмрд╛рдирд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдЙрддрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдЙрд╕ рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдерд╛ рдЬреЛ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдерд╛?
рддреЛ рд╡рд╣ рдерд╛ред Naively, DBHelper рдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
public class DBHelper extends SQLiteOpenHelper { ... private static DBHelper instance; private static SQLiteDatabase db; public static DBHelper getInstance() { if (instance == null) instance = new DBHelper(Pleazzme.getAppContext()); return instance; } public static SQLiteDatabase getDB() { if (db == null) db = getInstance().getWritableDatabase(); return db; } ... }
рдПрдХ рдЕрд▓рдЧ AsyncTask рдореЗрдВ, рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рд▓реВрдк рдореЗрдВ рдореБрдЭреЗ рд╕реЗрд╡ () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдпрд╛:
... public void save() { ContentValues values = new ContentValues(); values.put(id, Id); values.put(name, Name); values.put(categoriesIds, App.gson.toJson(CategoriesIds)); values.put(datecreated, DateCreated.getTime()); Document.save(); values.put(document_id, Document.getId()); values.put(hasbarcode, hasBarcode); values.put(headofficeaddress, HeadOfficeAddress); values.put(phonenumbers, PhoneNumbers); values.put(website, WebSite); values.put(popularity, Popularity); values.put(keywords, Keywords); DBHelper.getDB().insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE); } ...
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ 40-50ms рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдЪрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдорд┐рд▓ рдЧрдИред рдирддреАрдЬрддрди, рд╕рднреА рд╕рдВрд░рдХреНрд╖рдг рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо 4 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рдерд╛ред рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рдореНрдорд┐рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдЗрдВрдЬрди рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдзреВрдореНрд░рдкрд╛рди рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЬрд╡рд╛рдм
рдпрд╣рд╛рдБ рдФрд░
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдП рдЧрдП:
- ContentValues тАЛтАЛрдХреЗ рдмрдЬрд╛рдп InsertHelper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдмрдбрд╝реЗ рдЗрдВрд╕рд░реНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВ, рдПрдХ рд▓реЗрди-рджреЗрди рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓реЙрдХ рдФрд░ рдбрд╛рд▓ рджреЗрдВ
- рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ рдмрдЪрд╛рдиреЗ () рд╡рд┐рдзрд┐ рд╕реЗ async рдореЗрдВ рдЦреАрдВрдЪреЗ рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдорд┐рд▓реЗрдЧрд╛
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдб рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЕрдВрддрд┐рдо рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public class DBHelper extends SQLiteOpenHelper { ... private static DBHelper instance; private static SQLiteDatabase db; public static DBHelper getInstance() { if (instance == null) instance = new DBHelper(Pleazzme.getAppContext()); return instance; } public static SQLiteDatabase getDB() { if (db == null) db = getInstance().getWritableDatabase(); return db; } ... public static void bigDataBegin(SQLiteDatabase _db){
рд╕рд╣реЗрдЬреЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕:
... private static InsertHelper ih; public void save(final SQLiteDatabase db) { if(ih == null) ih = new InsertHelper(db, table); ih.prepareForInsert(); try { ih.bind(ih.getColumnIndex(key), value); } catch (NullPointerException e) { } ..... ih.execute(); ih.close(); } ...
рдФрд░ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдмрдВрдж" рд▓реЗрддрд╛ рд╣реИ:
SQLiteDatabase database = DBHelper.getDB(); DBHelper.bigDataBegin(database); for (int i = 0; i < currSize; i++) { gson.fromJson(o, Data.class).save(database); } DBHelper.bigDataEnd(database);
рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдФрд░ рдЧрддрд┐ рдорд╛рдк рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛:
- рдкреНрд░рддрд┐ рд╡рд╕реНрддреБ рддрдХ - 40 рдореА
- рдХреЗ рдмрд╛рдж - рдкреНрд░рддрд┐ рд╡рд╕реНрддреБ 4ms
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╡рд┐рдХрд▓реНрдк рджреЗ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдпреБрдкреАрдбреАредрдЦреБрд╢реА рдХреЗ рдПрдХ рдмреЗрд╣реЛрд╢ рдкреНрд░рдХреЛрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрддрд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдирд┐рдХрд▓рд╛ рдерд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдпреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реАрдзреЗ рдкреНрд░рд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХрд╕рдо рдЦрд╛рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд╣рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рдХреА)ред рдпрд╣ рдЗрд╕ рд░реВрдк рдореЗрдВ рд╣реИ рдХрд┐ рдпрд╣ рдпрдерд╛рд╕рдВрднрд╡ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдРрд╕реЗ рджрд╛рд╡реЛрдВ рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдпрд╣ рдерд╛ рдХрд┐ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгреЛрдВ (рдПрд╕рдЬреАрдПрд╕ 2, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЛрд░реНрдб рдкрд░ 4.0.4 рдХреЗ рд╕рд╛рде) рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рджреЗрдЦреА рдЧрдИ рдереА, рдЬрдмрдХрд┐ рдЫреЛрдЯреЗ рднрд╛рдЗрдпреЛрдВ (рдПрдЪрдЯреАрд╕реА рд╡рд╛рдЗрд▓реНрдбрдлрд╛рдпрд░) рдиреЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рдереА ...