SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Para Sites com Alto Volume
                             1
Bancos Suportados
●   PostgreSQL 8.1 ou superior (via
    psycopg2)
●   MySQL 5.0.x (via MySQLdb)
●   Oracle 10g (via cx_Oracle)




                                      2
Características
●   É um substituto para o FileStorage e ZEO.
●   Há um caminho simples para converter
    FileStorage para RelStorage e reverter
    novamente. Você pode também converter uma
    instância de RelStorage para um diferente
    banco de dados relacional.
●   Projetado para sites com grande volume:
    Múltiplas   instâncias    do   ZODB   podem
    compartilhar o mesmo banco de dados. Isto é
    similar para o ZEO, mas RelStorage não
    requer ZEO.

                                                3
Características (cont.)
●   De acordo com alguns testes, RelStorage
    manipula alta concorrência melhor que a
    combinação de ZEO e FileStorage.
●   Enquanto que o FileStorage toma mais tempo
    para iniciar à medida que o banco de dados
    cresce, devido a uma indexação de todos os
    objetos   na  memória,   RelStorage inicia
    rapidamente sem levar em consideração o
    tamanho do banco de dados.
●   Suporta undo e packing.
●   Livre, open source (ZPL 2.1)
                                             4
Tempo por transação
                 (objects_per_txn=10000)
       2,7
       2,6
       2,5
       2,4
       2,3
       2,2
       2,1
         2
       1,9
       1,8
       1,7
       1,6
       1,5
       1,4                                                  ZEO + FileStorage - write
Time




       1,3                                                  ZEO + FileStorage - read
       1,2                                                  PostgreSQLAdapter - write
       1,1                                                  PostgreSQLAdapter - read
         1                                                  MySQLAdapter - write
       0,9                                                  MySQLAdapter - read
       0,8                                                  OracleAdapter - write
       0,7                                                  OracleAdapter - read
       0,6
       0,5
       0,4
       0,3
       0,2
       0,1
         0
             1     3   5   7             9   11   13   15

                           Concurrency




                                                                                        5
PostgreSQL
●   Estabilidade
●   Replicação
●   Cluster (Alta Disponibilidade)
●   Multithreads
●   Segurança SSL e Criptografia
●   Licença BSD
●   Capacidade de Armazenamento

                                     6
Exemplo de Implementação:
            RelStorage
●   Debian Etch R4
●   PostgreSQL 8.1
●   Zope 2.10.5




                                7
Pacotes Base




# aptitude install build-essential 
  python2.4-dev python2.4-psycopg2 
  subversion




                                       8
Instalando e Ajustando o
           PostgreSQL
# aptitude install postgresql-8.1

Altere o seguintes atributos no PostgreSQL:

# vim /etc/postgresql/8.1/main/postgresql.conf
listen_address = '*'

# vim /etc/postgresql/8.1/main/pg_hba.conf

# Database administrative login by UNIX sockets
local   all         postgres                      ident sameuser

# TYPE   DATABASE   USER       CIDR-ADDRESS       METHOD


host        all             all               IP_DO_ZOPE/24        md5

# /etc/init.d/postgresql-8.1 restart

                                                                         9
Criando o Banco de Dados para
           o ZODB
# su – postgres
$ psql
postgres=# CREATE DATABASE zodb;
postgres=# CREATE USER zodb WITH PASSWORD 'admin' SUPERUSER;
postgres=# l
       Lista dos bancos de dados
    Nome     |   Dono    | Codificação
------------+----------+-------------
 zodb        | postgres | UTF8
 postgres    | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(4 registros)
postgres=# q


                                                               10
Instalando o Zope



#   wget http://www.zope.org/Products/Zope/2.10.5/Zope-2.10.5-final.tgz
#   tar xvfz Zope-2.10.5-final.tgz
#   cd Zope-2.10.5-final
#   ./configure --prefix=/opt/Zope-2.10.5 --with-python=/usr/bin/python2.4
#   make
#   make install




                                                                             11
