¿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.
database
windows
linux
operating-systems
Pratik
fuente
fuente
Respuestas:
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 )
fuente
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.
fuente
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:
fuente
sync
modo) +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 ...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:
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)
Fuente: docs.oracle.com
De acuerdo con la documentación, el sistema de archivos debería ser posible usarlo de manera transparente en Linux
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.
fuente
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.
fuente