Os desafios do acesso móvel à bancos de dados

android-dbPara que seja possível acessar dados remotos com dispositivos móveis sem o uso de cabos, uma intrincada trama de técnicas e tecnologias se faz necessária para que haja a conectividade visando a comunicação entre diferentes aparelhos, como smartphones, notebooks, computadores e dispositivos de rede. Com isso em mente, os desenvolvedores de aplicativos móveis, devem ser capazes de lidar com a troca de dados em ambientes heterogêneos e pouco confiáveis, o que gera inúmeros desafios.

Existem diversos problemas relacionados ao desenvolvimento de middlewares de acesso a dados, tais como: gerência de transações, controle de concorrência, falhas, recuperação, segurança e integridade (Barbosa, 2001). No entanto, três deles foram alvos deste estudo: segurança dos dados, consistência das transações e desempenho. Antes de avançar, caso não sinta-se familiarizado com middlewares ainda, dê uma lida neste outro post.

Segurança dos Dados

Segundo Janssen (2013), a segurança dos dados refere-se às medidas de privacidade digital que são aplicadas para prevenir acesso não autorizado à computadores, bases de dados e websites, além de também proteger os dados contra corrupção. Em um middleware móvel para acesso a bancos remotos deve-se manter sigilo sobre as credenciais de acesso ao banco de dados, evitando que pessoas não autorizadas tenha acesso aos dados do mesmo e às mensagens trafegadas entre cliente e servidor.

Técnicas comuns para garantir a segurança de dados sobre meios inseguros, como a Internet, incluem o uso de criptografia que, segundo Katz (2007), é o estudo científico de técnicas para a segurança de informação digital, transações e computação distribuída. Existem inúmeros algoritmos de criptografia e formas de aplicá-los, devendo-se analisar as necessidades reais de segurança em comparação com o aumento do custo computacional que cada algoritmo traz consigo.

Basicamente, existem algumas famílias de algoritmos de criptografia e diferentes formas de catalogá-las. Segundo Kessler (1998), pode-se classificar os algoritmos de criptografia baseados no número de chaves que possuem para encriptação e decriptação: algoritmos de chave simétrica, onde somente uma chave permite cifrar e decifrar os dados; algoritmos de chave assimétrica, onde existe uma chave que somente cifra (chamada de chave pública) e outra que somente decifra os dados (chave privada); e algoritmos de hashing, onde não há meios de decifragem dos dados após cifrados. Exemplos de algoritmos usados atualmente incluem: RSA (assimétrico), AES (simétrico) e MD5 (hashing), entre muitos outros.

Além de proteger os dados contra leitura não autorizada através de criptografia, é necessário que se garanta que cada requisição seja executada somente uma vez e ainda assim, com um prazo de validade para que não seja usada futuramente para fins maliciosos, atividade conhecida como Replay Attack, que segundo Barmala (2004) é o ato de usar mensagens copiadas para atacar um sistema computacional ou obter acesso não autorizado. Uma das maneiras para atender tais requisitos é usando o conceito de timestamp que determina que as requisições geradas dentro de um intervalo de tempo específico somente são válidas enquanto durar aquele intervalo, evitando que a captura de requisições que não foram processadas pelo servidor sejam usadas futuramente.

Curso React Native

Consistência das Transações

Para um banco de dados, uma transação é uma unidade de trabalho lógica e atômica que contém uma ou mais diretivas SQL (ORACLE, 2011). Uma transação agrupa diretivas SQL para garantir que ou todas sejam executadas com sucesso, ou nenhuma, sendo desfeitas (rollback). Ainda segundo a Oracle (2011), as propriedades básicas de uma transação são popularmente referenciadas pelo acrônimo ACID (iniciais de Atomicidade, Consistência, Integridade e Durabilidade).

Em um middleware de acesso à dados, dado um grupo de comandos enviados pelo cliente a um servidor, deve-se garantir que todos os comandos sejam executados, ou nenhum deles deve permanecer na base. À primeira vista pode parecer óbvio e simples, uma vez que os SGBDs já endereçam esses problemas nativamente, mas considerando que a proposta é um middleware para acesso móvel a bancos de dados, é natural que a conexão de dados seja instável e é função do middleware (BILLARD, 1998) garantir que essa instabilidade não comprometa a confiança do usuário sobre o sistema.