Instalando e Configurando
          o RelStorage

#   svn co svn://svn.zope.org/repos/main/relstorage/trunk RelStorage
#   cd RelStorage
#   export PYTHONPATH=/opt/Zope-2.10.5/lib/python
#   python2.4 setup.py install --install-lib=$PYTHONPATH

Antes de você poder usar o RelStorage, o ZODB precisa ter o patch
de invalidação de checagem aplicado. Há duas versões do patch: uma
para ZODB 3.7.1 (que é parte do Zope 2.10.5) e outra para ZODB
3.8.0 (que é parte do Zope 2.11). O patch não tem efeito no ZODB
exceto quando se está usando o RelStorage.

# cd /opt/Zope-2.10.5/lib/python/ZODB
# cat /root/RelStorage/poll-invalidation-1-zodb-3-7-1.patch | patch -N -p0




                                                                             12
Criando uma instância do Zope e instalando
      o adaptador para o PostgresQL

# su - rogerio
$ /opt/Zope-2.10.5/bin/mkzopeinstance.py
Please choose a directory in which you'd like to install
Zope quot;instance homequot; files such as database files, configuration
files, etc.

Directory: site
Please choose a username and password for the initial user.
These will be the credentials you use to initially manage
your new Zope instance.

Username: admin
Password:
Verify password:

$ cd site/Products
$ svn co http://initd.org/svn/psycopg/psycopg2/trunk/ZPsycopgDA ZpsycopgDA

                                                                             13
Configurando o Relstorage no
  zope.conf para acessar o PostgreSQL
Substitua o seguinte bloco no zope.conf:

<zodb_db main>
    # Main FileStorage database
    <filestorage>
      path $INSTANCE/var/Data.fs
    </filestorage>
    mount-point /
</zodb_db>

Por:

%import relstorage
<zodb_db main>
    mount-point /
    <relstorage>
      <postgresql>
        dsn dbname='zodb' user='zodb' host='IP_DO_POSTGRESQL' password='admin'
      </postgresql>
   </relstorage>
</zodb_db>


Ative também no zope.conf o modo de debug:

debug-mode on


                                                                                 14
Iniciando a Instância do Zope
Adicione novamente um usuário admin para o Zope:

$ site/bin/zopectl adduser usuario_admin senha

NOTA: Quando for acessar a ZMI utilize o usuário e senha definido acima.

Agora é só iniciar a nossa instância (site) do Zope:

$ site/bin/runzope
2008-09-05 12:22:40 INFO ZServer HTTP server started at Fri Sep 5 12:22:40
2008
        Hostname: 0.0.0.0
        Port: 8080
2008-09-05 12:22:42 INFO psycopg2 installed. Logging using Python logging
module
/home/rogerio/site/Products/ZpsycopgDA/DA.py:45: DeprecationWarning: The
ImageFile module will be removed in Zope 2.11. Use App.ImageFile instead.
  from ImageFile import ImageFile
(...)
2008-09-05 12:22:47 INFO Zope Ready to handle requests

                                                                           15
Acessando a ZMI




                  16
Finalmente o RelStorage




                          17
Migrando uma Base
          Existente



Você pode converter uma instância de
FileStorage   para    RelStorage   e
reverter usando o utilitário chamado
ZODBConvert.



                                   18
Migrando de FileStorage
         para RelStorage
Definindo o arquivo de Migração:

# vim FileStorage2RelStorage

<filestorage source>
  path /home/rogerio/site/var/Data.fs
</filestorage>

<relstorage destination>
  <postgresql>
    dsn dbname='zodbconv' user='zodb' host='IP_DO_POSTGRESQL' password='admin'
  </postgresql>
</relstorage>

Executando o utilitário de migração:

# zodbconvert.py FileStorage2RelStorage --verbose

