Relatório parcial: 01/07
relatorio final: 30/07 (Orientador que deve enviar para o sistema)
Chegando final do período o site vai ficar pronto possibilitando a coleta de dados de forma automática pelo cliente.
Ajustes finais
quarta-feira, 24 de junho de 2015
sexta-feira, 1 de maio de 2015
idéia!
Vou ter que dar uma pausa para estudar para circuitos mas tive uma ideia boa para consertar o problema quando o twitter fica sobrecarregado.
Nao temos como tratar como excecao pq nao é um erro, o scroller continua tentando descer a página mas o que acontece é que não desce mais pois chegou no limite, ja que aparece a mensagem de sobrecarregado.
2 opcoes
1ª opcao - ler a barra final e se aparecer a mensagem X (ex: "twitter sobrecarregadi) em ingles ou port, dependendo do driver, retornar
2ª opcao - a cada leitura colocar os tweets todos em um vetor e se a usuario,msg e a hr do ultimo forem iguais a usuario,msg e hr do anterior -> retorna
PROBLEMA:
O problema é que não temos como retornar desse certo ponto. Tenho que pesquisar se o twitter tem algum tipo de pesquisar por hora, o que tb resolveria o utlimo problema comentado ( da pesquisa até as 17:00)
Nao temos como tratar como excecao pq nao é um erro, o scroller continua tentando descer a página mas o que acontece é que não desce mais pois chegou no limite, ja que aparece a mensagem de sobrecarregado.
2 opcoes
1ª opcao - ler a barra final e se aparecer a mensagem X (ex: "twitter sobrecarregadi) em ingles ou port, dependendo do driver, retornar
2ª opcao - a cada leitura colocar os tweets todos em um vetor e se a usuario,msg e a hr do ultimo forem iguais a usuario,msg e hr do anterior -> retorna
PROBLEMA:
O problema é que não temos como retornar desse certo ponto. Tenho que pesquisar se o twitter tem algum tipo de pesquisar por hora, o que tb resolveria o utlimo problema comentado ( da pesquisa até as 17:00)
quinta-feira, 30 de abril de 2015
problemas com hora dia na advanced search do twitter
Quando pesquisamos, por exemplo, tweets com uma determinada hashtag até o dia 24 de abril de 2014, ele nos retorna resultados até do dia 23 de abril de 2014 até 17:00.
Como resolver isso? Se buscarmos um dia a frente pode ser que fique muito pesado para carregar toda a url
Como resolver isso? Se buscarmos um dia a frente pode ser que fique muito pesado para carregar toda a url
quarta-feira, 29 de abril de 2015
andamento..
Melhoria do código urgente.
prox passos: metodo getPreviousDay, ciclo por dia até a data limite, gerar url modificada c data anterior
*mudar dia str -> int
método replace http://wiki.python.org.br/ManipulandoStringsComPython
prox passos: metodo getPreviousDay, ciclo por dia até a data limite, gerar url modificada c data anterior
*mudar dia str -> int
método replace http://wiki.python.org.br/ManipulandoStringsComPython
quarta-feira, 25 de março de 2015
inversão data e hora
Estava com um problema, só conseguia pegar a data e hora juntas através do crawler e essa vinha no formara "hora - data" o que dificultava colocar em uma ordem cronológica de tweets;
Consertado -> "data - hora" permitindo através de um group by exibir pelo dia que queremos. Podemos até separar data e hora em duas colunas distintas, caso a gente queira definir um limite de dias
Consertado -> "data - hora" permitindo através de um group by exibir pelo dia que queremos. Podemos até separar data e hora em duas colunas distintas, caso a gente queira definir um limite de dias
quarta-feira, 11 de março de 2015
terça-feira, 3 de março de 2015
Selenium web driver for python <<<<-
a função scroll down está funcionando no programa teste, agora é preciso adaptá-lo e implementar no programa crawler do twitter.
quarta-feira, 25 de fevereiro de 2015
username ok
pegando o nome já;
agora falta data
#author: Maria Beatriz Vaz
import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys
try:
conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
print "Connected to database"
except:
print "I am unable to connect to the database"
cur=conn.cursor()
urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]
while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]
soup = BeautifulSoup(htmltext)
#print soup.get_text().encode("utf-8")
visited.append(urls[0])
tweets = []
names = []
i = 0
for tag in soup.findAll('div', { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):
tweet_text = tweet.get_text().encode("utf-8")
tweets.insert(0,tweet_text)
for name in tag.findAll ('strong', {"class" : "fullname js-action-profile-name show-popup-with-id"}):
name_text = name.get_text().encode("utf-8")
names.insert(0,name_text)
i=i+1
print 'chegou'
while i>=0:
try:
print 'name: ' + names[i-1] + ' - tweet: ' + tweets[i-1]
cur.execute(""" INSERT INTO teste_old (name , tweet) VALUES ( %(name)s, %(tweet)s )""", ({ "name" : names[i-1] , "tweet" : tweets[i-1]}))
conn.commit()
except Exception as inst:
conn.rollback()
print 'Igual'
i=i-1
print ">>>visitou: " + urls[0]
urls.pop(0)
if conn:
conn.close()
agora falta data
#author: Maria Beatriz Vaz
import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys
try:
conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
print "Connected to database"
except:
print "I am unable to connect to the database"
cur=conn.cursor()
urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]
while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]
soup = BeautifulSoup(htmltext)
#print soup.get_text().encode("utf-8")
visited.append(urls[0])
tweets = []
names = []
i = 0
for tag in soup.findAll('div', { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):
tweet_text = tweet.get_text().encode("utf-8")
tweets.insert(0,tweet_text)
for name in tag.findAll ('strong', {"class" : "fullname js-action-profile-name show-popup-with-id"}):
name_text = name.get_text().encode("utf-8")
names.insert(0,name_text)
i=i+1
print 'chegou'
while i>=0:
try:
print 'name: ' + names[i-1] + ' - tweet: ' + tweets[i-1]
cur.execute(""" INSERT INTO teste_old (name , tweet) VALUES ( %(name)s, %(tweet)s )""", ({ "name" : names[i-1] , "tweet" : tweets[i-1]}))
conn.commit()
except Exception as inst:
conn.rollback()
print 'Igual'
i=i-1
print ">>>visitou: " + urls[0]
urls.pop(0)
if conn:
conn.close()
crawler (python)
#author: Maria Beatriz Vaz
import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys
try:
conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
print "Connected to database"
except:
print "I am unable to connect to the database"
cur=conn.cursor()
urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]
while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]
soup = BeautifulSoup(htmltext)
print soup.get_text().encode("utf-8")
visited.append(urls[0])
for tag in soup.findAll('div', { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):
print ">>>>nova tag"
tweet_text = tweet.get_text().encode("utf-8")
print tweet_text
cur.execute(""" INSERT INTO teste_old (tweets) VALUES (%(tweets)s)""", ({"tweets" : tweet.get_text().encode("utf-8")}))
conn.commit()
print ">>>visitou: " + urls[0]
urls.pop(0)
if conn:
conn.close()
Já consigo pegar o texto de tweets de uma determinada página. Agora preciso pegar, pelo menos, o usuário e a data daquele tweet.
Preciso saber também como faz para o programa descer a página.
Com o site de pesquisa https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd
só capturei 19 tweets, ´pois é o que aparece até abaixarmos mais a tela.
import urlparse
import urllib
import codecs
from bs4 import BeautifulSoup
import psycopg2
import sys
try:
conn = psycopg2.connect("dbname='tweet_ic' user='postgres' host='localhost' port='5432' password='8001007'")
print "Connected to database"
except:
print "I am unable to connect to the database"
cur=conn.cursor()
urls = ["https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd"]
visited = [urls[0]]
while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]
soup = BeautifulSoup(htmltext)
print soup.get_text().encode("utf-8")
visited.append(urls[0])
for tag in soup.findAll('div', { "class" : "content" }) :
for tweet in tag.findAll('p', {"class" : "js-tweet-text tweet-text"}):
print ">>>>nova tag"
tweet_text = tweet.get_text().encode("utf-8")
print tweet_text
cur.execute(""" INSERT INTO teste_old (tweets) VALUES (%(tweets)s)""", ({"tweets" : tweet.get_text().encode("utf-8")}))
conn.commit()
print ">>>visitou: " + urls[0]
urls.pop(0)
if conn:
conn.close()
Já consigo pegar o texto de tweets de uma determinada página. Agora preciso pegar, pelo menos, o usuário e a data daquele tweet.
Preciso saber também como faz para o programa descer a página.
Com o site de pesquisa https://twitter.com/search?q=%23marcocivil%20since%3A2014-02-03%20until%3A2014-05-23&src=typd
só capturei 19 tweets, ´pois é o que aparece até abaixarmos mais a tela.
quinta-feira, 19 de fevereiro de 2015
data scraping
Baseando em um programa em java que realiza um scrapping da sites de notícias, tentarei realizar um scraping do twitter para coletar dados que a api não fornece.
terça-feira, 10 de fevereiro de 2015
Cassandra
>>http://www.ibm.com/developerworks/br/library/os-apache-cassandra/
Registrando o vídeo dessa palestra sobre cassandra. Muito bom!
https://www.youtube.com/watch?v=B_HTdrTgGNs
Cassandra é uma implementação de família de colunas NoSQL que suporta o modelo de dados Big Table e usa aspectos de arquitetura introduzidos por Amazon Dynamo (como visto no vídeo, é um papper que fala sobre noSQL. Um dos primeiros pappers sobre o assunto. Até hoje se baseiam em suas idéias para bancos nosql).
A Figura mostra a arquitetura de um cluster do Cassandra. A primeira observação é que o Cassandra é um sistema distribuído. O Cassandra consiste em vários nós e distribui os dados entre eles (ou divide-os em shards, na terminologia de bancos de dados).
O Cassandra usa hashing consistente para designar itens de dados a nós. Em termos simples, o Cassandra usa um algoritmo hash para calcular o hash de chaves de cada item de dados armazenado nele (por exemplo, nome de coluna, ID de linha). O intervalo de hash, ou todos os valores de hash possíveis (também chamado de keyspace), é dividido entre os nós no cluster do Cassandra. Em seguida, o Cassandra designa cada item de dados ao nó, e esse nó é responsável por armazenar e gerenciar o item de dados.
alguns pontos:
- O Cassandra distribui dados entre seus nós de forma transparente para o usuário. Qualquer nó pode aceitar qualquer solicitação (leitura, gravação ou exclusão) e encaminhá-la ao nó correto, mesmo que os dados não estejam armazenados nesse nó.
- Os usuários podem definir quantas réplicas são necessárias, e o Cassandra cuida da criação e gerenciamento de réplicas de forma transparente.
- Consistência ajustável: ao armazenar e ler dados, os usuários podem escolher o nível de consistência esperado em cada operação. Por exemplo, quando o nível de consistência "quorum" é usado ao gravar ou ler, os dados são gravados e lidos em mais de metade
dos nós no cluster. O suporte a consistência ajustável permite que os usuários escolham o melhor nível de consistência para o caso de uso
- O Cassandra fornece gravações muito rápidas (até mesmo mais rápidas que as leituras), transferindo dados a cerca de 80-360 MB/s por nó.
O cassandra se baseia em nós. Cada nó é totalmente independente. Os dados são dividos nesses nós.
Há também cópia de dados do nó onde foi armazenado para outros nós. Isso permite total constância, evitando erros. Como dito na palestra, devemos admitir que sempre haverá erros para saber como lidar e evitar que isso nos atrapalhe. Então, se um servidor (nó) sair do ar, haverá o dado em outro servidor, não gerando danos no banco.
Essa vantagem também permite manutenção do banco sem precisar tirá-lo do ar.
Registrando o vídeo dessa palestra sobre cassandra. Muito bom!
https://www.youtube.com/watch?v=B_HTdrTgGNs
Cassandra é uma implementação de família de colunas NoSQL que suporta o modelo de dados Big Table e usa aspectos de arquitetura introduzidos por Amazon Dynamo (como visto no vídeo, é um papper que fala sobre noSQL. Um dos primeiros pappers sobre o assunto. Até hoje se baseiam em suas idéias para bancos nosql).
A Figura mostra a arquitetura de um cluster do Cassandra. A primeira observação é que o Cassandra é um sistema distribuído. O Cassandra consiste em vários nós e distribui os dados entre eles (ou divide-os em shards, na terminologia de bancos de dados).
O Cassandra usa hashing consistente para designar itens de dados a nós. Em termos simples, o Cassandra usa um algoritmo hash para calcular o hash de chaves de cada item de dados armazenado nele (por exemplo, nome de coluna, ID de linha). O intervalo de hash, ou todos os valores de hash possíveis (também chamado de keyspace), é dividido entre os nós no cluster do Cassandra. Em seguida, o Cassandra designa cada item de dados ao nó, e esse nó é responsável por armazenar e gerenciar o item de dados.
alguns pontos:
- O Cassandra distribui dados entre seus nós de forma transparente para o usuário. Qualquer nó pode aceitar qualquer solicitação (leitura, gravação ou exclusão) e encaminhá-la ao nó correto, mesmo que os dados não estejam armazenados nesse nó.
- Os usuários podem definir quantas réplicas são necessárias, e o Cassandra cuida da criação e gerenciamento de réplicas de forma transparente.
- Consistência ajustável: ao armazenar e ler dados, os usuários podem escolher o nível de consistência esperado em cada operação. Por exemplo, quando o nível de consistência "quorum" é usado ao gravar ou ler, os dados são gravados e lidos em mais de metade
dos nós no cluster. O suporte a consistência ajustável permite que os usuários escolham o melhor nível de consistência para o caso de uso
- O Cassandra fornece gravações muito rápidas (até mesmo mais rápidas que as leituras), transferindo dados a cerca de 80-360 MB/s por nó.
O cassandra se baseia em nós. Cada nó é totalmente independente. Os dados são dividos nesses nós.
Há também cópia de dados do nó onde foi armazenado para outros nós. Isso permite total constância, evitando erros. Como dito na palestra, devemos admitir que sempre haverá erros para saber como lidar e evitar que isso nos atrapalhe. Então, se um servidor (nó) sair do ar, haverá o dado em outro servidor, não gerando danos no banco.
Essa vantagem também permite manutenção do banco sem precisar tirá-lo do ar.
segunda-feira, 9 de fevereiro de 2015
Instalanda Apache Cassandra Database
Na última reunião foi decidido que iriamos realizar a comparação entre 3 bancos de dados. 1 slq e 2 nosql (mongodb e cassandra)
MongoDB já foi instalado e o passo agora é instalar o Cassandra.
Próximo passo é tentar ligar esses bancos com a api do twitter para recolher os dados em python e ver algumas interfaces alternativas que facilitam o trabalho em comparação a trabalhar com o terminal
MongoDB já foi instalado e o passo agora é instalar o Cassandra.
Próximo passo é tentar ligar esses bancos com a api do twitter para recolher os dados em python e ver algumas interfaces alternativas que facilitam o trabalho em comparação a trabalhar com o terminal
sexta-feira, 30 de janeiro de 2015
quarta-feira, 21 de janeiro de 2015
Implementação de banco NoSQL
http://zerotoprotraining.com/index.php?mode=video&id=1305
Pensei que o MongoDB seria um bom banco para implementar em nossa projeto em vez de outro banco por motivos como:
-Sua funcionalidade: "Dados estatísticos, frequentemente escritos mas raramente lidos (por exemplo, um contador de hits na web), devem usar um modelo chave/valor como o Redis, ou um modelo de documento como o MongoDB.". No nosso projeto a frequência em que os dados são escritos é extremamente maior do que a frequência em que esses dados são consultados.
- Diversas fontes de consultas: Aparenta ser um banco de dados com muitas dicas na internet, fácil entendimento e muitos foruns para tirar dúvidas.
Entre outros motivos citados no post anterior.
>>> http://zerotoprotraining.com/ video 1: https://www.youtube.com/watch?v=liQzIsFnCr0 - What is MongoDB?
Muito explicativo. Introduz o conceito de Nosql, comparando com os bancos sql.
Depois começa a explicar sobre o conceito de banco orientado a documento.
No MongoDB, os documentos são da forma BSON, muito parecido com o JSON. Nesse banco, para cada objeto temos campos que são pares de chave-valor. Além disso, para cada instência existe um campo obrigatório que é a id do objeto (equivalente a um chave primaria nos bancos relacionais).
Aponta também a flexibilidade comparado ao sql. Nos bancos relacionais, as instâncias de um mesmo objeto deve ter os mesmos números de campos, mas já no MongoDB isso não é necessário. Enquanto um objeto tem 3 campos, o outro pode ter apenas 2 (não esquecendo da id obrigatória).
Também fala sobre os objetos com objetos dentro, nested structures, uma estrutura de dados bem prática.
Existe linguagem para consultas!! Pode ser usado não só em aplicações big data mas também em tradicionais.
vídeo 2: https://www.youtube.com/watch?v=QcP4XExUpfA - Installing MongoDB on windows
vídeo 3: https://www.youtube.com/watch?v=HYIuXB3zk3g - Creating Database Folder and Starting MongoDB service
vídeo 4:https://www.youtube.com/watch?v=Uvw_4HW89qo - Testing Connection to MongoDB database
Pensei que o MongoDB seria um bom banco para implementar em nossa projeto em vez de outro banco por motivos como:
-Sua funcionalidade: "Dados estatísticos, frequentemente escritos mas raramente lidos (por exemplo, um contador de hits na web), devem usar um modelo chave/valor como o Redis, ou um modelo de documento como o MongoDB.". No nosso projeto a frequência em que os dados são escritos é extremamente maior do que a frequência em que esses dados são consultados.
- Diversas fontes de consultas: Aparenta ser um banco de dados com muitas dicas na internet, fácil entendimento e muitos foruns para tirar dúvidas.
Entre outros motivos citados no post anterior.
>>> http://zerotoprotraining.com/ video 1: https://www.youtube.com/watch?v=liQzIsFnCr0 - What is MongoDB?
Muito explicativo. Introduz o conceito de Nosql, comparando com os bancos sql.
Depois começa a explicar sobre o conceito de banco orientado a documento.
No MongoDB, os documentos são da forma BSON, muito parecido com o JSON. Nesse banco, para cada objeto temos campos que são pares de chave-valor. Além disso, para cada instência existe um campo obrigatório que é a id do objeto (equivalente a um chave primaria nos bancos relacionais).
Aponta também a flexibilidade comparado ao sql. Nos bancos relacionais, as instâncias de um mesmo objeto deve ter os mesmos números de campos, mas já no MongoDB isso não é necessário. Enquanto um objeto tem 3 campos, o outro pode ter apenas 2 (não esquecendo da id obrigatória).
Também fala sobre os objetos com objetos dentro, nested structures, uma estrutura de dados bem prática.
Existe linguagem para consultas!! Pode ser usado não só em aplicações big data mas também em tradicionais.
vídeo 2: https://www.youtube.com/watch?v=QcP4XExUpfA - Installing MongoDB on windows
vídeo 3: https://www.youtube.com/watch?v=HYIuXB3zk3g - Creating Database Folder and Starting MongoDB service
vídeo 4:https://www.youtube.com/watch?v=Uvw_4HW89qo - Testing Connection to MongoDB database
quarta-feira, 14 de janeiro de 2015
Alguns bancos NoSQL
1) MongoDB:
orientado a documento.
Dados estatísticos, frequentemente escritos mas raramente lidos (por exemplo, um contador de hits na web), devem usar um modelo chave/valor como o Redis, ou um modelo de documento como o MongoDB.
vantagens:
- Facil instalação
- Open Source
- Atualizações Constantes
- Suporte enterprise
- Comunidade ativa
- Drivers e ODM ( object document mapper) para várias linguagens
- Sharding automático e de fácil configuração
- Replicação simples
- Schema free
- Operações de updates atômicas
entre outras..
desvantagens:
- alto uso de espaço em disco e de memória RAM
alternativa: SSD ou $$D (como brincam)
-manutenção e operação difícil
- não tem queries
2) CouchDB
Se você precisa reproduzir o conjunto de dados em vários locais (como a sincronização de um banco de dados de música entre um aplicativo web e um dispositivo móvel), você vai querer os recursos de replicação do CouchDB.
No CouchDB os documentos são salvos na formato JSON
https://papodecorredor.wordpress.com/2010/01/27/couchdb-resolvendo-problemas-reais/
3)Cassandra
Próximo passo: escolher 1 para implementar
FONTES:
http://forum.imasters.com.br/topic/406606-qual-o-melhor-banco-de-dados-nosql/
http://pt.slideshare.net/fabioperrella56/no-sql-e-as-vantagens-na-utilizao-do-mongodb
orientado a documento.
Dados estatísticos, frequentemente escritos mas raramente lidos (por exemplo, um contador de hits na web), devem usar um modelo chave/valor como o Redis, ou um modelo de documento como o MongoDB.
vantagens:
- Facil instalação
- Open Source
- Atualizações Constantes
- Suporte enterprise
- Comunidade ativa
- Drivers e ODM ( object document mapper) para várias linguagens
- Sharding automático e de fácil configuração
- Replicação simples
- Schema free
- Operações de updates atômicas
entre outras..
desvantagens:
- alto uso de espaço em disco e de memória RAM
alternativa: SSD ou $$D (como brincam)
-manutenção e operação difícil
- não tem queries
2) CouchDB
Se você precisa reproduzir o conjunto de dados em vários locais (como a sincronização de um banco de dados de música entre um aplicativo web e um dispositivo móvel), você vai querer os recursos de replicação do CouchDB.
No CouchDB os documentos são salvos na formato JSON
https://papodecorredor.wordpress.com/2010/01/27/couchdb-resolvendo-problemas-reais/
3)Cassandra
Aplicativos de alta disponibilidade, onde a minimização da inatividade é fundamental, você encontra uma grande utilidade nos datastores de configuração redundante e clusters automáticos como o Cassandra e o Riak.
Cassandra é uma implementação de família de colunas NoSQL que suporta o modelo de dados Big Table e usa aspectos de arquitetura introduzidos por Amazon Dynamo. Alguns dos pontos positivos do Cassandra são:
- Altas escalabilidade e disponibilidade, sem um ponto único de falha
- Implementação da família de colunas NoSQL
- Rendimento de gravação muito alto e bom rendimento de leitura
- Linguagem de consulta semelhante a SQL (desde 0.8) e suporte para procura por índices secundários
- Consistência ajustável e suporte para replicação
- Esquema flexível
Esses pontos positivos tornam fácil recomendar o Cassandra, mas é fundamental para um desenvolvedor observar os detalhes e pontos difíceis da solução para conhecer os detalhes desse programa.
Cassandra armazena dados de acordo com o modelo de dados de família de colunas, demonstrado na Figura
mais explicações: http://www.ibm.com/developerworks/br/library/os-apache-cassandra/
4)Memcached
Dados transientes (como sessões web, bloqueios, ou estatísticas de curto prazo) devem ser mantidos em um armazenamento de dados transitórios como Memcache.
http://www.ibm.com/developerworks/br/opensource/library/os-memcached/
http://www.objectzilla.com.br/2009/05/02/ja-usou-memcached.html
Próximo passo: escolher 1 para implementar
FONTES:
http://forum.imasters.com.br/topic/406606-qual-o-melhor-banco-de-dados-nosql/
http://pt.slideshare.net/fabioperrella56/no-sql-e-as-vantagens-na-utilizao-do-mongodb
NoSQL - teorema CAP
Claro que todos os benefícios não vem sem custo, comparado com os bancos de dados tradicionais vamos perder alguma funcionalidade/garantia para ganhar outra. O tradeoff arquitetural é descritono bem conhecido CAP theorem.
é preciso escolher entre consistência forte (C – Consistency), alta disponibilidade (A – availability) e tolerância a particionamento dos dados na rede(P – Network Partition Tolerance). Segundo o teorema CAP, entre as três propriedades, somente duas podem ser garantidas ao mesmo tempo.
Assim temos vários tipos diferentes de Nosql, combinando 2 das 3 características.
NoSQL Sistemas CP -> Consistência + Tolerância a particionamento de dados: é necessário abrir um pouco a mão da disponibilidade. Pode acontecer caso haja um particionamento e o sistema não entre em consenso que uma escrita seja retirada. Claro que os sistemas tentam evitar ao máximo que isso ocorra minimizando os problemas.
Exemplos: MongoDB, HBase, BigTable
NoSQL Sistemas AP -> Disponibilidade + Tolerância a particionamento: Existem sistemas que jamais podem ficar offline porém não desejam sacrificar a disponibilidade. Assim, para ter alta disponibilidade com tolerância a particionamento é necessário é preciso sacrificar sua consistência. A ideia aqui é que os sistemas aceitam escritas sempre e tentam sincronizar os dados em algum momento depois (read-consistency). Então pode ter uma janela de inconsistência. Exemplos aqui são Amazon Dynamo, Cassandra ou Riak.
Sistemas CA (Bancos Tradicionais) -> Consistência + disponibilidade: Os sistemas com consistência forte e alta disponibilidade (CA) (alta disponibilidade de um nó apenas) não sabem lidar com a possível falha de uma partição. Caso ocorra, sistema inteiro pode ficar indisponível até o membro do cluster voltar. Exemplos disso são algumas configurações clássicas de bancos relacionais.
Diferença entre CA e CP:
Vimos brevemente o teorema CAP e a escolha que os sistemas NoSQL fazem (CP ou AP) comparado com os bancos tradicionais (CA). É importante mencionar que para o desenvolvedor não haverá tantas diferenças entre CA ou CP. SEMPRE teremos consistência forte, no entanto, um sistema fica indisponível (CA) quando há particionamento – pois tem apenas alta disponibilidade por nó – e o outro sistema (CP) tente chegar a um consenso se aceita uma escrita ou não, que no pior dos casos também pode significar a indisponibilidade para uma parte dos dados. Seguindo desse raciocínio podemos perceber que a consistência e disponibilidade são extremos quando há particionamento.
“… se há particionamento (P), o sistema pode valorizar a disponibilidade (A) ou a consistência (C), senão, quando o sistema roda sem partições, o sistema pode favorecer o tempo da resposta/latência (L) ou a consistência (C).”
FONTE:
http://blog.caelum.com.br/nosql-do-teorema-cap-para-paccl/
Assinar:
Postagens (Atom)