Desempenho

E por último, outro grande desafio do acesso móvel à bases de dados remotas é o desempenho da conexão. Ainda que as novas gerações de redes de dados móveis tenham melhorado bastante nos últimos anos, o panorama geral ainda é abaixo da média esperada, segundo a Anatel (2013), quando o assunto é conexão móvel de dados. A cada requisição que é enviada ao SGBD tem-se como resposta o download de volumes de dados para o dispositivo, o que pode ocasionar queda de desempenho. Não obstante, para garantir a segurança e consistência das transações uma série de verificações adicionais serão efetuadas ao longo do ciclo de vida das requisições, o que servirá para aumentar o tempo de resposta a cada ação do usuário que exija comunicação com o banco de dados. Com este cenário em mente, algumas técnicas incrementam consideravelmente o tempo de requisição e resposta, entre elas a compressão de dados, a paginação de resultados e caching, que serão discutidas a seguir e que são úteis em middlewares de acesso à dados.

Segundo Nelson e Gailly (1995), a compressão de dados busca reduzir o número de bits usados para armazenar ou transmitir informação. Isso é possível através de diversas técnicas como eliminação de redundância na representação dos dados e remoção de dados pouco significativos (cuja falta é quase imperceptível, como no caso de arquivos MP3). Embora a compressão de dados aumente o processamento das requisições (afinal, deve-se realizar as operações de compressão e descompressão a cada conjunto de dados), Shannon (1948) afirma que os ganhos em velocidade de tráfego na rede superam as perdas em processamento quando se utilizam grandes volumes de dados com altas taxas de compressão (como grandes quantidades de texto ou arquivos binários) e mais ainda quando as redes em questão são redes de baixa velocidade. Desta forma, é possível através da compressão de dados otimizar o desempenho de um middleware de acesso a dados.

A paginação de resultados é uma técnica muito comum na plataforma web para aumento do desempenho nas páginas, principalmente em sistemas com grandes quantidades de registros por tabela no banco de dados. A paginação de resultados baseia-se no princípio de que quando um grupo de dados possui muitos registros (dependendo do sistema), além dele ser oneroso para ser transportado pela rede de dados, é na maioria das vezes pouco prático para ser analisado ou até mesmo inútil se visualizado em sua totalidade. Dessa forma, trabalha-se com o conceito de páginas, onde cada página contém uma fração do total de registros. Com isso poupa-se a necessidade de trafegar uma carga muito grande de dados quando na maioria das vezes o usuário do sistema só prestará atenção em uma pequena fração dela por vez. De acordo com Brade (1989), técnicas de paginação também são padrões nos protocolos das redes de computadores, que dividem a informação que irá trafegar pela rede em frames, uma vez que seria pouco eficiente tentar transferir toda a informação de uma só vez. Aliado ao fato de que as redes móveis de dados são ainda mais instáveis que as redes tradicionais e que as telas dos dispositivos móveis permitem uma análise de dados mais limitada que nos computadores, têm-se na paginação de resultados uma opção para aumento no desempenho do retorno das consultas realizadas ao banco de dados.

E por fim, técnicas de caching que, segundo Bottomley (2004), servem para armazenar dados muito utilizados ou que serão utilizados em breve em uma memória mais veloz do que a normal onde aquele dado costuma residir. Dados armazenados em bancos de dados, principalmente os relacionais, tendem a estar organizados em uma estrutura hierárquica que, entre outras características, prioriza a integridade referencial em detrimento ao desempenho, o que leva aos próprios fabricantes de sistemas de bancos de dados investirem em mecanismos de caching para armazenar dados em memória principalmente durante operações mais extensas e complexas. Outro uso para mecanismos de caching está na arquitetura de computadores, onde existem diversos tipos e níveis de memória cache, como a memória cache existente nos processadores, que evita o tráfego desnecessário (e lento) entre a unidade lógica aritmética (ULA) e o dado na memória RAM ou, pior ainda, no disco rígido. No caso de bancos de dados, é comum que as tabelas ou combinações de dados mais comuns sejam mantidas em estruturas organizacionais diferenciadas, como índices e visões, e as consultas mais comumente utilizadas sejam mantidas na memória RAM; tudo isso visando um aumento no desempenho do serviço de banco de dados como um todo. Ainda que nos dispositivos móveis as memórias mais velozes sejam de maior custo e devem ser usadas com parcimônia, no caso dos servidores de bancos de dados é possível utilizar-se de mecanismos de cache para diminuir o impacto causado pelo uso de um middleware.

