¿Por qué SQLite compila consultas en bytecode para ejecutarlas en una máquina virtual en lugar de usar operadores componibles como escaneo, unión, agregado, etc., que probablemente sea más común en las implementaciones de otras bases de datos?

Según el propio D. Richard Hipp:

El uso de una máquina virtual en SQLite ha sido un gran beneficio para el desarrollo de la biblioteca. La máquina virtual proporciona una unión nítida y bien definida entre el front-end de SQLite (la parte que analiza las declaraciones SQL y genera el código de la máquina virtual) y el back-end (la parte que ejecuta el código de la máquina virtual y calcula un resultado. ) La máquina virtual permite a los desarrolladores ver claramente y en una forma fácil de leer lo que SQLite está tratando de hacer con cada declaración que compila, lo cual es una gran ayuda en la depuración. Dependiendo de cómo se compila, SQLite también tiene la capacidad de rastrear la ejecución de la máquina virtual, imprimiendo cada instrucción de máquina virtual y su resultado a medida que se ejecuta.

(Fuente: características distintivas de SQLite)

A mi modo de ver, elimina una capa innecesaria de abstracción para una implementación más fácil. Después de todo, el escaneo / unión / agregado, etc. debe descomponerse en algún momento en acciones individuales al nivel del lenguaje VM de SQLite de todos modos.

Solo puedo pensar en una ventaja de permanecer en el nivel del “árbol de consultas”: probablemente sea más fácil para los usuarios de DB entender la salida EXPLAIN esa manera.

More Interesting

¿Qué tipos de errores son más comunes para los PLC? ¿Cómo se encuentran y eliminan sistemáticamente?

¿Cómo se ve el nuevo plan de estudios CS introductorio en CMU?

¿Cuál es la mejor plataforma que es segura, escalable e integrable para construir bots de chat?

¿Por qué los megabytes no son exactamente 1 millón de bytes?

¿Cuáles son las diferencias y similitudes entre varios términos como archivo de objeto, ejecutable, enlace dinámico, carga dinámica, tiempo de ejecución, tiempo de carga y tiempo de compilación?

¿En qué tipo de cosas trabajan los estudiantes de Machine Learning en Berkeley?

¿Aprendiste patrones de diseño, control de versiones, desarrollo de tecnología web, marcos ORM y marcos MVC en tu curso CS?

¿Qué tipo de inteligencia artificial te dejará sin trabajo?

¿Cuál de tus actividades extracurriculares crees que te metió en el MIT para la informática?

¿Son útiles las técnicas de aprendizaje automático en el descifrado? Si es así, ¿cómo y qué técnicas?

¿Quiénes son los analistas de datos en lenguaje sencillo? ¿Qué hacen básicamente?

¿Qué debería aprender ahora que me ayudará a crecer mejor, AngularJS, cloud computing, big data o inteligencia artificial?

A medida que comenzamos a planificar la próxima edición de Introducción a los algoritmos (CLRS), ¿qué debemos agregar y qué debemos eliminar si la cuarta edición no puede ser más grande que la tercera?

Si envío una aplicación Spark en mi computadora portátil a un clúster Yarn remoto, ¿debo instalar el binario Spark en los nodos de Hadoop?

¿Qué es un servidor de computadora?