Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Melhorar performance de insert no banco de dados.

Pessoal fiz um teste aqui rápido da seguinte forma.

Dei um beginTransaction().

Abri o arquivo TXT fiz a leitura linha por linha e testando apenas os
tipos de registros que eu queria.

com uma String com o conteúdo da linha toda fragmentei ela diretamente
dentro de um objeto de InsertHelper com execute dentro da transação.
Depois de toda a leitura de todos os Registros do TXT, faço um
setTransactionSuccessful() e endTransaction();

Tempo para inserir 6500 produtos 1:30 minutos em média.

Vou dar uma analisadas nos logs do DDMS para ver se acho alguma coisa
que posso ajudar ainda mais na performance.


Abraço pessoal.

Em 3 de janeiro de 2012 15:18, Fabricio Santiago
<fabriciosaand@gmail.com> escreveu:
> Nesse link tem um exemplo como faz.
> http://dprogrammer.blogspot.com/2011_08_01_archive.html
>
>
> ---------- Forwarded message ----------
> From: Fabricio Santiago <fabriciosaand@gmail.com>
> Date: Tue, Jan 3, 2012 at 3:16 PM
> Subject: Fwd: [androidbrasil-dev] Melhorar performance de insert no banco de
> dados.
> To: androidbrasil-dev@googlegroups.com
>
>
> Clebão, estava com o mesmo problema seu. Consegui resolver
> usando controle de transação.
>
> ---------- Forwarded message ----------
> From: Bruno Baudel <brunobaudel@gmail.com>
> Date: Tue, Jan 3, 2012 at 3:07 PM
> Subject: Re: [androidbrasil-dev] Melhorar performance de insert no banco de
> dados.
> To: androidbrasil-dev@googlegroups.com
>
>
> Meu amigo eu nunca trabalhei com essa quantidade de dados mas essa questão e
> muito boa para deixar aqui no grupo para a posteridade.
>
>
>
> Bruno Baudel
>
>
> Em 3 de janeiro de 2012 14:00, Clebão - EcoCentauro <clebaori@gmail.com>
> escreveu:
>
>> Pessoal estou em um novo projeto aqui onde resumidamente vou receber
>> um arquivo txt com 24000 mil linhas aproximadamente, cada linha os
>> dois primeiro registros são o tipo de registro e esses registros são
>> do tipo, cadastro de cliente, duplicatas de cliente, cadastro de
>> produto etc.
>>
>> Dentro deste txt existe cerca de 6500 registro de produto e estou
>> passando pelas seguintes situações.
>>
>> Inicialmente separei o meu projeto com Modelo, Persistência, Controlador
>>
>> Cada linha lida eu preencho um obj (modelo) e passo para um DAO. No
>> DAO eu utilizei o ContentValues onde eu leio o obj e mando um
>> db.insert(tableName, null, contentValues)
>>
>> Nessa estrutura acima demora cerca de 15 minutos em média para
>> percorrer todos os 6500 produtos.
>>
>> Mudei a estrutura para trabalhar com Threads onde data linha do
>> produto lida eu preencho um obj depois eu adiciono em um LinkedList,
>> Depois um Thread fica verificando de existe registros nessa LinkedList
>> e ela passa para o DAO para adicionar utilizando o ContentValues onde
>> eu leio o obj e mando um db.insert(tableName, null, contentValues)
>>
>> Com a estrutura de Thread e ContentValues nos DAO o tempo de leitura e
>> insert na tabelas baixou para 3:30 a 4:00 minutos em média.
>>
>> Ledo alguma coisa na internet cheguei alguns tutoriais onde se utiliza
>> o InsertHelper (segue o link
>>
>> http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
>> e do tutorial
>> http://www.outofwhatbox.com/blog/2010/12/android-using-databaseutils-inserthelper-for-faster-insertions-into-sqlite-database/)
>>
>> Fiz essa alteração de utilizar o InsertHelper  ao invés do
>> ContentValues o tempo médio agora fica em 3:00 min em média.
>>
>>
>> Minha dúvida é a seguinte, alguém já fez alguma estrutura onde se faz
>> uma insere uma grande quantidade de dados e menor tempo.
>>
>>
>> PS. Os testes foram feitos feito nos emulador com a versão 2.2 e em um
>> Celular Nexus S com versão 2.3.6 e um tablet chinguilingui com android
>> 2.2 com processador 1,0 ghz e 512 mb de ram.
>
>
>
>
>
> --
> Fabrício Andrade
>
>
>
> --
> Fabrício Andrade

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário