¿Por qué Windows / Linux no utiliza bases de datos relacionales (RDBMS)?

32

¿Por qué Windows / Linux no utiliza bases de datos relacionales ( RDBMS )?

Sé que usan sistemas de archivos para almacenar todos los datos, pero ¿no crees que es más eficiente usar bases de datos como las que usamos en sitios web / aplicaciones web?

Explique el uso de un sistema de archivos sobre una base de datos para el almacenamiento.

Esto no es un duplicado de ¿ Cuándo se debe preferir el uso de la base de datos sobre el análisis de datos de un archivo de texto? Estoy hablando solo en términos de contextos del sistema operativo, y esa pregunta es generalizada.

Pratik
fuente
32
Un sistema de archivos es una base de datos.
20
Porque los sistemas de archivos son necesarios para implementar bases de datos.
Kilian Foth
16
Windows usa una base de datos, se llama "Registro". ¿O quieres decir "base de datos relacional"? Esa es una pregunta diferente.
Doc Brown
66
@ gnasher729 El sistema de archivos es un tipo de base de datos muy particular y, como tal, solo es bueno para tipos de datos particulares. Otros tipos de datos se sirven mejor con diferentes tipos de bases de datos (por ejemplo, relacionales).
66
@KilianFoth, en realidad no. Podría escribir en una partición de disco sin formato (que no es comparable a un archivo de sistema operativo).
Paul Draper

Respuestas:

60

Hoy en día, la mayoría de los sistemas de administración de bases de datos (por ejemplo , PostGreSQL , MongoDB , etc.) mantienen internamente sus datos dentro de los archivos del sistema operativo (en el pasado, algunos DBMS usaban particiones de disco sin formato directamente).

En las computadoras recientes que todavía usan discos duros giratorios , el disco es tan lento, en relación con la CPU o la RAM, que agregar algunas capas de software no es relevante. La tecnología SSD puede cambiar eso un poco, y algunos sistemas de archivos están optimizados para SSD.

Los archivos están presentes en la mayoría de los sistemas operativos en general por razones históricas y sociales (en particular, los compiladores de C y la mayoría de las herramientas - editores, enlazadores - quieren archivos, por lo que hay un problema de gallina y huevo), y porque hay muchos archivos muy buenos implementaciones de sistemas .

Por cierto, algunas instalaciones esenciales del sistema pueden usar bases de datos. Por ejemplo, en Linux, PAM se puede configurar para usar información en bases de datos (pero esto rara vez se hace en la práctica). Además, algunos servidores de correo pueden almacenar algunos o la mayoría de sus datos en bases de datos (por ejemplo, Exim ).

Los archivos son abstracciones ligeramente más bajas que las bases de datos, por lo que pueden ser más fáciles de implementar (como los sistemas de archivos y la capa VFS en el kernel de Linux) y más rápidos de usar. En particular, las operaciones en los archivos son mucho más restringidas que las de las bases de datos. De hecho, ¡podría ver archivos o sistemas de archivos como algunas bases de datos muy restringidas!

Puede diseñar un sistema operativo sin ningún archivo , pero con alguna otra maquinaria de persistencia ortogonal (por ejemplo, que todos los procesos sean persistentes, entonces no le importa mucho el almacenamiento, ya que el sistema operativo está administrando recursos persistentes). Esto se ha hecho en varios sistemas operativos académicos (1) (y también en las máquinas Smalltalk y Lisp de la década de 1980, de alguna manera en el IBM System i , también conocido como AS / 400 , y en algunos proyectos de juguetes vinculados desde osdev), pero cuando diseña su sistema operativo de esta manera no puede aprovechar muchas herramientas existentes (por ejemplo, también necesita hacer su compilador y su interfaz de usuario desde cero, y eso es mucho trabajo).

Tenga en cuenta que los sistemas operativos de microkernel pueden no necesitar los archivos proporcionados por las capas del kernel, ya que los sistemas de archivos son solo servidores de aplicaciones (por ejemplo, los traductores Hurd que se ejecutan en el país de usuario). Ver también el unikernel enfoque de hoy en MirageOS

Linux (y probablemente Windows, que se inspiró principalmente en VMS y Unix ) necesitan archivos para funcionar. Como mínimo, el programa init (el primer programa iniciado por el kernel) debe ser un ejecutable almacenado en un archivo (a menudo /sbin/init, pero podría ser systemd actualmente), y (casi) todos los demás programas se inician con execve (2 ) syscall por lo que debe almacenarse en un archivo. Sin embargo, FUSE le permite dar una semántica similar a un archivo a cosas que no son de archivo.

