Persistência
O que é
persistência de
dados?
Entendendo as
variáveis dos
dados
Tempo de
duração
Escopo
Alterações
Leitura
Números que todos deviam saber
• L1 cache reference 0.5 ns
memory 250,000 ns
• Branch mispredict 5 ns
• Round trip within same
datacenter 500,000 ns
• L2 cache reference 7 ns
• Disk seek 10,000,000 ns
• Mutex lock/unlock 100 ns
• Main memory reference 100 • Read 1 MB sequentially from
network 10,000,000 ns
ns
• Compress 1K bytes with Zippy • Read 1 MB sequentially from
disk 30,000,000 ns
10,000 ns
• Send packet CA->Netherlands• Send 2K bytes over 1 Gbps
>CA 150,000,000 ns
network 20,000 ns
• Read 1 MB sequentially from
Tipos de
persistência
Memoria
+

• Fácil acesso a partir da
implicação
• Utilização intuitiva
• Rápido
• Muito rápido.

-

• Armazenamento local
• Não resiste ao reinicio da
aplicação
• Dependente da sessão
• Facilmente corrompido
Quando utilizar?
• Sempre que possível
• Dados que não precisem ser persistido em caso de reinicio
da aplicação
• Dados com um escopo pequeno de utilização
• Dados pequenos
Cache
+

• Possibilidade de
unificação de dados
• Possível resistir ao
reinicio da aplicação.
• Configuração de
durabilidade do dado.

-

• Extremamente
configurável
• De maior complexidade
de implementação.
• Não implementa a noção
de transação
• Possíveis problema de
concorrência.
• Exige drive.
Quando utilizar?
• Dados que não são alterados com frequência mas muito
consultados
• Dados que que seriam armazenados em memoria mas que
precisam estar distribuídos entre varias aplicações.
• Dados que precisem de algum tipo de sobreviver ao reinicio
da aplicação mas que não sejam de longa duração.
Arquivo
+

• Fácil acesso a partir
da aplicação
• De alta
granularidade de
informação
• Possibilidade de
utilização de dados
formatados

-

• Não validação de
formato
• Dependente do
sistema de arquivos
• Lento
• Sistema de
permissões
Quando utilizar?
• Sempre que for possível. O sistema de arquivos é seu amigo
• Armazenamento de informações locais.
• Informações relevantes apenas a aquela instancia da
aplicação.
• Dados que precisem resistir a reinicialização da aplicação
Arquivos de
configuração
O que é diferente?
• Dados pertinentes a aplicação
• Configurações da aplicação que não sejam alteradas com
frequência.
• Configurações que quando alteradas envolvam o reinicio do
serviço
• Configurações que variem pela servidor no qual a aplicação
está instalada.
Convention over
configuration
Sample code
public class PageAppearanceSection : ConfigurationSection
{
// Create a "remoteOnly" attribute.
[ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]

public Boolean RemoteOnly
{
get {
return (Boolean)this["remoteOnly"];
}
set {
this["remoteOnly"] = value;
}
}
}
Rede
+

• Dados possíveis de
se centralizar
• Fácil alteração de
esquema.
• Inter-operavel.

-

• Baixo índice de
confiança em
disponibilidade
• Baixa performance
Quando utilizar?
• Dados com um nível de consulta alto!
• Dados que exigem performance mas centralização
• Consultas que podem ser distribuídas.
• Dados não essenciais.
Bancos de
dados
+

• Longo tempo de
persistência
• Facilidade de
consulta
• Dados estruturados
• Ligação entre dados
• Configuração
centralizada

-

• Baixo nível de
desempenho
• Dependência de
rede
• Aumento de
complexidade da
aplicação
• Manutenção de
drivers
Bacos
relacionais
Quando utilizar?
• Dados que exijam proteção de transação
• Dados que exijam centralização.
• Esquemas relacionais de dados.
Bancos
não
relacionais
Quando utilizar?
• Dados com um nível de consulta alto!
• Dados que exigem performance mas centralização
• Consultas que podem ser distribuídas.
• Dados não essenciais. (BETA)
• MAP/REDUCE
Fita
+

• Longuíssimo tempo
de persistência
• Baixo custo de
armazenamento

-

