[Rio-pm] Consultas em array de objetos

Gilberto Jolti gilbertojolti em gmail.com
Quarta Junho 3 11:20:49 PDT 2009


Aaarrrgghh! RRRooowwwwoooaaRRRggh! AaaaarrRRrRrgggg!!!! AAAaaaaaaaaRRRRRR!!!

Ok então,

Bom, o que tenho é o seguinte:

a) Uma base de dados texto, campos separados por vígula
b) Uma base LDAP

Preciso manter a base LDAP "sincronizada" com a base texto (a base texto é a
origem de dados).

Não há nada que eu possa fazer para que essa base deixe de ser texto.

Portanto, peguei a base texto e trato com DBD::CSV.

A LDAP eu trato com Net::LDAP.

Só que as duas bases possuem campos distintos (em quantidade e nomes),
afinal, não vou repetir no LDAP as mesmas porcarias que existem na base
texto. Fora que não preciso de todos os campos CSV no LDAP.

Para simplificar meu trabalho eu pego a base texto e gero um array de
objetos do tipo Livro.

E faço a mesma coisa, gero um array de objetos do tipo Livro, para a base
LDAP.

Dessa forma eu passo a ter minimamente duas bases semelhantes (mesmos nomes
de campo, quantidade, etc), ou seja, dois arrays contendo as duas bases.

E aí vem o trabalho que é usar isso. Preciso, por exemplo, "varrer" o array
de livros vindo do CSV e conferir no LDAP se o livro está lá, se está
faltando dado, se é para remover, se preciso mudá-lo de grupo, etc.

Ou seja, várias operações, nada rigorosamente específico neste momento.

Para ter uma idéia, o campo indexador só existe no CSV.

Meu trabalho agora, imediatamente, é adicionar esse campo indexador no LDAP.
Já fiz um novo schema para minha base LDAP, etc.

Só falta ler o CSV, encontrar o respectivo Livro (pelo título) na LDAP e
fazer as alterações.

Tudo muito simples.

Mas parece óbvio que vou ter que, num futuro nada distante, fazer várias
operações entre essas bases. Para dar um exemplo, Livros possuem autores,
que vêm de outro arquivo CSV e portanto precisam ser relacionados. Não vejo
problema em criar um atributo objeto 'autores' no meu Livro...

Bom, eu apenas gostaria de saber se existe algum módulo que pudesse ser
"plugado" nesses arrays de objeto que me permitisse fazer buscas, etc. Caso
contrário eu estaria caindo no abismo de refazer um sistema relacional.

Se eu soubesse que não há nada do gênero, me passa pela cabeça ter toda uma
base LDAP temporária onde eu jogaria os dados da base texto e poderia
manipulá-la usando o Net::LDAP mesmo... mas isso de criar base temporária
parece meio nojentão, eu queria resolver tudo na memória mesmo, antes de
escrever qualquer coisa.

Sim, eu também posso jogar tudo num Postgre e acabar com essa história.

Mas eu já estou lidando com bases não relacionais. Se eu pudesse evitar a
presença do banco de dados relacional seria mais interessante, eu resolveria
tudo entre objetos e as bases originais.

Ah, como operações de escrita só precisam ser feitas na base LDAP e o
Net::LDAP me fornece toda um interface que simplifica isso, o que fazer com
os objetos depois de usados não me preocupa tanto.

A propósito, não estou ganhando dinheiro freela nenhum com isso, ok? É
metade estudo, metade obrigação do meu emprego mesmo.

Foi mal o tamanho do email.

<http://search.cpan.org/%7Ejhi/String-Approx-3.26/Approx.pm>[]'s
Gilberto
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20090603/8e2f13ba/attachment.html>


Mais detalhes sobre a lista de discussão Rio-pm