Aplicando-se as três técnicas anteriores a um middleware de acesso à dados, têm-se um ganho de desempenho que embora não seja superior a implementações de acesso à banco de dados usando web services, é mais adequado e confiável ao cenário móvel.

Referências

ANATEL – Agência Nacional de Telecomunicações. Avaliação Trimestral do Plano Nacional de Ação de Melhoria da Prestação do Serviço Móvel Pessoal. Julho de 2013. Disponível em: <http://www.anatel.gov.br/Portal/documentos/sala_imprensa/26-7-2013–10h37min43s-COQL_SMP_Avaliacao.ppt>. Acesso em 13/10/2013.

BARBOSA, Alvaro C.. Middleware para Integração de Dados Heterogêneos. Maio de 2001. Disponível em: <ftp://ftp.inf.puc-rio.br/pub/docs/theses/01_PhD_barbosa.pdf>. Acesso em 13/10/2013.

BARMALA, Christian. Replay Attack – Computer Definition. 2004. Disponível em: <http://www.yourdictionary.com/replay-attack>. Acesso em 17/09/2013.

BILLARD, David. Transactional Services for the Internet. Março de 1998. Disponível em: <http://books.google.com.br/books?id=pSgPg1Na51UC&pg=PA14>. Acesso em 13/10/2013.

BOTTOMLEY, James. Understanding Caching. Janeiro de 2004. Disponível em: <http://www.linuxjournal.com/article/7105>. Acesso em 19/08/2013.

BRADEN, Robert. Requirements for Internet Hosts – Comunication Layers. Outubro de 1989. Disponível em: <https://tools.ietf.org/html/rfc1122#page-18>. Acesso em 01/09/2013.

JANSSEN, Cory. Data Security. 2013. Disponível em: <http://www.techopedia.com/definition/26464/data-security>. Acesso em 18/09/2013.

KATZ, Jonathan; LINDELL, Yehuda. Introduction to Modern Cryptography. Agosto de 2007. Disponível em: <http://www.cs.umd.edu/~jkatz/imc/chap1.pdf>. Acesso em 18/08/2013.

KESSLER, Gary. Encryption and Decryption Algorithm. Maio de 1998. Disponível em: <http://homepages.uel.ac.uk/u0430614/Encryption%20index.htm>. Acesso em 18/08/2013.

NELSON, Mark; GAILLY, Jean-Loup. The Data Compression Book. Dezembro de 1995. Disponível em: <http://staff.uob.edu.bh/files/781231507_files/The-Data-Compression-Book-2nd-edition.pdf>. Acesso em 01/09/2013.

ORACLE. Introduction to Transactions. 2011. Disponível em: <http://docs.oracle.com/cd/E11882_01/server.112/e10713/transact.htm>. Acesso em 19/08/2013.

SHANNON, Claude. A Mathematical Theory of Communication. Outubro de 1948. Disponível em: <http://cm.bell-labs.com/cm/ms/what/shannonday/shannon1948.pdf>. Acesso em 01/09/2013.

Autor

Luiz Fernando Duarte Junior é graduado em Ciência da Computação com pós-graduação na área de Computação Móvel. Professor do ensino superior, gerente de projetos, empreendedor e palestrante, é tradutor de um livro sobre criação de apps e autor de outro sobre o mesmo assunto, ambos disponíveis na seção Meus Livros.

Publicado por

Luiz Duarte

Pós-graduado em computação, professor, empreendedor, autor, Agile Coach e programador nas horas vagas.