THE POWER OF THE GRAPH
CRISTIANO SANTOS
TÉRCIO SOUZA
DESKTOP BROWSER
MOBILE DEVICE
SOCIAL GRAPH
SOCIAL GRAPH
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
- INEFICIÊNCIA DO INNODB
- LOCALIDADE
- DATA DE CRIAÇÃO
- REQUISIÇÕES SEM SENTIDO
- CACHE POLUÍDO
- DIFERENTES DBS E MODELOS
- MAIS CONHECIMENTO DOS ENGENHEIROS
- BUGS
- INCONSISTÊNCIAS VISÍVEIS
- PERFORMANCE
MODIFICAÇÕES NO SCHEMA REQUISITAVAM MUITA COORDENAÇÃO DOS ENGENHEIROS E OPERADORES DOS CLUSTERS MYSQL
- DADOS EM GRAFOS
- INICIALMENTE EM PHP
- NÓS (OBJETOS) E ARESTAS (RELAÇÕES)
- SUCESSO IMEDIATO
- SEM CHAMADAS DIRETAS (MYSQL OU MEMCACHE)
- 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 PERMITE OPERAÇÕES PARA ALOCAR UM NOVO OBJETO E SEU ID, PARA RECUPERAR, ATUALIZAR, OU DELETAR O OBJETO ASSOCIADO A UM ID.
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
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)
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
POSSÍVEIS REQUISIÇÕES:
assoc_range(632, COMMENT, 0, 50)assoc_count(534, CHECKIN)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
- 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
- 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, ...
- SLAVES NÃO PODEM ATUALIZAR DADOS
- REDIRECIONA AS ESCRITAS PARA O MASTER
- CONSISTÊNCIA READ-AFTER-WRITE
- TROCA DO MASTER
EXPERIMENTO: AMOSTRA DE 6,5 MILHÕES DURANTE UM PERÍODO DE 40 DIAS
CRISTIANO SANTOS
TÉRCIO SOUZA