A saga da busca em bancos de dados

Num mundo perfeito, todos os sistemas de armazenamento se conversariam, a nível do servidor e não do cliente, e jamais precisaríamos manualmente definir por “joins”, ou seja lá qual a forma que seu banco de dados faz.

Claro, o mundo não é perfeito.

Nesse caso, precisamos no mínimo padronizar uma forma de buscar dados. A maioria dos sistemas relacionais entende SQL, embora isso também não seja padronizado. Pior ainda, se for necessário buscar uma informação que está em uma tabela da base de dados X, e uní-la (join) com uma da base de dados Y, temos que fazer a busca manualmente.

Entra, aí, uma idéia.

Como é impossível fazer com que todos os serviços de bancos de dados se padronizem e “magicamente” começem a conversar um com o outro, temos que fazer isso no lado do cliente. Mas, se vamos fazer do lado do cliente, vamos substituir “banco de dados” por “armazenamento” – ou seja, permitir comunicação entre um banco de dados e, digamos, um arquivo texto – ou entre um banco relacional e um banco não-relacional, até mesmo entre um banco de dados e um serviço web (RESTful, principalmente).

A idéia é mais ou menos a seguinte: montar uma API, que funcione usando Duck-Typing e determinando qual a maneira que queremos buscar um registro, seja ele REST, MongoDB, CouchDB, ActiveRecord ou o que for. Também, determinar que as buscas são lazy, e que associações (has_many, etc) podem ser utilizadas entre sistemas de banco de dados (por exemplo, um registro no ActiveRecord “has_many” documentos no MongoDB, etc). Claro que isso inicia mais alguns problemas, principalmente a idéia de que o ActiveRecord possui “joins”, que devem ser mantidos caso uma classe ActiveRecord se relacione com outra, mas as vantagens são muito maiores – poder relacionar dados entre bases de dados, manter uma API única para todos os modelos de armazenamento, poder mudar de CouchDB para MongoDB para ActiveRecord para REST sem mexer em nada do código, etc…

Os primeiros rascunhos da API estão sendo preparados, mas uma boa parte funcionará exatamente da mesma forma como hoje funciona o MongoParadigm. Novidades em breve!

Advertisements
This entry was posted in Divagações, Ruby and tagged , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s