NOTA: Com a opção --clear os dados do banco de destino são apagados.

                                                                             19
Revertendo
Definindo o arquivo de Reversão:

# vim RelStorage2FileStorage

<filestorage destination>
  path /home/rogerio/site/var/Data.fs
</filestorage>

<relstorage source>
  <postgresql>
    dsn dbname='zodbconv' user='zodb' host='IP_DO_POSTGRESQL' password='admin'
  </postgresql>
</relstorage>

Instale o seguinte pacote:

# aptitude install python2.4-zodb

Crie um nova instância de Zope ou apague o conteúdo do diretório var da instância:

# rm -rf /home/rogerio/site/var/*

Executando o utilitário de migração:

# export PYTHONPATH=/opt/Zope-2.10.5/lib/python
# zodbconvert.py RelStorage2FileStorage –verbose

Altere as permissões dos arquivos criados pelo zodbconvert.py:

# chown rogerio.rogerio -R /home/rogerio/site/var/

                                                                                     20
Atributos Opcionais


poll-interval

Esta opção é proveitosa se você necessita reduzir o tráfego do banco de
dados. Se configurada, o RelStorage irá checar mudanças no banco de dados
com menos frequência.   Um ajuste de 1 a 5 segundos deverá ser suficiente
para a maioria dos sistemas. Fração de segundos são permitidos.

Enquanto este ajuste poderia não afetar a integridade do banco de dados, ele
aumenta a probabilidade de transações baseadas em dados antigos, levando a
conflitos.   Dessa forma um ajuste diferente de zero pode danificar a
perfomance de servidores com alto volume de escrita.

Para habilitar este atributo, adicione uma linha similar a quot;poll-interval 2quot;
dentro de uma secão <relstorage> do zope.conf.




                                                                          21
Atributos Opcionais (cont.)

pack-gc

Se pack-gc for falsa, operações de pack não efetuarão a coleta de lixo. A
coleta de lixo é habilitada por padrão.

Se o coletor de lixo estiver desabilitado, operações de pack manterão uma de
suas menores revisões de cada objeto. Com a coleta de lixo desabilitada, o
código de pack não necessita seguir referências de objetos, fazendo packing
de modo muito mais rápido.

No entanto, alguns dos benefícios podem     ser   perdidos   devido   a   sempre
aumentar o número de objetos não usados.

Desabilitando a coleta de lixo é também cortada a segurança que referências
inter-database nunca quebrem.

Para desabilitar a coleta de lixo, adicione a linha quot;pack-gc noquot; dentro de
uma seção <relstorage> do zope.conf.


                                                                              22
Mais Informações
●   http://wiki.zope.org/ZODB/RelStorage
●   http://wiki.zope.org/ZODB/ZODBConvert
●   http://rogerioferreira.objectis.net




                                            23
Palestrante

     Rogerio Ferreira, trabalha
     na   4Linux  como    Consultor
     responsável     por      Infra
     Estrutura e Projetos de Zope
     e Plone. Possui Certificação
     LPIC-1, LPIC-2 e LPIC-3. É
     autor de Projeto de Software
     Livre em Governo Estadual,
     participou  de    Projeto   de
     Zope/Plone     no      Governo
     Federal.




                                 24

Contenu connexe

Tendances

TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy UsersTDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Userstdc-globalcode
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNetEmergiNet
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010lucashungaro
 
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Thiago Barradas
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusDenis L Presciliano
 
Otimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend FrameworkOtimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend FrameworkElton Minetto
 

Tendances (20)

Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
dnad12
dnad12dnad12
dnad12
 
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy UsersTDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
How to use Elasticsearch Analyzers by EmergiNet
How to use  Elasticsearch Analyzers by EmergiNetHow to use  Elasticsearch Analyzers by EmergiNet
How to use Elasticsearch Analyzers by EmergiNet
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with ZabbixZabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
Zabbix Conference LatAm 2016 - Jessian Ferreira - Wireless with Zabbix
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Java 08
Java 08Java 08
Java 08
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta Cactus
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Otimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend FrameworkOtimizacao de aplicações Zend Framework
Otimizacao de aplicações Zend Framework
 

