TAO
THE POWER OF THE GRAPH
CRISTIANO SANTOS
TÉRCIO SOUZA
DESKTOP BROWSER
MOBILE DEVICE
SOCIAL GRAPH
SOCIAL GRAPH
MEMCACHE & MYSQL
MEMCACHE & MYSQL
NEM MESMO A MELHOR TECNOLOGIA DE BD RELACIONAL DARIA CONTA SEM UM CACHE
MEMCACHE DESEMPENHA ESSA FUNÇÃO DESDE QUE ZUCKERBERG INSTALOU NOS SERVIDORES APACHE EM 2005
MEMCACHE DESEMPENHA ESSA FUNÇÃO DESDE QUE ZUCKERBERG INSTALOU NOS SERVIDORES APACHE EM 2005
MEMCACHE & MYSQL
- INEFICIÊNCIA DO INNODB
- LOCALIDADE
- DATA DE CRIAÇÃO
- REQUISIÇÕES SEM SENTIDO
- CACHE POLUÍDO
MEMCACHE & MYSQL
- DIFERENTES DBS E MODELOS
- MAIS CONHECIMENTO DOS ENGENHEIROS
- BUGS
- INCONSISTÊNCIAS VISÍVEIS
- PERFORMANCE
MEMCACHE & MYSQL
MODIFICAÇÕES NO SCHEMA REQUISITAVAM MUITA COORDENAÇÃO DOS ENGENHEIROS E OPERADORES DOS CLUSTERS MYSQL
E AGORA?
OBJECTS & ASSOCIATIONS
2007
OBJECTS & ASSOCIATIONS API
- DADOS EM GRAFOS
- INICIALMENTE EM PHP
- NÓS (OBJETOS) E ARESTAS (RELAÇÕES)
- SUCESSO IMEDIATO
- SEM CHAMADAS DIRETAS (MYSQL OU MEMCACHE)
OBJECTS & ASSOCIATIONS API
- INVALIDAÇÃO DE ITENS EM CACHE
- OPERAÇÕES COM TODA LISTA DE RELAÇÕES
- DIFICULDADE EM MANTER CONSISTÊNCIA (CACHE)
- THUNDERING HERDS
INÍCIO DE 2009 COMEÇAM O TAO
CLUSTERS DISTRIBUÍDOS GEOGRAFICAMENTE
BILHÕES DE LEITURAS, MILHÕES DE ESCRITAS
TAO DATA MODEL & API

OBJECTS API
TAO PERMITE OPERAÇÕES PARA ALOCAR UM NOVO OBJETO E SEU ID, PARA RECUPERAR, ATUALIZAR, OU DELETAR O OBJETO ASSOCIADO A UM ID.
ASSOCIATIONS API
assoc_add(id1, atype, id2, time, (k -> v)*)ADICIONA OU SUBSCREVE A ASSOCIAÇÃO (id1, atype, id2), E SEU INVERSO (id1, inv(atype), id2) SE DEFINIDO.
assoc_delete(id1, atype, id2)DELETA A ASSOCIAÇÃO (id1, atype, id2) E O INVERSO, SE DEFINIDO
assoc_change_type(id1, atype, id2, newtype)MODIFICA A ASSOCIAÇÃO (id1, atype, id2) PARA (id1, newtype, id2), SE (id1, atype, id2) EXISTE
ASSOCIATIONS QUERY API
assoc_get(id1, atype, id2set, high?, low?)RETORNA TODAS AS ASSOCIAÇÕES (id1, astype, id2) E SEUS DADOS E TEMPO, ONDE id2 PERTENCE id2set E high >= time >= low (SE ESPECIFICADO)
assoc_count(id1, atype)RETORNA O TAMANHO DA LISTA DE ASSOCIAÇÕES PARA (id1, atype)
ASSOCIATIONS QUERY API
assoc_range(id1, atype, pos, limit)RETORNA ELEMENTOS DE LISTA DE ASSOCIAÇÕES (id1, atype) COM ÍNDICE PERTENCENTE A [pos, pos + limit)
assoc_time_range(id1, atype, high, low, limit)RETORNA ELEMENTOS DA LISTA DE ASSOCIAÇÕES (id1, atype) COMEÇANDO PELA PRIMEIRA ASSOCIAÇÃO ONDE time <= high, RETORNANDO ARESTAS ONDE time >= low
ASSOCIATIONS QUERY API
POSSÍVEIS REQUISIÇÕES:
- "50 MOST RECENT COMMENTS ON ALICE'S CHECKIN"
- "HOW MANY CHECKINS AT THE GG BRIDGE?"
assoc_range(632, COMMENT, 0, 50)assoc_count(534, CHECKIN)IMPLEMENTAÇÃO
TAO RODA EM UMA COLEÇÃO DE CLUSTERS DISTRIBUIDOS GEOGRAFICAMENTE E ORGANIZADO LOGICAMENTE EM ÁRVORE.
OS CLUSTERS SEPARADOS SÃO USADOS PARA ARMAZENAR OS OBJETOS E AS ASSOCIAÇÕES, E EM CACHE NA RAM E MEMÓRIA FLASH
ESSA SEPARAÇÃO PERMITE ESCALAR CADA TIPO DE CLUSTER INDEPENDENTEMENTE
IMPLEMENTAÇÃO
- REQUISIÇÕES DOS CLIENTS
- TAO ORQUESTRA A CONSISTÊNCIA NOS CLUSTERS
- CONTINUA PERSISTINDO OS DADOS NO MYSQL
- MIGRAR OU CLONAR PARA SERVERS NO MESMO CLUSTER
- IGUALAR O CARREGAMENTO
- AMENIZAR PICOS DE CARGA

CONSISTÊNCIA
CONSISTÊNCIA
- TEOREMA CAP
- NÃO PODEM FICAR OFFLINE
- NÃO SACRIFICAM A DISPONIBILIDADE NO CAP
- PREJUDICAM A CONSISTÊNCIA
- SEMPRE ACEITA ESCRITAS, SINCRONIZA DEPOIS
- EX: AMAZON DYNAMO, CASSANDRA, RIAK, ...
CONSISTÊNCIA
- SLAVES NÃO PODEM ATUALIZAR DADOS
- REDIRECIONA AS ESCRITAS PARA O MASTER
- CONSISTÊNCIA READ-AFTER-WRITE
- TROCA DO MASTER
WORKLOAD
EXPERIMENTO: AMOSTRA DE 6,5 MILHÕES DURANTE UM PERÍODO DE 40 DIAS
- LEITURAS SÃO MUITO MAIS FREQUENTES QUE ESCRITAS
- MAIORIA DAS QUERIES DE ASSOCIAÇÕES TEM RESULTADOS VAZIOS




OBRIGADO!
CRISTIANO SANTOS
TÉRCIO SOUZA
TAO - The power of the graph
By cristianossd
TAO - The power of the graph
MATA88 presentation
- 654