Instagram y PostgreSQL, una pareja perfecta

Estos días me topé con una información que me alegró, no me sorprendió ya que estoy seguro de que PostgreSQL es capaz de esto y mucho más; la noticia hablaba sobre como Instagram, que es una red social para compartir fotos y vídeos, mejoró el rendimiento de su motor de base datos que no es otro que PostgreSQL; si, como lo leen, Instagram tiene como herramientas principales de backend y almacenamiento de datos, al maravilloso elefante azul (personaje que representa a PostgreSQL).

Leer más: Qué significa el hashtag #TBT en Instagram y cuándo usarlo

La noticia comenta, que en sus inicios procesaron unos 90 likes por segundo y en la actualidad procesan cerca de 10.000 likes sin cambiar su manejador de base de datos; ¿cómo lograron esto?, con entonación del manejador de base de datos. La noticia resalta 5 pasos que realizaron para esto:

  1. Índices Parciales: Esto permite que se indexe la información por un estado de la misma, es decir solo se indexan los registros que coincida con un valor específico; por ejemplo, si tenemos una tabla que contenga un campo de verdadero o falso y nuestras consultas más comunes usan los registros que tengan ese campo en verdadero, podemos hacer un índice que solo contemple los registros que estén en verdadero. Esto permite que la mayoría de las consultas se respondan eficientemente y que el índice ocupe menos espacio.

  2. Índices Funcionales: Estos índices se basan en funciones que se le aplican a un campo de la tabla y que el resultado de la misma es el que se indexará; por ejemplo en el artículo hablan de un campo de 64 caracteres que es base64, para no indexar el campo completo indexan solo los primeros 8 caracteres, cuando se realice la consulta retornará todos los registros donde sus primeros 8 caracteres sean iguales a los indexados; luego en base a ese resultado se busca el registro que cumpla exactamente con los 64 caracteres.

  3. Uso de pg_reorg: Cuando se tiene una tabla muy grande se debe de realizar mantenimiento, los métodos más recomendables son el Vacuum y el Cluster, dichos métodos ejecutan bloqueos sobre la tabla, lo cual impediría realizar acciones tales como inserciones sobre las misma; el pg_reorg reorganiza la data como los otros procedimientos pero sin los bloqueos que se mencionaron.

  4. Usar WAL-E para los Wal: Esta es una herramienta de Heroku’s, la cual permite el almacenamiento de los Wal`s de PostgreSQL lo que contribuye sobre los respaldos, haciéndolos más sencillos, manejables y seguros.

  5. Uso de Autocommit con psycopg2: El psycopg2 es el módulo de conexión a PostgreSQL desde Python; si lectores Python, que es desde mi punto de vista uno de los mejores lenguajes para manipular grandes volúmenes de datos. El conector psycopg2 por omisión viene con Autocommit en falso con lo cual cada transacción que se genera debe estar encerrada entre un Begin y un Commit, al colocarlo en verdadero, especialmente para consulta de lectura, permite que esa consulta se genere en una sola transacción con lo cual se reduce el uso del CPU.

Esto demuestra lo poderoso que es PostgreSQL como manejador de base de datos, en especial en grande volúmenes de datos y transacción concurrente; si una red social tan grande como Instagram la usa, ¿qué limita que lo usemos nosotros en nuestras soluciones tecnológicas?.

Twitter: @lennincaro/@droidstarVE

DesdeLaPlaza.com/Lennin Caro Perez