Tenga en cuenta también que en Linux (y tal vez incluso en Windows, que no conozco y nunca utilicé) sqlite es una biblioteca que administra algunas bases de datos SQL en archivos y proporciona una API para eso. Es ampliamente conocido que Android (una variante de Linux) usa muchos archivos sqlite (pero todavía tiene un sistema de archivos similar a POSIX).

Lea también sobre los puntos de verificación de la aplicación (que, en muchos sistemas operativos actuales, se implementa para escribir el estado del proceso en archivos). Llevado al extremo, ese enfoque no necesita escribir manualmente archivos de aplicación (sino solo para persistir todo el estado del proceso utilizando la maquinaria de verificación).

En realidad, la pregunta interesante es por qué los sistemas operativos actuales todavía usan archivos, y la respuesta es heredada, y razones económicas y culturales (lamentablemente, la mayoría de los lenguajes de programación y bibliotecas de hoy todavía quieren archivos).


Nota 1: los sistemas operativos académicos persistentes incluyen Lisaac y Grasshopper , pero estos proyectos académicos parecen estar inactivos. Mire también en http://tunes.org/ ; está inactivo, pero ha tenido muchas discusiones sobre estos temas.

Nota 2: la noción de archivo ha cambiado ampliamente con el tiempo (mire esta respuesta sobre mis primeras experiencias de programación): el primer MSDOS en las PC de IBM de la década de 1980 (¡sin directorios!), El VMS -en 1978 Vaxen- (tenía ambos registros fijos archivos y archivos secuenciales, con un sistema de versiones primitivo), los mainframes de la década de 1970 ( IBM / 370 con OS / VS2 MVS ) tenían una noción muy diferente de archivos y sistemas de archivos (en particular porque en ese momento la proporción de tiempo de acceso al disco duro a el tiempo de acceso a la memoria central fue de unos pocos miles, por lo que en ese momento el disco funcionaba relativamente más rápido que hoy, incluso si los discos de hoy son absolutamentemás rápido que en el siglo anterior, hoy la relación CPU / velocidad de disco es de aproximadamente un millón; pero ahora tenemos SSD). Además, los archivos son menos (o incluso no) útiles cuando la memoria es persistente (como en el tambor magnético CAB500 , 1960; o en futuras computadoras que usan MRAM )

Basile Starynkevitch
fuente
9
También vale la pena señalar que algunos sistemas de archivos en realidad tienen una serie de características RDBMS. Por ejemplo, los metadatos de archivo (particularmente los metadatos extendidos) en BeFS se indexan con árboles B +, y el administrador de archivos BeOS tenía un motor de búsqueda similar a SQL que buscaba metadatos indexados para encontrar archivos.
greyfade
2
No estoy atrevida ponerlos en mi respuesta, pero ambos tunes.org y el blog de J.Pitrat podría ampliar sus puntos de vista sobre el software y sistemas operativos.
Basile Starynkevitch
44
@greyfade: un sistema de archivos es una base de datos de objetos. No conozco ningún sistema de archivos que tenga la capacidad de responder consultas relacionales (por ejemplo, archivos con tiempos de modificación en un cierto rango). Debe hacerlo consultando el tiempo de modificación de todos los archivos y filtrándose usted mismo. Algunos sistemas de archivos funcionan decentemente cuando se usan directamente como una base de datos de objetos (almacenando millones de archivos muy pequeños, donde el nombre de archivo es la clave), pero otros funcionan bien con este tipo de carga de trabajo.
Peter Cordes
3
@PeterCordes: BeFS hizo eso. Debido a que todos los metadatos estaban indexados en árbol B +, admitía consultas de rango, comodines, combinaciones y otras cosas divertidas. Recuerdo haber escuchado que Microsoft estaba haciendo lo mismo en WinFS.
greyfade
44
El PalmOS era un sistema operativo bastante convencional que no tenía un sistema de archivos. En cambio, tenía una base de datos relacional que se implementó directamente en RAM / flash (el hardware original no usaba memoria flash como iPhones hoy en día, sino que usaba RAM estática respaldada por batería tanto para RAM como para disco).
slebetman
23

