Leo en digitta.com la traducción de una entrada del blog de Bret Taylor de FriendFeed. En ella se explica cómo han implementado un sistema de almacenamiento sin esquemas en una base de datos MySQL. La cuestión consiste en tener en una tabla un campo id, en su caso un UUID de 16 bytes, y un campo MediumBlob en el que se almacenen los datos sin esquema, formateados como objetos JSON o diccionarios de Pyhton:
{“Cod”:33423,“Nombre”:”Juan”,”Profesion”:”conductor”,”Nacionalidad”:”española”}
Si se desea indexar por estos campos-propiedades, se usará una tabla por cada campo por el cual se vaya a indexar. De esta forma, si se desea añadir o eliminar índices, basta con crear o eliminar la tabla correspondiente.
No voy a profundizar demasiado. Se pueden ver más detalles acerca de la implementación en el propio post. Lo que me llamó la atención, aparte de la sencillez del sistema tanto para implementarlo como para mantenerlo, fue la razón que les llevó a implementarlo: Hay muchos proyectos diseñados para abordar el problema (alto crecimiento y constantes cambios en el esquema) almacenando los datos con esquemas flexibles y construir nuevos índices al vuelo (por ejemplo. CouchDB). En cualquier caso, ninguno de ellos parece lo suficientemente utilizado por sitios grandes como para inspirar confianza.
Bien, intentaré hacer mi propia implementación de un sistema similar y si puedo, publicaré los resultados al respecto.