database - tablas - ¿Es mejor almacenar la configuración de la plataforma en una base de datos o un archivo?
crear base de datos sql (6)
¿Por qué una nueva columna cada vez? Por qué no solo 2 columnas: NOMBRE y VALOR.
Lo que hacemos es establecer los valores predeterminados en un archivo, luego invalidar esos valores predeterminados en la base de datos cuando sea necesario, por implementación.
Además, en términos de velocidad, almacenamos en caché la configuración (con la capacidad de activar una recarga). No tiene sentido volver a leer la configuración cada vez que necesite una propiedad de ella. Así que en términos de velocidad, realmente no importa. Lo haces una vez.
Actualmente estamos desarrollando una aplicación en la que usamos la tabla de base de datos para almacenar configuraciones de plataforma, como el tamaño máximo de archivo, el número máximo de usuarios, el correo electrónico de soporte, etc.
significa que cada vez que agregamos una configuración de plataforma tenemos que agregar una columna a esta tabla.
en mis proyectos anteriores estoy acostumbrado a almacenar dicha información en un archivo.
¿Qué es mejor / enfoque más rápido?
PD: estoy casi seguro de que alguien ya tenía esa pregunta, pero parece que no puedo encontrarla
Almacenamos los ajustes de configuración en una tabla de tipo clave / valor, algo así como:
CREATE TABLE Configuration.GlobalSettings
(
SectionName VARCHAR(50),
SettingName VARCHAR(50),
SettingValue VARCHAR(1000),
SettingType TINYINT
);
El nombre de la SectionName
y el nombre de la SettingName
son la clave principal, simplemente los dividimos para facilitar la consulta de lo que hay en una sección, y para permitir la carga de secciones individuales en los controladores en lugar de cargar todo el lote de una vez. SettingValue
es una cadena, y luego SettingType
es un discriminador que nos dice cómo se debe interpretar el valor de configuración (por ejemplo, 1 = cadena, 2 = bool, 3 = decimal, etc.).
Esto significa que no tiene que cambiar la estructura de la tabla para la nueva configuración, solo agregue una nueva en el script de implementación o donde sea que configure estas cosas.
Encontramos que es una mejor manera de hacer la configuración que un archivo porque significa que puede cambiar fácilmente los valores de configuración mediante programación a través de una interfaz de administrador cuando sea necesario, lo que puede imponer la lógica en torno a lo que puede incluir cada configuración. No puedes hacer eso tan fácilmente con un archivo (aunque, por supuesto, es posible).
Creo que, como todos dijeron, depende de su entorno de aplicación y sus requisitos. Pero si tuviera que elegir una regla general, diría AMBOS. Primero, crea una tabla de base de datos para almacenar todas sus configuraciones. Esto es bueno por dos razones: 1) Versiones: le permite realizar un seguimiento de las configuraciones anteriores con facilidad. 2) Administración: puede crear una interfaz a la que sus usuarios puedan acceder para cambiar la configuración.
En segundo lugar, crea un archivo que después de guardar y publicar el sitio en producción, también guardará todas esas configuraciones en un archivo al que se podrá acceder fácilmente. De hecho, si está programando en PHP para la web, ese archivo debe ser un archivo php con datos de matriz (pares clave-valor) que no necesitan más manipulación. Con esto quiero decir, no hay necesidad de convertir su yaml, o json en array si esa es la salida final que necesita tener.
Para ser justos, la respuesta no es tan clara.
Las respuestas anteriores no parecen tener en cuenta las aplicaciones que deben implementarse en diferentes entornos, es decir: dev, qa, staging, prod.
Tampoco tienen en cuenta la importancia de la configuración de versiones, es decir, saber quién cambió qué, dónde y cuándo.
Todos los marcos modernos proporcionan una forma de obtener la configuración adecuada para entornos específicos, generalmente a través de variables de entorno.
Cada entorno tiene su propia configuración, considere la forma en que Symfony distribuye sus archivos de configuración:
your-project/
├─ app/
│ ├─ ...
│ └─ config/
│ ├─ config.yml
│ ├─ config_dev.yml
│ ├─ config_prod.yml
│ ├─ config_test.yml
│ ├─ parameters.yml
│ ├─ parameters.yml.dist
│ ├─ routing.yml
│ ├─ routing_dev.yml
│ └─ security.yml
├─ ...
Por estas razones, sin duda prefiero la configuración en archivo.
Mis 2 centavos.
Puedo decirle que administro una aplicación particularmente grande en numerosos sitios que mantener las configuraciones en archivos locales es un dolor total. A menudo, las configuraciones se leen y se almacenan en la caché y no se pueden cambiar durante el tiempo de ejecución; otras tienen sistemas de escalamiento horizontal donde las configuraciones deben ser cambiadas y rechazadas repetidamente.
Mi vida sería un 10% más fácil durante la implementación horizontal del sistema si los diseñadores simplemente mantuvieran las propiedades del sistema en la base de datos.
Realmente depende de su aplicación.
Almacenar la configuración en la base de datos tiene varias ventajas:
- Seguridad: los usuarios pueden modificar fácilmente la configuración del archivo o sobrescribir el contenido.
- Para la distribución: las mismas configuraciones se pueden actualizar y cargar en cualquier máquina de la red.
Desventajas:
- Se basa en la conexión de base de datos
- Gastos generales al leer de la base de datos
Almacenamiento en archivo de ventajas:
- Rápido y fácil de leer y modificar.
Desventajas:
- Cuestión de seguridad como se mencionó anteriormente.
- Puede necesitar cifrado en datos sensibles.
- Las versiones son difíciles, ya que tiene que crear archivos separados para diferentes versiones.
significa que cada vez que agregamos una configuración de plataforma tenemos que agregar una columna a esta tabla, dependiendo de la base de datos que esté utilizando, pero puede almacenar toda la configuración como XML (el servidor SQL lo permite) en la tabla, por lo que no es necesario modificar el esquema de la tabla cada vez que se agrega una configuración; todo lo que necesita hacer es modificar el XML, agregarle elementos o eliminarlo.
Pero al final, tienes que decidirte, no hay mejor ni peor para todos.