Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Los sistemas de bases de datos distribuidas son parte integrante de la mayoría de las empresas y de la inmensa mayoría de las aplicaciones informáticas. Estas aplicaciones proporcionan lógica y una interfaz de usuario, mientras que los sistemas de bases de datos se encargan de la integridad, coherencia y redundancia de los datos.
En el año 2000, si tuvieras que elegir una base de datos, sólo tendrías unas pocas opciones, y la mayoría de ellas estarían dentro del ámbito de las bases de datos relacionales, por lo que las diferencias entre ellas serían relativamente pequeñas. Por supuesto, esto no significa que todas las bases de datos fueran completamente iguales, pero su funcionalidad y casos de uso eran muy similares.
Algunos de estas bases de datos se han centrado en el escalado horizontal (scaling out): mejorar el rendimiento y aumentar la capacidad ejecutando varias instancias de la base de datos que actúan como una sola unidad lógica: Gamma Database Machine Project, Teradata, Greenplum, Parallel DB2, y muchas otras. Hoy en día, el escalado horizontal sigue siendo una de las propiedades más importantes que los clientes esperan de las bases de datos. Esto puede explicarse por la creciente popularidad de los servicios basados en la nube. A menudo es más fácil hacer girar una nueva instancia y añadirla al clúster que escalar verticalmente (escalar hacia arriba) trasladando la base de datos a una máquina más grande y potente. Las migraciones pueden ser largas y penosas, con el consiguiente tiempo de inactividad.
Alrededor de 2010, empezó a aparecer una nueva clase de bases de datos eventualmente consistentes, y términos como NoSQL, y más tarde, big data crecieron en popularidad. En los últimos 15 años, la comunidad de código abierto, las grandes empresas de Internet y los proveedores de bases de datos han creado tantas bases de datos y herramientas que es fácil perderse intentando comprender los casos de uso, los detalles y las particularidades.
El artículo sobre Dynamo [DECANDIA07], publicado por el equipo de Amazon en 2007, tuvo tanta repercusión en la comunidad de bases de datos que, en poco tiempo, inspiró muchas variantes e implementaciones. Las más destacadas fueron Apache Cassandra, creada en Facebook; Project Voldemort, creada en LinkedIn; y Riak, creada por antiguos ingenieros de Akamai.
Hoy en día, el campo está cambiando de nuevo: tras la época de los almacenes de valores clave, NoSQL y la consistencia eventual, hemos empezado a ver bases de datos más escalables y con mayor rendimiento, capaces de ejecutar consultas complejas con mayores garantías de consistencia.
Público de este libro
En las conversaciones que mantengo en las conferencias técnicas, escucho a menudo la misma pregunta: "¿Cómo puedo aprender más sobre el funcionamiento interno de las bases de datos? Ni siquiera sé por dónde empezar". La mayoría de los libros sobre sistemas de bases de datos no entran en detalles sobre la implementación del motor de almacenamiento, y cubren los métodos de acceso, como los Árboles B, a un nivel bastante alto. Hay muy pocos libros que traten conceptos más recientes, como las distintas variantes de Árbol B y el almacenamiento estructurado en logs, por lo que suelo recomendar la lectura de artículos.
Todo el que lee artículos sabe que no es tan fácil: a menudo te falta contexto, la redacción puede ser ambigua, hay poca o ninguna conexión entre los artículos, y son difíciles de encontrar. Este libro contiene resúmenes concisos de conceptos importantes de los sistemas de bases de datos y puede servir de guía para quienes deseen profundizar, o como hoja de trucos para quienes ya estén familiarizados con estos conceptos.
No todo el mundo quiere convertirse en desarrollador de bases de datos, pero este libro ayudará a las personas que crean software que utiliza sistemas de bases de datos: desarrolladores de software, ingenieros de fiabilidad, arquitectos y directores de ingeniería.
Si tu empresa depende de cualquier componente de infraestructura, ya sea una base de datos, una cola de mensajería, una plataforma de contenedores o un programador de tareas, tienes que leer los registros de cambios del proyecto y las listas de correo para mantenerte en contacto con la comunidad y estar al día de los últimos acontecimientos del proyecto. Comprender la terminología y saber lo que hay dentro te permitirá obtener más información de estas fuentes y utilizar tus herramientas de forma más productiva para solucionar problemas, identificar y evitar posibles riesgos y cuellos de botella. Tener una visión de conjunto y una comprensión general de cómo funcionan los sistemas de bases de datos te ayudará en caso de que algo vaya mal. Utilizando estos conocimientos, podrás formar una hipótesis, validarla, encontrar la causa raíz y presentarla a otros mantenedores del proyecto.
Este libro también es para mentes curiosas: para la gente a la que le gusta aprender cosas sin necesidad inmediata, los que pasan su tiempo libre hackeando algo divertido, creando compiladores, escribiendo sistemas operativos caseros, editores de texto, juegos de ordenador, aprendiendo lenguajes de programación y absorbiendo nueva información.
Se supone que el lector de tiene cierta experiencia en el desarrollo de sistemas backend y en el trabajo con sistemas de bases de datos como usuario. Tener algún conocimiento previo de las diferentes estructuras de datos ayudará a digerir el material más rápidamente.
¿Por qué debería leer este libro?
A menudo oímos a la gente describir los sistemas de bases de datos en términos de los conceptos y algoritmos que implementan: "Esta base de datos utiliza el cotilleo para la propagación de miembros" (véase el Capítulo 12), "Han implementado Dynamo" o "Esto es igual que lo que han descrito en el documento Spanner" (véase el Capítulo 13). O, si hablas de algoritmos y estructuras de datos, puedes oír algo como "ZAB y Raft tienen mucho en común" (véase el Capítulo 14), "Los Árboles Bw son como los Árboles B implementados sobre almacenamiento estructurado de registros" (véase el Capítulo 6), o "Utilizan punteros hermanos como enlos Árboles Blink" (véase el Capítulo 5).
Necesitamos abstracciones para discutir conceptos complejos, y no podemos mantener una discusión sobre terminología cada vez que iniciamos una conversación. Disponer de atajos en forma de lenguaje común nos ayuda a trasladar nuestra atención a otros problemas de más alto nivel.
Una de las ventajas de aprender los conceptos, pruebas y algoritmos fundamentales es que nunca envejecen. Por supuesto, siempre habrá nuevos, pero a menudo se crean nuevos algoritmos tras encontrar un fallo o margen de mejora en uno clásico. Conocer la historia ayuda a comprender mejor las diferencias y las motivaciones.
Aprender sobre estas cosas es inspirador. Ves la variedad de algoritmos, ves cómo nuestra industria resolvía un problema tras otro, y llegas a apreciar ese trabajo. Al mismo tiempo, aprender es gratificante: casi puedes sentir cómo las múltiples piezas de un puzzle se mueven juntas en tu mente para formar una imagen completa que siempre podrás compartir con los demás.
Alcance de este libro
Este no es un libro sobre sistemas de gestión de bases de datos relacionales ni sobre los NoSQL, sino sobre los algoritmos y conceptos utilizados en todo tipo de sistemas de bases de datos, con especial atención al motor de almacenamiento y a los componentes responsables de la distribución.
Algunos conceptos, como la planificación de consultas, la optimización de consultas, la programación, el modelo relacional y algunos otros, ya se tratan en varios grandes libros de texto sobre sistemas de bases de datos. Algunos de estos conceptos suelen describirse desde la perspectiva del usuario, pero este libro se centra en los aspectos internos. Puedes encontrar algunas referencias a bibliografía útil en la Conclusión de la Parte II y en los resúmenes de los capítulos. Es probable que en estos libros encuentres respuestas a muchas preguntas que puedas tener relacionadas con las bases de datos.
No se tratan los lenguajes de consulta, ya que no existe un único lenguaje común entre los sistemas de bases de datos mencionados en este libro.
Para recopilar material para este libro, estudié más de 15 libros, más de 300 artículos, innumerables entradas de blog, código fuente y la documentación de varias bases de datos de código abierto. La regla general para decidir si incluir o no un concepto concreto en el libro fue la pregunta "¿La gente del sector de las bases de datos y de los círculos de investigación habla de este concepto?". Si la respuesta era "sí", añadía el concepto a la larga lista de cosas a tratar.
Estructura de este libro
Hay algunos ejemplos de bases de datos extensibles con componentes enchufables (como [SCHWARZ86]), pero son más bien escasos. Al mismo tiempo, hay muchos ejemplos en los que las bases de datos utilizan almacenamiento conectable. Del mismo modo, rara vez oímos a los vendedores de bases de datos hablar de la ejecución de consultas, mientras que están muy deseosos de hablar de las formas en que sus bases de datos preservan la coherencia.
Las distinciones más significativas entre los sistemas de bases de datos se concentran en torno a dos aspectos: cómo almacenan y cómo distribuyen los datos. (En ocasiones, otros subsistemas también pueden ser importantes, pero no se tratan aquí). El libro está organizado en partes que tratan de los subsistemas y componentes responsables del almacenamiento (Parte I) y de la distribución (Parte II).
La Parte I trata de los procesos nodo-locales y se centra en el motor de almacenamiento, el componente central del sistema de base de datos y uno de los factores distintivos más significativos. En primer lugar, comenzamos con la arquitectura de un sistema de gestión de bases de datos y presentamos varias formas de clasificar los sistemas de bases de datos en función del medio de almacenamiento primario y la disposición.
Continuamos con las estructuras de almacenamiento e intentamos comprender en qué se diferencian las estructuras basadas en disco de las basadas en memoria, presentamos los Árboles B y cubrimos los algoritmos para mantener eficientemente las estructuras de Árboles B en disco, incluyendo la serialización, la disposición de páginas y las representaciones en disco. Más adelante, tratamos múltiples variantes para ilustrar la potencia de este concepto y la diversidad de estructuras de datos influidas e inspiradas por los Árboles B.
Por último, tratamos diversas variantes de almacenamiento estructurado en logs, utilizadas habitualmente para implementar sistemas de archivos y almacenamiento, la motivación y las razones para utilizarlas.
La Parte II trata de cómo organizar varios nodos en un clúster de bases de datos. Comenzamos con la importancia de comprender los conceptos teóricos para construir sistemas distribuidos tolerantes a fallos, en qué se diferencian los sistemas distribuidos de las aplicaciones de un solo nodo, y a qué problemas, limitaciones y complicaciones nos enfrentamos en un entorno distribuido.
Después, nos sumergimos de lleno en los algoritmos distribuidos. Aquí, empezamos con los algoritmos para la detección de fallos, que ayudan a mejorar el rendimiento y la estabilidad al notar e informar de los fallos y evitar los nodos fallidos. Como muchos de los algoritmos que se tratan más adelante en el libro dependen de la comprensión del concepto de liderazgo, presentamos varios algoritmos para la elección del líder y discutimos su idoneidad.
Como una de las cosas más difíciles en los sistemas distribuidos es conseguir la coherencia de los datos, discutimos los conceptos de replicación, seguidos de los modelos de coherencia, la posible divergencia entre réplicas y la coherencia eventual. Como los sistemas consistentes eventuales a veces dependen de la antientropía para la convergencia y del cotilleo para la difusión de datos, discutimos varios enfoques de antientropía y cotilleo. Por último, hablamos de la consistencia lógica en el contexto de las transacciones de bases de datos, y terminamos con los algoritmos de consenso.
Habría sido imposible escribir este libro sin todas las investigaciones y publicaciones. Encontrarás muchas referencias a trabajos y publicaciones en el texto, entre corchetes con fuente monoespaciada; por ejemplo, [DECANDIA07]. Puedes utilizar estas referencias para conocer con más detalle conceptos relacionados.
Después de cada capítulo, encontrarás una sección de resumen que contiene material para seguir estudiando, relacionado con el contenido del capítulo.
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Consejo
Este elemento significa un consejo o sugerencia.
Nota
Este elemento significa una nota general.
Advertencia
Este elemento indica una advertencia o precaución.
Utilizar ejemplos de código
Este libro de está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.
Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Database Internals por Alex Petrov (O'Reilly). Copyright 2019 Oleksandr Petrov, 978-1-492-04034-7".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante casi 40 años, O'Reilly Media ha proporcionado formación, conocimientos y perspectivas sobre tecnología y negocios para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.
Cómo contactar con nosotros
Por favor, dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/database-internals.
Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a bookquestions@oreilly.com.
Para obtener noticias y más información sobre nuestros libros y cursos, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Este libro no habría sido posible sin los cientos de personas que han trabajado duro en trabajos de investigación y libros, que han sido fuente de ideas, inspiración y han servido de referencia para este libro.
Me gustaría dar las gracias a todas las personas que revisaron manuscritos y aportaron comentarios, asegurándose de que el material de este libro es correcto y la redacción precisa: Dmitry Alimov, Peter Alvaro, Carlos Baquero, Jason Brown, Blake Eggleston, Marcus Eriksson, Francisco Fernández Castaño, Heidi Howard, Vaidehi Joshi, Maximilian Karasz, Stas Kelvich, Michael Klishin, Predrag Knežević, Joel Knighton, Eugene Lazin, Nate McCall, Christopher Meiklejohn, Tyler Neely, Maxim Neverov, Marina Petrova, Stefan Podkowinski, Edward Ribeiro, Denis Rystsov, Kir Shatrov, Alex Sorokoumov, Massimiliano Tomassi y Ariel Weisberg.
Por supuesto, este libro no habría sido posible sin el apoyo de mi familia: mi mujer Marina y mi hija Alexandra, que me han apoyado en cada paso del camino.
Get Internos de la base de datos now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.