¿Por qué funcionan las bases de datos relacionales, dada la complejidad exponencial teórica de la búsqueda de respuestas (en el tamaño de la consulta)?


19

Parece que se sabe que para encontrar una respuesta a una consulta sobre una base de datos relacional , se necesita tiempo , y no se puede eliminar el exponente.QD|D||Q||Q|

Como puede ser muy grande, nos preguntamos por qué las bases de datos funcionan en la práctica.D

¿Es solo una cuestión de que las consultas habituales no sean tan grandes en las aplicaciones del mundo real? (Entonces es interesante saber cuál es el tamaño habitual de las consultas planteadas a los sistemas de bases de datos relacionales y cuál es el tamaño "máximo" de las consultas que se espera que un sistema de base de datos responda efectivamente en la práctica ).

Notas sobre el exponenteno 'extraíble'|Q|

Para mostrar que el exponenteno es extraíble, se puede usar una consulta preguntando si existe una camarilla de tamaño en el gráfico proporcionado por la base de datos. Verificar si un gráfico tiene una -clique es un problema NP-completo. Además, no es manejable con parámetros fijos, con el parámetro . Los detalles se pueden encontrar en, por ejemplo, Libkin, L .: Elementos de la teoría de modelos finitos. Springer (2004) o Papadimitriou, CH, Yannakakis, M .: Sobre la complejidad de las consultas de bases de datos. J. Comput. Syst. Sci. 58 (3), 407–427 (1999)|Q|nnn



77
Las consultas ordinarias (como SELECT * FROM users WHERE username="abc" AND passwrod="xyz") son búsquedas simples, que toman O (| D |) para ejecutarse. Si hay un índice en los campos relevantes de la base de datos, tomará O (log | D |). No me interesan las bases de datos, pero no creo que las consultas más complicadas puedan llevar un tiempo exponencial.
MS Dousti

77
@imz: en su ejemplo, la complejidad es , que sigue siendo polinómica. Parece que, si hay k combinaciones en la consulta, la complejidad es . Este es un polinomio para k fijo, pero creo que para k grande, ejecutar la consulta será muy lento en la práctica. Por lo tanto, uno debe evitar demasiadas uniones a toda costa. O(|D|2)O(|D|k+1)
MS Dousti

77
La complejidad del tiempo es exponencial en la duración de una consulta en el peor de los casos . Esto no contradice que algunas consultas largas son rápidas. Los profesionales de bases de datos saben qué consultas se ejecutan rápidamente en los motores de bases de datos típicos, y de todos modos no confían en el límite del peor de los casos en términos de la duración de la consulta.
Tsuyoshi Ito

2
@Kaveh: "El libro de Complejidad descriptiva de Immerman tuvo una pequeña discusión en el último capítulo": Muy buena sugerencia. Nitpicking: se discute en el penúltimo capítulo. @imz: También puede encontrar útil el poder expresivo en papel de SQL .
MS Dousti

55
@imz: "¿Este gráfico tiene una n-camarilla" no es una consulta tan común en la práctica. La mayoría de las consultas son más parecidas a las que sugiere @Sadeq y tienen una estructura muy parecida a un árbol. Además, para bases de datos realmente grandes, incluso una consulta completamente lineal es demasiado costosa, y uno tiene que trabajar con un bosquejo de la base de datos.
András Salamon

Respuestas:


16

Hay grandes clases de consultas que son "fáciles", incluso en el peor de los casos. En particular, si la clase de consultas contiene solo consultas conjuntas y cada consulta tiene un ancho acotado (por ejemplo, ancho de árbol, ancho de árbol de su gráfico de incidencia, ancho de hipertree fraccional o ancho submodular), entonces la consulta se puede responder usando algo como un árbol de unión , junto con la enumeración de fuerza bruta para las partes locales de la consulta que se desvían del árbol. Esto requiere tiempo polinomial, con el grado del polinomio determinado por el parámetro ancho.

Parece que muchas consultas encontradas en la práctica son conjuntivas y tienen un ancho pequeño. Por lo tanto, el tiempo de ejecución polinomial tiene un bajo grado en este caso.

Dániel Marx presentó un documento en STOC 2010 sobre el ancho submodular recientemente, cuya versión completa incluye un buen resumen de las diversas nociones de ancho y cómo la formulación de CSP se relaciona con el formalismo de la base de datos (la versión de la conferencia carece de esto).

  • Dániel Marx Propiedades de hipergrafía manejable para satisfacción de restricciones y consultas conjuntas , 2010. arxiv: 0911.0801

Esta no es una respuesta completa, ya que no se ocupa de la complejidad "típica" de las consultas de la base de datos, pero incluso con el análisis del peor de los casos hay consultas fáciles.


6

Se pueden usar las consultas Q_n para verificar si un gráfico, representado como una base de datos, contiene una camarilla con n elementos. Verificar si un gráfico tiene una camarilla es un problema de NP completo. Además, no es manejable con parámetros fijos, con el parámetro n (que significa D ^ n).


Publique explicaciones adicionales sobre los antecedentes de la pregunta como "comentario" (no como "respuesta"), con el botón "Agregar comentario" debajo de la pregunta, o como sugerencia de edición, con el enlace "editar" a continuación la pregunta. Las "respuestas" no son para discusiones y adiciones a la pregunta. (Participar aquí debería ser más conveniente si te registras como un usuario no anónimo; entonces es más fácil rastrear quién dijo qué en las discusiones).
imz - Ivan Zakharyaschev

@imz: Lo puso como respuesta porque no tiene el privilegio de comentar. Uno necesita tener al menos 50 repeticiones. para poder comentar en todas partes.
Tomek Tarczynski

@Tomek, @imz, bueno, se está discutiendo en el meta en este momento si debemos permitir comentarios usando respuestas o no.
Kaveh

5

Otra forma de responder a esta pregunta es "¡no lo hacen!"

Si le da a una implementación típica de DBMS una consulta que contiene una gran cantidad de combinaciones, ni siquiera pasará la fase de planificación / optimización (y mucho menos la evaluación), incluso si la consulta es acíclica o tiene una estructura muy simple como András alude a lo anterior.

Pero, para las cargas de trabajo DBMS "típicas", tales consultas parecen no surgir.


1
Para consultas complejas, el resultado de la fase de optimización es un plan elegido al azar. Esto no es tan malo como parece, porque la ruta de ejecución aún podría ser "lo suficientemente buena", y hay muchas más razones por las cuales la optimización es difícil más allá de la combinación del número de uniones.
Tegiri Nenashi

4

Aquí hay una versión más preocupada por la realidad de la respuesta de tigreen desde el punto de vista de una persona que realmente hace un uso intensivo de las bases de datos (relacionales): todo el punto y la complejidad de su aplicación es estructurarlos de una manera que requerirían la menor cantidad de se une a todas y cada una de las consultas necesarias y es por eso que realmente funcionan . En otras palabras, no espere que las bases de datos resuelvan problemas complejos por su cuenta; no lo harían, pero si se usan con prudencia son un instrumento realmente útil y aplicable.


0

Las uniones solo son cuadráticas sobre las relaciones de muchos a muchos. Estos son relativamente raros: en la práctica, la mayoría de las relaciones y uniones son de 1 a muchos, por lo que tomarán un tiempo lineal si se definen índices / claves. Las consultas con varias uniones de muchos a muchos son un problema grave.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.