Aunque esto se basa en la opinión, creo que es solo otro artefacto histórico. Los primeros sistemas operativos usaban un diseño de sistema de archivos simple para el rendimiento que estaba razonablemente vinculado a las características del hardware disponible en ese momento, y ha sido de la misma manera desde entonces. Es difícil cambiar las API de lectura / escritura de archivos antiguos para obtener más API de consulta / inserción de transacciones una vez que se establecieron.

Todos los sistemas de archivos actuales tienen el requisito de ser compatibles con estas API antiguas.

Microsoft pensó en reemplazar el sistema de archivos con uno basado en RDBMS , en el desarrollo de Longhorn . Fue un cambio demasiado grande para ellos, pero sí ven que sus esfuerzos continúan en forma de Búsqueda de Windows (donde se utiliza un RDBMS para almacenar una copia de metadatos) y características como el sistema Filestream de SQL Server (donde un La tabla de la base de datos de datos de archivo se expone al sistema operativo como un directorio ordinario que permite el acceso de Windows Explorer a los datos y las consultas SQL de los mismos datos).

Otros sistemas operativos tienen sistemas de archivos RDBMS. Los AS / 400 solían tener estos, aunque nunca aprendí lo suficiente sobre ellos; Recuerdo lo raro que parecía en ese momento). Creo que otros sistemas mainframe tienen el mismo tipo de enfoque.

gbjbaanb
fuente
1
Si la memoria le sirve, puede estar pensando en el DB2 UDB en OS / 400, también conocido como i5 / OS (ahora llamado "IBM i"): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/…
Brian Cline
1
Sí, sería genial COMENZAR TRANSACCIÓN / COMPROMISO en los permisos de archivo en lugar de hacer un "buscar con -exec". La elevación del sistema de archivos primitivo de bajo nivel que se introduce en adminland es accidental y debe seguir el camino del panel de programación. ¿El "sistema de archivos" como un sistema de gestión de metadatos y almacenamiento de bytestream adecuado (aunque la interpretación del contenido de bytestream aún debe dejarse en las capas de la aplicación, de lo contrario se producirán dolores de cabeza)? Si, queremos!
David Tonhofer
12

La verdadera razón es la falta de necesidad. La colocación de bases de datos en capas sobre los archivos, en lugar de fusionarlos, maneja la gran mayoría de las situaciones al menos, así como una solución combinada con una complejidad sustancialmente reducida. En algunas situaciones que otros han mencionado, también hemos colocado en capas partes de archivos sobre bases de datos (como estructuras de permisos). En ese caso, la base de datos que administra esos permisos es notablemente más simple que un RDBMS comercial.

Hay ventajas en fusionarlos, pero hasta ahora han sido pocos y lo suficientemente largos como para que el movimiento esté creciendo lentamente. Considere lo raro que es que la gente diga "Déme la tercera columna de cada factura que he recibido desde 2010 y sumémoslas juntas" o "no me dejen eliminar este archivo hasta que lo haya eliminado de Excel hoja de cálculo también ".

Los sistemas de archivos tienen algunas ventajas sobre las bases de datos relacionales que los mantienen en funcionamiento:

  • Son mucho más simples. Esto es un gran problema al arrancar una computadora. Incluso en Android , donde tienen un RDBMS para almacenamiento, tienen imágenes antiguas simples para administrar el proceso inicial de carga de arranque.
    • Es más fácil definir sus limitaciones. En una máquina ilimitada, los RDBM proporcionan bastante potencia. Sin embargo, en el mundo del sistema de archivos, existen muchas limitaciones que se derivan de tratar de ser rápido cuando se coloca directamente sobre un disco giratorio. Es más difícil demostrar que una consulta RDBMS no excede esas limitaciones que proporcionar las mismas garantías para un sistema de archivos.
  • Manejan mejor las estructuras jerárquicas. En muchos casos, sigue siendo natural que las personas almacenen archivos en forma jerárquica. En RDBMSes, ese es un caso especial. Los sistemas de archivos se optimizan para ese caso especial, los RDBMS no.
  • Confiabilidad. Es mucho más fácil demostrar que dos capas funcionan de forma independiente que demostrar que un sistema gigante funciona perfectamente. Las matrices RAID , los diarios a prueba de fallas en tiempos de fallas de energía y otras características avanzadas son más fáciles de implementar en una capa debajo de la capa que se ocupa de cosas como ACID o restricciones de claves externas.
