O documento discute Active Record e o projeto Octopus. Active Record é um padrão de mapeamento objeto-relacional usado no framework Rails que mapeia classes e objetos para tabelas e registros de banco de dados. O projeto Octopus é uma biblioteca que adiciona suporte a sharding de banco de dados para Active Record, permitindo que dados sejam particionados em vários bancos de dados.
O documento resume as principais características e mudanças introduzidas nas versões Java 9, 10 e 11. Java 9 trouxe a modularização do JDK, ferramentas como o jlink e jdeps, arquivos JAR multi-versão e melhorias na API de coleções. Java 10 adicionou inferência de tipo para variáveis locais, melhor apoio a Docker e compartilhamento de classes de aplicativos. Java 11 removeu módulos legados, adicionou o Flight Recorder e algoritmos criptográficos ChaCha20 e Poly1305.
O documento apresenta o banco de dados não relacional CouchDb. Resume o que é CouchDb, como funciona armazenando documentos de forma autocontida sem esquema pré-definido e manipulando os dados através de requisições HTTP em formato JSON de forma independente da linguagem. Apresenta um exemplo HelloWorld com PHP que armazena e lê tweets com uma hashtag do CouchDb.
Este documento apresenta o Apache CouchDB, um banco de dados não-relacional (NoSQL) que armazena dados em formato de documentos JSON. Ele descreve as principais características do CouchDB, incluindo armazenamento flexível em documentos, consultas em JavaScript, replicação e API RESTful. Além disso, explica as diferenças entre bancos de dados relacionais e documentais e fornece um exemplo simples de uso do MapReduce no CouchDB.
CouchDB é um banco de dados orientado a documentos escrito em Erlang. Ele armazena dados flexíveis em formato JSON e fornece recursos como views, replicação, segurança e validação através de JavaScript. CouchDB é usado por aplicativos do Facebook e BBC devido à sua escalabilidade e desempenho.
O documento apresenta uma palestra sobre Ruby on Rails. Resume que Ruby on Rails é um framework web completo para desenvolvimento de aplicações, que inclui componentes como Active Record, Action Controller e Action View. O documento também explica como instalar e criar um projeto simples em Rails.
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
O documento discute a filosofia por trás da linguagem de programação Ruby e do framework Rails. Ele destaca três principais aspectos: código, cultura e criatividade. Também discute porque startups e investidores estão adotando Ruby/Rails, citando sua rapidez de desenvolvimento e o grande ecossistema em torno da plataforma.
1) O documento discute bancos de dados orientados a documentos como o CouchDB, onde cada registro é armazenado como um documento com características próprias ao invés de tabelas com campos fixos.
2) Esses bancos não possuem esquema fixo, permitindo que documentos tenham campos diferentes e sejam adicionados dinamicamente.
3) Isso traz flexibilidade e escalabilidade, tornando esses bancos adequados para armazenar dados da web que são voláteis e sem estrutura definida.
O documento discute os benefícios e desafios do uso da plataforma Node.js para construir um gateway de pagamentos online. Node.js é adequado para este caso devido à natureza assíncrona e de I/O intensiva da aplicação. Entretanto, o código assíncrono em Node.js pode se tornar complexo e causar problemas, e a plataforma ainda está em desenvolvimento. Abordagens como testes, padronização e microserviços podem ajudar a superar esses desafios.
O documento resume as principais características e mudanças introduzidas nas versões Java 9, 10 e 11. Java 9 trouxe a modularização do JDK, ferramentas como o jlink e jdeps, arquivos JAR multi-versão e melhorias na API de coleções. Java 10 adicionou inferência de tipo para variáveis locais, melhor apoio a Docker e compartilhamento de classes de aplicativos. Java 11 removeu módulos legados, adicionou o Flight Recorder e algoritmos criptográficos ChaCha20 e Poly1305.
O documento apresenta o banco de dados não relacional CouchDb. Resume o que é CouchDb, como funciona armazenando documentos de forma autocontida sem esquema pré-definido e manipulando os dados através de requisições HTTP em formato JSON de forma independente da linguagem. Apresenta um exemplo HelloWorld com PHP que armazena e lê tweets com uma hashtag do CouchDb.
Este documento apresenta o Apache CouchDB, um banco de dados não-relacional (NoSQL) que armazena dados em formato de documentos JSON. Ele descreve as principais características do CouchDB, incluindo armazenamento flexível em documentos, consultas em JavaScript, replicação e API RESTful. Além disso, explica as diferenças entre bancos de dados relacionais e documentais e fornece um exemplo simples de uso do MapReduce no CouchDB.
CouchDB é um banco de dados orientado a documentos escrito em Erlang. Ele armazena dados flexíveis em formato JSON e fornece recursos como views, replicação, segurança e validação através de JavaScript. CouchDB é usado por aplicativos do Facebook e BBC devido à sua escalabilidade e desempenho.
O documento apresenta uma palestra sobre Ruby on Rails. Resume que Ruby on Rails é um framework web completo para desenvolvimento de aplicações, que inclui componentes como Active Record, Action Controller e Action View. O documento também explica como instalar e criar um projeto simples em Rails.
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
O documento discute a filosofia por trás da linguagem de programação Ruby e do framework Rails. Ele destaca três principais aspectos: código, cultura e criatividade. Também discute porque startups e investidores estão adotando Ruby/Rails, citando sua rapidez de desenvolvimento e o grande ecossistema em torno da plataforma.
1) O documento discute bancos de dados orientados a documentos como o CouchDB, onde cada registro é armazenado como um documento com características próprias ao invés de tabelas com campos fixos.
2) Esses bancos não possuem esquema fixo, permitindo que documentos tenham campos diferentes e sejam adicionados dinamicamente.
3) Isso traz flexibilidade e escalabilidade, tornando esses bancos adequados para armazenar dados da web que são voláteis e sem estrutura definida.
O documento discute os benefícios e desafios do uso da plataforma Node.js para construir um gateway de pagamentos online. Node.js é adequado para este caso devido à natureza assíncrona e de I/O intensiva da aplicação. Entretanto, o código assíncrono em Node.js pode se tornar complexo e causar problemas, e a plataforma ainda está em desenvolvimento. Abordagens como testes, padronização e microserviços podem ajudar a superar esses desafios.
Ruby on Rails foi criado em 2003 e se tornou popular por permitir o desenvolvimento rápido de aplicações web. O documento descreve a história do Ruby e do Rails, características e aplicações comuns, dicas para desenvolvedores Rails e recursos para aprender Rails.
O documento discute ferramentas e soluções para diminuir a complexidade do desenvolvimento de software, como integração contínua e ambientes automatizados. Ferramentas como Maven, Ant, Ivy, Hudson, PMD, Checkstyle e Findbugs automatizam tarefas como build, testes e análise de qualidade de código. XSLT e XPath podem ser usados para gerar documentação e configurações a partir de dados em arquivos XML.
O documento apresenta informações sobre uma organização que apoia eventos sobre In-Memory OLTP no SQL Server. A agenda inclui tópicos como conceitos, arquitetura, demonstrações e casos reais de implementação. Dois palestrantes são apresentados com suas credenciais e contatos.
O documento apresenta uma introdução ao Ajax, abordando:
1) O que é Ajax, seus benefícios e casos de uso;
2) Os fundamentos tecnológicos como XML, JavaScript, CSS e DOM;
3) Os passos para implementar uma requisição e resposta Ajax.
O documento discute o uso da tecnologia Node.js para construir uma API de pagamentos. Ele explica porque Node.js é adequado para este tipo de aplicação devido à sua natureza assíncrona e orientada a eventos, permitindo lidar com muitas requisições simultâneas de forma escalável. O documento também discute problemas comuns de Node.js e como evitá-los, além de abordar tópicos como infraestrutura, testes e monitoramento.
O documento descreve o SQLite, um banco de dados SQL leve e open source. Ele define o SQLite como uma biblioteca que armazena e recupera dados diretamente de um arquivo no disco, sem necessidade de configuração ou servidor. O documento também discute a história, características, instalação e uso do SQLite.
Este documento apresenta uma introdução ao Elasticsearch, cobrindo sua visão, histórico, conceitos-chave, instalação, buscas, clientes, arquitetura e considerações sobre desempenho. É dado ênfase aos processos de indexação, busca, clientes Java e arquitetura distribuída do Elasticsearch.
Este documento fornece uma introdução à Java Persistence API (JPA), abordando tópicos como: 1) relacionamentos entre objetos; 2) mapeamento objeto-relacional; 3) introdução prática com um exemplo "Hello World" utilizando JPA.
Dicas para desenvolvedores que querem fazer uma Web rápida e divertida.
Explicações sobre HTTP, HTML, CSS, JavaScripts, ferramentas e bibliotecas que fazem nossa vida mais fácil
Este documento fornece um resumo sobre WebServlets de acordo com a especificação Java EE 7. Ele contém informações sobre aplicações Web, WebServlets, requisições e respostas HTTP, URLs e redirecionamento, contexto da aplicação, sessão do cliente, filtros interceptadores e arquitetura MVC.
Interoperabilidade entre bancos de dadospichiliani
Este documento discute a interoperabilidade entre bancos de dados de diferentes fornecedores. Ele explica que cenários multi-banco são comuns e discute conceitos comuns entre bancos de dados. Também aborda como trocar objetos, dados e instruções entre bancos de dados heterogêneos, incluindo recursos de replicação e ferramentas para conversão de SQL.
Interoperabilidade entre bancos de dadospichiliani
O documento discute a interoperabilidade entre bancos de dados de diferentes fornecedores. Ele explica que ambientes multi-banco são comuns e discute conceitos comuns e desafios de interoperabilidade na administração e troca de dados entre bancos. O documento também analisa ferramentas e técnicas para replicação heterogênea e conversão de instruções SQL entre bancos de dados.
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
Este documento resume as experiências de três anos usando Scala em produção para um site de monitoramento de notícias. Inicialmente o código foi migrado de Ruby para Scala para melhorar o coletor de feeds e indexação no ElasticSearch. A arquitetura usa Akka para o crawler assíncrono e Scalatra para as APIs. Ao longo dos anos houve atualizações para novas versões do Scala e liabras, e a equipe aprendeu a importância do estilo de código e ferramentas como Scalastyle.
Microsoft Azure Storage - Tudo o que você precisa saber sobre armazenamento d...Lucas A. Romão
Evento: Azure Summit Brasil 2014
Palestra: Microsoft Azure Storage - Tudo o que você precisa saber sobre armazenamento de alta performance
Palestrante: Lucas A. Romão
Descrição: Esta palestra foi baseada em uma das seções do TechEd North America '14 onde foram tratadas as principais características do Storage do Microsoft Azure, como por exemplo, modelos de redundância, como explorar o recurso Azure Files, melhores práticas e cenários.
O documento resume a evolução dos sistemas de gerenciamento de dados, desde os primórdios dos bancos de dados até os sistemas atuais de grande escala. Começa com os modelos de rede e ISAM nos anos 1960, passa pelo modelo relacional e sistemas como System R e Ingres, a popularização dos SGBDs relacionais, e as limitações impostas pelas novas aplicações da Web. Apresenta então o renascimento dos sistemas de armazenamento chave-valor, projetos como Bigtable e Dynamo, e a categoria de sistemas
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
Apresentação de pesquisa onde é feita uma revisão bibliográfica sobre a linguagem de programação Ruby e o arcabouço Ruby on Rails, os quais são utilizados para o desenvolvimento ágil de aplicações para plataforma web. Nesta são analisados diversos requisitos necessários para o desenvolvimento de aplicações eficientes e de forma produtiva.
Este documento apresenta uma introdução ao MongoDB, incluindo: (1) o que é NoSQL e MongoDB, (2) tipos de dados NoSQL, (3) modelagem de dados no MongoDB, (4) operações CRUD e (5) operadores lógicos. O documento também fornece instruções sobre como inicializar e usar o MongoDB.
O documento discute técnicas para otimizar o desempenho de websites desenvolvidos em PHP. Ele aborda ajustes que podem ser feitos no servidor web e no banco de dados para melhorar a performance, como utilização de módulos do Apache, configuração do MySQL e uso de cache. Além disso, apresenta técnicas de profiling em PHP para identificar gargalos e otimizações como compactação de arquivos e static assets.
O documento apresenta MongoDB, seu modelo de dados, o Aggregation Framework e como ele pode ser usado para agregar e resumir dados armazenados no banco de dados de forma flexível e eficiente. O documento também discute replicasets e sharding para disponibilidade e escalabilidade.
Resque é uma biblioteca baseada em Redis para criar tarefas em segundo plano, colocando-as em várias filas e processando-as posteriormente. Ele é usado no GitHub para criar caches, contar uso de disco, gerar tarballs, gems e eventos no banco de dados, construir gráficos e excluir usuários. Resque fornece uma classe Job para definir tarefas e um worker para processá-las, além de um monitor Sinatra para acompanhar as filas e trabalhadores.
Ruby on Rails foi criado em 2003 e se tornou popular por permitir o desenvolvimento rápido de aplicações web. O documento descreve a história do Ruby e do Rails, características e aplicações comuns, dicas para desenvolvedores Rails e recursos para aprender Rails.
O documento discute ferramentas e soluções para diminuir a complexidade do desenvolvimento de software, como integração contínua e ambientes automatizados. Ferramentas como Maven, Ant, Ivy, Hudson, PMD, Checkstyle e Findbugs automatizam tarefas como build, testes e análise de qualidade de código. XSLT e XPath podem ser usados para gerar documentação e configurações a partir de dados em arquivos XML.
O documento apresenta informações sobre uma organização que apoia eventos sobre In-Memory OLTP no SQL Server. A agenda inclui tópicos como conceitos, arquitetura, demonstrações e casos reais de implementação. Dois palestrantes são apresentados com suas credenciais e contatos.
O documento apresenta uma introdução ao Ajax, abordando:
1) O que é Ajax, seus benefícios e casos de uso;
2) Os fundamentos tecnológicos como XML, JavaScript, CSS e DOM;
3) Os passos para implementar uma requisição e resposta Ajax.
O documento discute o uso da tecnologia Node.js para construir uma API de pagamentos. Ele explica porque Node.js é adequado para este tipo de aplicação devido à sua natureza assíncrona e orientada a eventos, permitindo lidar com muitas requisições simultâneas de forma escalável. O documento também discute problemas comuns de Node.js e como evitá-los, além de abordar tópicos como infraestrutura, testes e monitoramento.
O documento descreve o SQLite, um banco de dados SQL leve e open source. Ele define o SQLite como uma biblioteca que armazena e recupera dados diretamente de um arquivo no disco, sem necessidade de configuração ou servidor. O documento também discute a história, características, instalação e uso do SQLite.
Este documento apresenta uma introdução ao Elasticsearch, cobrindo sua visão, histórico, conceitos-chave, instalação, buscas, clientes, arquitetura e considerações sobre desempenho. É dado ênfase aos processos de indexação, busca, clientes Java e arquitetura distribuída do Elasticsearch.
Este documento fornece uma introdução à Java Persistence API (JPA), abordando tópicos como: 1) relacionamentos entre objetos; 2) mapeamento objeto-relacional; 3) introdução prática com um exemplo "Hello World" utilizando JPA.
Dicas para desenvolvedores que querem fazer uma Web rápida e divertida.
Explicações sobre HTTP, HTML, CSS, JavaScripts, ferramentas e bibliotecas que fazem nossa vida mais fácil
Este documento fornece um resumo sobre WebServlets de acordo com a especificação Java EE 7. Ele contém informações sobre aplicações Web, WebServlets, requisições e respostas HTTP, URLs e redirecionamento, contexto da aplicação, sessão do cliente, filtros interceptadores e arquitetura MVC.
Interoperabilidade entre bancos de dadospichiliani
Este documento discute a interoperabilidade entre bancos de dados de diferentes fornecedores. Ele explica que cenários multi-banco são comuns e discute conceitos comuns entre bancos de dados. Também aborda como trocar objetos, dados e instruções entre bancos de dados heterogêneos, incluindo recursos de replicação e ferramentas para conversão de SQL.
Interoperabilidade entre bancos de dadospichiliani
O documento discute a interoperabilidade entre bancos de dados de diferentes fornecedores. Ele explica que ambientes multi-banco são comuns e discute conceitos comuns e desafios de interoperabilidade na administração e troca de dados entre bancos. O documento também analisa ferramentas e técnicas para replicação heterogênea e conversão de instruções SQL entre bancos de dados.
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
Este documento resume as experiências de três anos usando Scala em produção para um site de monitoramento de notícias. Inicialmente o código foi migrado de Ruby para Scala para melhorar o coletor de feeds e indexação no ElasticSearch. A arquitetura usa Akka para o crawler assíncrono e Scalatra para as APIs. Ao longo dos anos houve atualizações para novas versões do Scala e liabras, e a equipe aprendeu a importância do estilo de código e ferramentas como Scalastyle.
Microsoft Azure Storage - Tudo o que você precisa saber sobre armazenamento d...Lucas A. Romão
Evento: Azure Summit Brasil 2014
Palestra: Microsoft Azure Storage - Tudo o que você precisa saber sobre armazenamento de alta performance
Palestrante: Lucas A. Romão
Descrição: Esta palestra foi baseada em uma das seções do TechEd North America '14 onde foram tratadas as principais características do Storage do Microsoft Azure, como por exemplo, modelos de redundância, como explorar o recurso Azure Files, melhores práticas e cenários.
O documento resume a evolução dos sistemas de gerenciamento de dados, desde os primórdios dos bancos de dados até os sistemas atuais de grande escala. Começa com os modelos de rede e ISAM nos anos 1960, passa pelo modelo relacional e sistemas como System R e Ingres, a popularização dos SGBDs relacionais, e as limitações impostas pelas novas aplicações da Web. Apresenta então o renascimento dos sistemas de armazenamento chave-valor, projetos como Bigtable e Dynamo, e a categoria de sistemas
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
Apresentação de pesquisa onde é feita uma revisão bibliográfica sobre a linguagem de programação Ruby e o arcabouço Ruby on Rails, os quais são utilizados para o desenvolvimento ágil de aplicações para plataforma web. Nesta são analisados diversos requisitos necessários para o desenvolvimento de aplicações eficientes e de forma produtiva.
Este documento apresenta uma introdução ao MongoDB, incluindo: (1) o que é NoSQL e MongoDB, (2) tipos de dados NoSQL, (3) modelagem de dados no MongoDB, (4) operações CRUD e (5) operadores lógicos. O documento também fornece instruções sobre como inicializar e usar o MongoDB.
O documento discute técnicas para otimizar o desempenho de websites desenvolvidos em PHP. Ele aborda ajustes que podem ser feitos no servidor web e no banco de dados para melhorar a performance, como utilização de módulos do Apache, configuração do MySQL e uso de cache. Além disso, apresenta técnicas de profiling em PHP para identificar gargalos e otimizações como compactação de arquivos e static assets.
O documento apresenta MongoDB, seu modelo de dados, o Aggregation Framework e como ele pode ser usado para agregar e resumir dados armazenados no banco de dados de forma flexível e eficiente. O documento também discute replicasets e sharding para disponibilidade e escalabilidade.
Resque é uma biblioteca baseada em Redis para criar tarefas em segundo plano, colocando-as em várias filas e processando-as posteriormente. Ele é usado no GitHub para criar caches, contar uso de disco, gerar tarballs, gems e eventos no banco de dados, construir gráficos e excluir usuários. Resque fornece uma classe Job para definir tarefas e um worker para processá-las, além de um monitor Sinatra para acompanhar as filas e trabalhadores.
O documento discute como tornar Java mais funcional através da imutabilidade, recursão, avaliação preguiçosa, funções e closures. Ele também aborda princípios como combinators, filter e map e estruturas de dados persistentes.
Este documento discute os benefícios de usar bancos de dados NoSQL e apresenta vários estudos de caso de empresas que migraram com sucesso para sistemas NoSQL como MongoDB e Redis. Ele também aborda desafios comuns como importação e exportação de dados, recuperação em caso de falha e questões de escalabilidade.
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
O documento discute as vantagens de bancos NoSQL em relação a bancos de dados relacionais tradicionais para armazenar grandes quantidades de dados. O autor apresenta exemplos de bancos NoSQL como MongoDB, orientado a documentos, e Riak, baseado em chave-valor, e discute como cada um pode ser usado para diferentes casos. O autor também fornece exemplos de código para inserir e consultar dados nesses bancos usando Python.
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
O documento resume as principais características e conceitos da linguagem de programação Ruby e do framework web Ruby on Rails. Foi lançado em 1995 e projetado para tornar os programadores felizes, com sintaxe enxuta e tudo como objeto. Rails facilita o desenvolvimento web ágil com convenções sobre configuração, DRY e simplicidade.
1) O documento discute os principais tipos de bancos de dados, incluindo SQL, NoSQL e Hadoop.
2) Apresenta os conceitos básicos de bancos de dados, sistemas de gerenciamento de bancos de dados e arquiteturas.
3) Discutem técnicas como map-reduce usadas em bancos de dados NoSQL para manipular grandes volumes de dados.
1) O documento discute bancos de dados SQL, NoSQL e Hadoop, incluindo conceitos, comandos e sistemas de bancos de dados.
2) É apresentada a arquitetura cliente-servidor para sistemas de banco de dados e exemplos de sistemas como MySQL, PostgreSQL e Oracle.
3) São descritos conceitos como atomicidade, consistência, isolamento e durabilidade (ACID) e técnicas como map-reduce usadas em bancos de dados NoSQL.
O documento discute o uso de tag libraries (JSTL) em JSP para encapsular lógica de programação e padronizar elementos comuns. Ele explica como declarar e usar tags personalizados através de bibliotecas de tags e apresenta a JSTL, que fornece tags padrão para controle de fluxo, internacionalização e acesso a bancos de dados.
O documento discute o que é um banco de dados noSQL, suas vantagens em relação aos bancos relacionais e os principais tipos de bancos noSQL, incluindo chave-valor, grafo, colunas e documentos. O MongoDB é destacado como um banco de dados do tipo documentos.
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
O documento fornece dicas sobre como otimizar o desempenho de um banco de dados PostgreSQL. Ele discute problemas comuns de desempenho, escolhas de configuração erradas, melhorias de hardware e software, parâmetros do sistema operacional e do PostgreSQL, ferramentas de teste de desempenho e escalabilidade.
Semelhante a Projeto Octopus - Database Sharding para ActiveRecord (20)
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
Projeto Octopus - Database Sharding para ActiveRecord
1. Active Record
&
Projeto Octopus
Thiago Pradi - Ruby Masters Conf 2011
2. Thiago Pradi
• Desenvolvedor Web na Taoweb Zinfinit
• Desenvolvedor Ruby a 3 anos
• Bacharelando em Ciência da Computação
• Participou do Ruby Summer of Code 2010
4. ActiveRecord - Padrão
• Objeto encapsula o acesso a base
• Objeto guarda regras de negócio
• Cada classe representa uma tabela
• Cada instância representa um registro
• Cada coluna representa um atributo
11. Gerência de Conexão
• Cada instância pede ao “Gerenciador de
conexões” uma conexão quando
necessário
• O Model usa a conexão e a devolve ao
gerenciador
• Proporcionando Economia de recursos
• e Problemas de concorrência?!
17. Connection
Specification
• Os atributos da conexão são carregados via
Railties ou definidos manualmente.
• Faz o require do adapter necessário, e
instância uma nova especificação da
conexão, passando como parâmetro para o
Construtor do ConnectionPool
• Adapters?!
18. Connection Adapter
• Classe abstrata responsável por definir os
métodos básicos necessários para suportar
um novo banco
• “Abstração” da conexão ao banco de
dados
• Todos os Adapters herdam do Abstract
Adapter
19. Adapters Inclusos no
Rails
• Mysql (Mysql e MySQL2 Adapters)
• PostgreSQL (PostgreSQL Adapter)
• Sqlite (SQLite e SQLite3 Adapters)
20. Voltando ao nosso
tema...
• Como temos uma conexão por model, uma
classe interna é utilizada para gerenciar as
instâncias de ConnectionPool
• Classe que implementa comportamento de
Hash
• Utilizando o nome do modelo como chave,
retorna o ConnectionPool adequado.
21. Models
class User < ActiveRecord::Base
establish_connection :development_2
end
class Post < ActiveRecord::Base
end
27. Database Sharding
• Divisão dos dados entre várias instâncias
de banco de dados
• Motivado por problemas de escalabilidade
(Conexões paralelas, alto volume de
trafego).
• Cada fragmento (instância) salva uma parte
da base de dados
28. Prós / Sharding
• Bases menores significa mais performance
• Se um servidor cair, os outros continuam
operando
• Consultas distribuidas, possibilitando
trabalhos em paralelo.
29. Contras / Sharding
• Consultas entre Shards
• Dificuldade de balanceamento futuro
• Implementações não oficiais
• Conflito entre bases
31. Master/Master
• Cada instância fica com a replicação
configurada, sendo slave e master ao
mesmo tempo
• Geralmente, no caso de duas bases,
números pares e ímpares são utilizados
para ID.
33. Master/Slaves
• Cada consulta é enviada para um log
• o banco escravo é configurado para ler o
log do master
• Os escravos ficam na escuta do log
• Quando uma consulta de escrita chega, os
escravos executam ela na sua instância.
34. Master/Slaves
• Dados não particionados
• Suporte oficial pela maioria dos banco de
dados
• Somente uma instância escreve os dados, as
outras funcionam somente para leitura
• Cada instância carrega uma cópia da base
35. Master/Slaves
• Base de dados contém backup em tempo
real
• Processamento de leitura distribuído entre
vários servidores
36. MySQL
• Master/Slaves suporte oficial
• Funciona com Log Binário
• Master/Master com o MySQLMM ( Não
Oficial)
• Mysql Cluster
37. PostgreSQL
• Master/Slave incluso com a versão 9.0
• Funciona via streaming de Log
• Várias alternativas: http://
wiki.postgresql.org/wiki/
Replication,_Clustering,_and_Connection_
Pooling
38. Oracle
• Replicação built-in
• Várias soluções para Replicação entre
diferentes bases de dados:
• http://www.oracle.com/technetwork/
database/features/data-integration/
default-159085.html
43. Problemas
• Problema simples: alguns relatórios pesados
estavam destruindo a performance do
banco
• Existia um banco Replicado, para onde
algumas consultas poderiam ser enviadas
• Simples! Vamos procurar uma
implementação de Database Sharding!
45. Infelizmente
• Falta de documentação
• Falta de exemplos
• Bibliotecas complexas e difíceis de
customização.
• Não compatíveis com Rails 3
46. Então, resolvi meu
próprio problema!
• O Projeto Octopus foi aprovado para o
Ruby Summer of Code 2010.
• Trabalhei em conjunto com meu mentor
Mike Perham, autor da gem DataFabric
47. Idéia Inicial
• Implementação simples e flexível
• Possibilidade de escolher quais consultas
devem ser enviadas para qual shard.
• Suportar Sharding e replicação
• Suporte a mover massas de dados entre
Shards
48. Conversa com Mentor
• Foco nas primeiras features, e mais
importantes
• Inicio da implementação
49. Octopus nascendo!
• Idéia baseada no Masochism e no
DataFabric
• Monkey-patch no método que retorna a
conexão, e ao invés de retornar a conexão
real, um “Proxy” é retornado
• Classe Octopus::Proxy
50. Arquivo de
Configuração
• localizado em config/shards.yml
• Salva as informações sobre o modo de
operação, e o shards disponíveis.
• Possibilita agrupamento de shards
51. Exemplo:
octopus:
replicated: true
shards:
slave1:
database: octopus_shard2
adapter: mysql
host: localhost
slave2:
database: octopus_shard3
adapter: mysql
host: localhost
53. Exemplo:
class CreateUsersOnBothShards < ActiveRecord::Migration
using(:brazil, :canada)
def self.up
User.create!(:name => "Both")
end
def self.down
User.delete_all()
end
end
54. Exemplo:
class CreateUsersOnShardsOfAGroup < ActiveRecord::Migration
using_group(:country_shards)
def self.up
User.create!(:name => "Group")
end
def self.down
User.delete_all()
end
end
58. Controle de shards
# Busca o usuário no shard1
@user = User.using(:shard1).find_by_name("Joao")
# Busca o usuário no master
@user2 = User.find_by_name("Jose")
#Define um novo nome de usuário
@user.name = "Mike"
# Salva o usuário na base de dados correta.
@user.save
60. Stack do Rails
class ApplicationController < ActionController::Base
around_filter :select_shard
def select_shard(&block)
if logged_in?
Octopus.using(current_user.shard, &block)
else
yield
end
end
end
61. Replicação
• Uma base Master
• Vários Slaves
• Escritas enviadas para o Master
• Leituras enviadas para os Slaves
62. Stack do Rails
• Totalmente integrado com a stack inteira
do Rails
• Permite uma experiência de usuário
simples e funcional.
63. Octopus Off Rails
• Pensado para funcionar off da stack do
Rails
• Funciona com Sinatra, etc
68. Idéias para o Futuro
• Configuração automática do banco de
dados para replicação
• Ferramenta para mover/sincronizar dados
entre os shards
• Melhores algoritmos de balanceamento
69. Participe do Projeto!
• O Octopus não é perfeito
• Submeta idéias/patches
• Arquivo TODO.txt na raiz do projeto
• Leia a Wiki / README no github