• Dificuldade de
tempo de consulta
• Escrita sequencial
• Leitura sequencial
Quando utilizar?
• Dados históricos
• Dados com um volume muito grande que não precisem de
consultas frequentes.
• Backups
Duvidas?

Persistência

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    Números que todosdeviam saber • L1 cache reference 0.5 ns memory 250,000 ns • Branch mispredict 5 ns • Round trip within same datacenter 500,000 ns • L2 cache reference 7 ns • Disk seek 10,000,000 ns • Mutex lock/unlock 100 ns • Main memory reference 100 • Read 1 MB sequentially from network 10,000,000 ns ns • Compress 1K bytes with Zippy • Read 1 MB sequentially from disk 30,000,000 ns 10,000 ns • Send packet CA->Netherlands• Send 2K bytes over 1 Gbps >CA 150,000,000 ns network 20,000 ns • Read 1 MB sequentially from
  • 9.
  • 10.
  • 11.
    + • Fácil acessoa partir da implicação • Utilização intuitiva • Rápido • Muito rápido. - • Armazenamento local • Não resiste ao reinicio da aplicação • Dependente da sessão • Facilmente corrompido
  • 12.
    Quando utilizar? • Sempreque possível • Dados que não precisem ser persistido em caso de reinicio da aplicação • Dados com um escopo pequeno de utilização • Dados pequenos
  • 13.
  • 14.
    + • Possibilidade de unificaçãode dados • Possível resistir ao reinicio da aplicação. • Configuração de durabilidade do dado. - • Extremamente configurável • De maior complexidade de implementação. • Não implementa a noção de transação • Possíveis problema de concorrência. • Exige drive.
  • 15.
    Quando utilizar? • Dadosque não são alterados com frequência mas muito consultados • Dados que que seriam armazenados em memoria mas que precisam estar distribuídos entre varias aplicações. • Dados que precisem de algum tipo de sobreviver ao reinicio da aplicação mas que não sejam de longa duração.
  • 16.
  • 17.
    + • Fácil acessoa partir da aplicação • De alta granularidade de informação • Possibilidade de utilização de dados formatados - • Não validação de formato • Dependente do sistema de arquivos • Lento • Sistema de permissões
  • 18.
    Quando utilizar? • Sempreque for possível. O sistema de arquivos é seu amigo • Armazenamento de informações locais. • Informações relevantes apenas a aquela instancia da aplicação. • Dados que precisem resistir a reinicialização da aplicação
  • 19.
  • 20.
    O que édiferente? • Dados pertinentes a aplicação • Configurações da aplicação que não sejam alteradas com frequência. • Configurações que quando alteradas envolvam o reinicio do serviço • Configurações que variem pela servidor no qual a aplicação está instalada.
  • 21.
  • 22.
    Sample code public classPageAppearanceSection : ConfigurationSection { // Create a "remoteOnly" attribute. [ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)] public Boolean RemoteOnly { get { return (Boolean)this["remoteOnly"]; } set { this["remoteOnly"] = value; } } }
  • 23.
  • 24.
    + • Dados possíveisde se centralizar • Fácil alteração de esquema. • Inter-operavel. - • Baixo índice de confiança em disponibilidade • Baixa performance
  • 25.
    Quando utilizar? • Dadoscom um nível de consulta alto! • Dados que exigem performance mas centralização • Consultas que podem ser distribuídas. • Dados não essenciais.
  • 26.
  • 27.
    + • Longo tempode persistência • Facilidade de consulta • Dados estruturados • Ligação entre dados • Configuração centralizada - • Baixo nível de desempenho • Dependência de rede • Aumento de complexidade da aplicação • Manutenção de drivers
  • 28.
  • 29.
    Quando utilizar? • Dadosque exijam proteção de transação • Dados que exijam centralização. • Esquemas relacionais de dados.
  • 30.
  • 31.
    Quando utilizar? • Dadoscom um nível de consulta alto! • Dados que exigem performance mas centralização • Consultas que podem ser distribuídas. • Dados não essenciais. (BETA) • MAP/REDUCE
  • 32.
  • 33.
    + • Longuíssimo tempo depersistência • Baixo custo de armazenamento - • Dificuldade de tempo de consulta • Escrita sequencial • Leitura sequencial
  • 34.
    Quando utilizar? • Dadoshistóricos • Dados com um volume muito grande que não precisem de consultas frequentes. • Backups
  • 35.