Cort Ammon - Restablece a Monica
fuente
1
fiabilidad: puede ejecutar la base de datos sobre RAID al igual que puede ejecutar un sistema de archivos en un dispositivo RAID, en lugar de usar un disco directamente. Sin embargo, el registro en diario debe realizarse dentro del sistema de archivos / DB (a menos que desee proporcionar garantías de corrección deshabilitando el almacenamiento en caché de escritura y nunca reordenando las E / S, es decir, el syncmodo) +1 para todos sus otros puntos, especialmente. rendimiento jerárquico rápido donde un montón de cosas en un subdirectorio no ralentiza el rendimiento en otro subdirectorio. A menos que cada directorio o archivo sea una tabla diferente ...
Peter Cordes
confiabilidad: los sistemas operativos de la serie IBM i están diseñados para ser más confiables de lo que pueda imaginar, y están diseñados para el uso de estilo mainframe. Las jerarquías solo existen debido a las limitaciones del sistema de archivos, por lo tanto, MS desea buscar más tarde y realizar operaciones de base de datos en la parte superior del sistema de archivos existente. ¡Mira a gmail como un ejemplo de cómo puedes tener una jerarquía sin usar jerarquías!
gbjbaanb
3

Creo que las otras respuestas proporcionan una amplia gama de razones de por qué los sistemas operativos no se basan en bases de datos relacionales interna / exclusivamente, por lo que compartiré una información interesante que una vez me topé.

Aparentemente, existen tecnologías que le permiten montar bases de datos relacionales como sistemas de archivos cuando su uso está justificado. Oracle DBFS (Sistema de archivos de base de datos) es un ejemplo. Este fragmento de la documentación explica muy bien la razón detrás de esto:

El Sistema de archivos de base de datos (DBFS) aprovecha las características de la base de datos para almacenar archivos, y las fortalezas de la base de datos para administrar eficientemente los datos relacionales, para implementar una interfaz de sistema de archivos estándar para los archivos almacenados en la base de datos. Con esta interfaz, el almacenamiento de archivos en la base de datos ya no se limita a programas específicamente escritos para su uso BLOBe CLOBinterfaces programáticas. Ahora se puede acceder de forma transparente a los archivos de la base de datos utilizando cualquier programa de sistema operativo (SO) que actúe sobre los archivos.

La solución proporciona un conjunto de interfaces (clientes de línea de comandos, bibliotecas de códigos) para datos LOB que se almacenan en tablas de bases de datos. Esto se puede usar en los sistemas operativos Windows y Linux (aunque, por lo que puedo decir, el nivel de integración varía entre ellos)

Componentes de Oracle DBFS

Fuente: docs.oracle.com

De acuerdo con la documentación, el sistema de archivos debería ser posible usarlo de manera transparente en Linux

En Linux, dbfs_clienttambién tiene una interfaz de montaje que utiliza el FUSEmódulo del sistema de archivos en el espacio del usuario ( ) para implementar un punto de montaje del sistema de archivos que proporciona acceso transparente a los archivos almacenados en la base de datos y no requiere cambios en el núcleo de Linux. Recibe llamadas estándar del sistema de archivos del FUSEmódulo del núcleo y las traduce en llamadas OCI a los procedimientos PL / SQL en el Almacén de contenido DBFS .

Por lo tanto, la respuesta a su pregunta es que, en general, no hay razón para que un sistema operativo use una base de datos relacional como sistema de archivos (y en el caso de los componentes centrales de un sistema operativo, esto sería realmente problemático). Al mismo tiempo, es posible hacerlo cuando algún problema lo requiere.

toniedzwiedz
fuente
2

La función principal de cualquier sistema operativo es facilitar las interacciones entre las aplicaciones, el hardware y los usuarios.

Entonces, ¿por qué el sistema operativo Windows / Linux no utiliza bases de datos relacionales (RDBMS)? Esta es una cuestión de proporciones bíblicas, pero la respuesta breve es: no se puede obtener ningún beneficio real al usar una estructura compleja como un rdbms como sistema de archivos.

"Relacional" es la palabra operativa en "Base de datos relacional" y la mayoría de los datos almacenados en un sistema de archivos no están relacionados con otros datos. Los sistemas de archivos generalmente se implementan como bases de datos limitadas, solo que no son relacionales.

Nik Pfirsig
fuente
Tal vez una mejor pregunta sería: ¿por qué las aplicaciones necesitan bases de datos en lugar de simplemente conservar los datos en los archivos? Nunca he encontrado una respuesta satisfactoria a esta pregunta. Todos los supuestos beneficios de una base de datos relacional se pueden obtener con un archivo sustem
Sridhar Sarnobat