Similaire à ZEO/RelStorage/PostgreSQL

Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageRuda Filgueiras
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosAlexandre Almeida
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - AmbientesDirceu Belém
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Solisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlSolisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlLeonardo Medeiros Martins
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014MySQL Brasil
 

Similaire à ZEO/RelStorage/PostgreSQL (20)

Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorage
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Collectd
CollectdCollectd
Collectd
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Solisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlSolisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para Postgresql
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
 

Plus de gsroma

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609gsroma
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2gsroma
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistantgsroma
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações emgsroma
 
Computação Gráfica em Python
Computação Gráfica em PythonComputação Gráfica em Python
Computação Gráfica em Pythongsroma
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidadegsroma
 
Por que Python?
Por que Python?Por que Python?
Por que Python?gsroma
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Pythongsroma
 
Busca Visual
Busca VisualBusca Visual
Busca Visualgsroma
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Cargagsroma
 

Plus de gsroma (10)

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistant
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações em
 
Computação Gráfica em Python
Computação Gráfica em PythonComputação Gráfica em Python
Computação Gráfica em Python
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidade
 
Por que Python?
Por que Python?Por que Python?
Por que Python?
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
 
Busca Visual
Busca VisualBusca Visual
Busca Visual
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Carga
 

ZEO/RelStorage/PostgreSQL

  • 1. Para Sites com Alto Volume 1
  • 2. Bancos Suportados ● PostgreSQL 8.1 ou superior (via psycopg2) ● MySQL 5.0.x (via MySQLdb) ● Oracle 10g (via cx_Oracle) 2
  • 3. Características ● É um substituto para o FileStorage e ZEO. ● Há um caminho simples para converter FileStorage para RelStorage e reverter novamente. Você pode também converter uma instância de RelStorage para um diferente banco de dados relacional. ● Projetado para sites com grande volume: Múltiplas instâncias do ZODB podem compartilhar o mesmo banco de dados. Isto é similar para o ZEO, mas RelStorage não requer ZEO. 3
  • 4. Características (cont.) ● De acordo com alguns testes, RelStorage manipula alta concorrência melhor que a combinação de ZEO e FileStorage. ● Enquanto que o FileStorage toma mais tempo para iniciar à medida que o banco de dados cresce, devido a uma indexação de todos os objetos na memória, RelStorage inicia rapidamente sem levar em consideração o tamanho do banco de dados. ● Suporta undo e packing. ● Livre, open source (ZPL 2.1) 4
  • 5. Tempo por transação (objects_per_txn=10000) 2,7 2,6 2,5 2,4 2,3 2,2 2,1 2 1,9 1,8 1,7 1,6 1,5 1,4 ZEO + FileStorage - write Time 1,3 ZEO + FileStorage - read 1,2 PostgreSQLAdapter - write 1,1 PostgreSQLAdapter - read 1 MySQLAdapter - write 0,9 MySQLAdapter - read 0,8 OracleAdapter - write 0,7 OracleAdapter - read 0,6 0,5 0,4 0,3 0,2 0,1 0 1 3 5 7 9 11 13 15 Concurrency 5
  • 6. PostgreSQL ● Estabilidade ● Replicação ● Cluster (Alta Disponibilidade) ● Multithreads ● Segurança SSL e Criptografia ● Licença BSD ● Capacidade de Armazenamento 6
  • 7. Exemplo de Implementação: RelStorage ● Debian Etch R4 ● PostgreSQL 8.1 ● Zope 2.10.5 7
  • 8. Pacotes Base # aptitude install build-essential python2.4-dev python2.4-psycopg2 subversion 8
  • 9. Instalando e Ajustando o PostgreSQL # aptitude install postgresql-8.1 Altere o seguintes atributos no PostgreSQL: # vim /etc/postgresql/8.1/main/postgresql.conf listen_address = '*' # vim /etc/postgresql/8.1/main/pg_hba.conf # Database administrative login by UNIX sockets local all postgres ident sameuser # TYPE DATABASE USER CIDR-ADDRESS METHOD host all all IP_DO_ZOPE/24 md5 # /etc/init.d/postgresql-8.1 restart 9
  • 10. Criando o Banco de Dados para o ZODB # su – postgres $ psql postgres=# CREATE DATABASE zodb; postgres=# CREATE USER zodb WITH PASSWORD 'admin' SUPERUSER; postgres=# l Lista dos bancos de dados Nome | Dono | Codificação ------------+----------+------------- zodb | postgres | UTF8 postgres | postgres | UTF8 template0 | postgres | UTF8 template1 | postgres | UTF8 (4 registros) postgres=# q 10
  • 11. Instalando o Zope # wget http://www.zope.org/Products/Zope/2.10.5/Zope-2.10.5-final.tgz # tar xvfz Zope-2.10.5-final.tgz # cd Zope-2.10.5-final # ./configure --prefix=/opt/Zope-2.10.5 --with-python=/usr/bin/python2.4 # make # make install 11
  • 12. Instalando e Configurando o RelStorage # svn co svn://svn.zope.org/repos/main/relstorage/trunk RelStorage # cd RelStorage # export PYTHONPATH=/opt/Zope-2.10.5/lib/python # python2.4 setup.py install --install-lib=$PYTHONPATH Antes de você poder usar o RelStorage, o ZODB precisa ter o patch de invalidação de checagem aplicado. Há duas versões do patch: uma para ZODB 3.7.1 (que é parte do Zope 2.10.5) e outra para ZODB 3.8.0 (que é parte do Zope 2.11). O patch não tem efeito no ZODB exceto quando se está usando o RelStorage. # cd /opt/Zope-2.10.5/lib/python/ZODB # cat /root/RelStorage/poll-invalidation-1-zodb-3-7-1.patch | patch -N -p0 12
  • 13. Criando uma instância do Zope e instalando o adaptador para o PostgresQL # su - rogerio $ /opt/Zope-2.10.5/bin/mkzopeinstance.py Please choose a directory in which you'd like to install Zope quot;instance homequot; files such as database files, configuration files, etc. Directory: site Please choose a username and password for the initial user. These will be the credentials you use to initially manage your new Zope instance. Username: admin Password: Verify password: $ cd site/Products $ svn co http://initd.org/svn/psycopg/psycopg2/trunk/ZPsycopgDA ZpsycopgDA 13
  • 14. Configurando o Relstorage no zope.conf para acessar o PostgreSQL Substitua o seguinte bloco no zope.conf: <zodb_db main> # Main FileStorage database <filestorage> path $INSTANCE/var/Data.fs </filestorage> mount-point / </zodb_db> Por: %import relstorage <zodb_db main> mount-point / <relstorage> <postgresql> dsn dbname='zodb' user='zodb' host='IP_DO_POSTGRESQL' password='admin' </postgresql> </relstorage> </zodb_db> Ative também no zope.conf o modo de debug: debug-mode on 14
  • 15. Iniciando a Instância do Zope Adicione novamente um usuário admin para o Zope: $ site/bin/zopectl adduser usuario_admin senha NOTA: Quando for acessar a ZMI utilize o usuário e senha definido acima. Agora é só iniciar a nossa instância (site) do Zope: $ site/bin/runzope 2008-09-05 12:22:40 INFO ZServer HTTP server started at Fri Sep 5 12:22:40 2008 Hostname: 0.0.0.0 Port: 8080 2008-09-05 12:22:42 INFO psycopg2 installed. Logging using Python logging module /home/rogerio/site/Products/ZpsycopgDA/DA.py:45: DeprecationWarning: The ImageFile module will be removed in Zope 2.11. Use App.ImageFile instead. from ImageFile import ImageFile (...) 2008-09-05 12:22:47 INFO Zope Ready to handle requests 15
  • 18. Migrando uma Base Existente Você pode converter uma instância de FileStorage para RelStorage e reverter usando o utilitário chamado ZODBConvert. 18
  • 19. Migrando de FileStorage para RelStorage Definindo o arquivo de Migração: # vim FileStorage2RelStorage <filestorage source> path /home/rogerio/site/var/Data.fs </filestorage> <relstorage destination> <postgresql> dsn dbname='zodbconv' user='zodb' host='IP_DO_POSTGRESQL' password='admin' </postgresql> </relstorage> Executando o utilitário de migração: # zodbconvert.py FileStorage2RelStorage --verbose NOTA: Com a opção --clear os dados do banco de destino são apagados. 19
  • 20. Revertendo Definindo o arquivo de Reversão: # vim RelStorage2FileStorage <filestorage destination> path /home/rogerio/site/var/Data.fs </filestorage> <relstorage source> <postgresql> dsn dbname='zodbconv' user='zodb' host='IP_DO_POSTGRESQL' password='admin' </postgresql> </relstorage> Instale o seguinte pacote: # aptitude install python2.4-zodb Crie um nova instância de Zope ou apague o conteúdo do diretório var da instância: # rm -rf /home/rogerio/site/var/* Executando o utilitário de migração: # export PYTHONPATH=/opt/Zope-2.10.5/lib/python # zodbconvert.py RelStorage2FileStorage –verbose Altere as permissões dos arquivos criados pelo zodbconvert.py: # chown rogerio.rogerio -R /home/rogerio/site/var/ 20
  • 21. Atributos Opcionais poll-interval Esta opção é proveitosa se você necessita reduzir o tráfego do banco de dados. Se configurada, o RelStorage irá checar mudanças no banco de dados com menos frequência. Um ajuste de 1 a 5 segundos deverá ser suficiente para a maioria dos sistemas. Fração de segundos são permitidos. Enquanto este ajuste poderia não afetar a integridade do banco de dados, ele aumenta a probabilidade de transações baseadas em dados antigos, levando a conflitos. Dessa forma um ajuste diferente de zero pode danificar a perfomance de servidores com alto volume de escrita. Para habilitar este atributo, adicione uma linha similar a quot;poll-interval 2quot; dentro de uma secão <relstorage> do zope.conf. 21
  • 22. Atributos Opcionais (cont.) pack-gc Se pack-gc for falsa, operações de pack não efetuarão a coleta de lixo. A coleta de lixo é habilitada por padrão. Se o coletor de lixo estiver desabilitado, operações de pack manterão uma de suas menores revisões de cada objeto. Com a coleta de lixo desabilitada, o código de pack não necessita seguir referências de objetos, fazendo packing de modo muito mais rápido. No entanto, alguns dos benefícios podem ser perdidos devido a sempre aumentar o número de objetos não usados. Desabilitando a coleta de lixo é também cortada a segurança que referências inter-database nunca quebrem. Para desabilitar a coleta de lixo, adicione a linha quot;pack-gc noquot; dentro de uma seção <relstorage> do zope.conf. 22
  • 23. Mais Informações ● http://wiki.zope.org/ZODB/RelStorage ● http://wiki.zope.org/ZODB/ZODBConvert ● http://rogerioferreira.objectis.net 23
  • 24. Palestrante Rogerio Ferreira, trabalha na 4Linux como Consultor responsável por Infra Estrutura e Projetos de Zope e Plone. Possui Certificação LPIC-1, LPIC-2 e LPIC-3. É autor de Projeto de Software Livre em Governo Estadual, participou de Projeto de Zope/Plone no Governo Federal. 24