maior o arquivo de indice do FileStorage e, em alguns casos de grandes bases de dados, a inicializacao pode ser bem demorada, principalmente se for necessario recriar esse indice.Surge o RelStorageFoi com objetivo de atacar essas deficiencias e seguindo a ideia do BerkeleyStorage, que foi desenvolvido RelStorage (inicialmente chamado de PGStorage) o qual suporta o aramazenamento dos objetos opacos do ZODB (no formato de byte-code python), em bases de dados relacionais.Isso significa que esses objetos nao podem ser consultados diretamente atraves do banco de dados relacional (ex: realizando consultas para reltorios), mas apenas pelo ZODB (aplicacoes Python), o qual ao ser configurado com RelStorage, sabe como recuperar e gravar os objetos, de forma transparente, que estao persistidos em um backend relacional e que substitui o ZEO + FileStorage na tarefa de compartilhar o ZODB por diversas instancias da mesma aplicacao ou diversas aplicacoes.Atualmente existem "adapters" no RelStorage para armazenar bases de dados ZODB em tres diferentes backends relacionais: MySQL, PostgreSQL e Oracle. Novas servidores de banco de dados podem ser integrados atrves da implementacao de um novo adapter.Segue um exemplo simples para configuracao de um banco de dados ZODB com RelStorage e usando o PostgreSQLAdapter, lembrando que e preciso primeiro criar o banco de dados no PostgreSQL e o RelStorage inicializa as tabelas no primeiro acesso:import transactionfrom ZODB.DB import DBfrom relstorage.relstorage import RelStoragefrom relstorage.adapters.postgresql import PostgreSQLAdapter# alterar a configuracao de acordo com o banco de dados no PostgreSQLdsn = "dbname='ruda' user='ruda' host='localhost' password='12345'"adapter = PostgreSQLAdapter(dsn)storage = RelStorage(adapter)db = DB(storage)conn = db.open()root = conn.root()# vamos armazenar uma lista e um dicionario no objeto raizroot['lista'] = ['a', 'b', 1.0, 3]root['dicionario'] = {'a':1, 'b':4}transaction.commit()Desempenho e Alta DisponibilidadeOs testes realizados por Shane Hataway (criados do RelStorage) indicam que o RelStorage possui um desempenho superiror ao ZEO tanto na leitura quanto na gravacao, e que esse ganho aumenta quanto maior concorrencia de acesso ao ZODB. E importante notar que e possivel fazer um tunning no ZEO que melhora seu desempenho, porem o problema de escalabilidade decorrente do GIL, tente a tornar o ZEO mais lento em ambientes de alta concorrecia, como por exemplo sites Zope/Plone que possuem muitas instancias Zope.Alem disso, devido ao uso de bases de dados relacionais, as bases de dados ZODB armazenadas com RelStorage podem ser replicadas usando as ferramentas disponiveis em cada SGDB. Por esse motivo, o RelStorage passa a ser uma alternativa interessante para criacao de ambientes de alta disponibilidade que usam o ZODB, novamente, grandes portais Zope/Plone sao um publico em potecial.Estabilidade, Migracao e IntegracaoO RelStorage pode ser considerado estavel e ja esta sendo usado em producao por diversos sites, incluindo um grande portal Zope/Plone que usa RelStorage com Oracle e foi um dos patrocinadores da implementacao desse novo Storage para ZODB.Alem disso, RelStorage possui uma excelente cobertura de testes e inclui em sua distribuicao uma ferramenta (zodbconvert.py) para migracao de bases de dado do formato FileStorage para RelStorage (MySQLAtapter, PostgresSQLAdapter e OracleAdapter) e vice-versa.As opcoes do arquivo de configuracao para migracao usando zodbconvert.py sao semlhantes as opcoes usadas na configuracao de cada adapter do RelStorage (cada um possui opcoes distintas).