Pregunta

Aparte de la/google bigtable escenario, cuando no debería de usar una base de datos relacional?Por qué no, y qué se debe utilizar?(¿aprender de la manera difícil'?)

¿Fue útil?

Solución

En mi experiencia, no se debe utilizar una base de datos relacional cuando cualquiera de estos criterios son verdaderas:

  • sus datos está estructurada como una jerarquía o un gráfico (de red) de profundidad arbitraria,
  • el patrón de acceso típica hace hincapié en la lectura sobre la escritura, o
  • No existe un requisito para las consultas ad-hoc.

jerarquías profundas y gráficos no se traducen bien a tablas relacionales. Incluso con la ayuda de extensiones propietarias como CONNECT BY de Oracle, persiguiendo a los árboles es un dolor fuerte utilizando SQL.

Bases de datos relacionales añadir un montón de gastos generales para el acceso de lectura sencilla. integridad transaccional y referencial son poderosos, pero excesiva para algunas aplicaciones. Por lo tanto para aplicaciones de lectura sobre todo, una metáfora de archivos es lo suficientemente bueno.

Por último, simplemente no necesita una base de datos relacional con su lenguaje de consulta en toda regla, si no hay consultas inesperadas anticipadas. Si no hay trajes de hacer preguntas como "¿cuántas 5% -discounted widgets azules vendimos en la costa este agrupados por vendedor?", Y nunca habrá, entonces, señor, puede vivir libres de DB.

Otros consejos

El paradigma de base de datos relacional hace algunas suposiciones sobre el uso de los datos.

  • A relación consta de un conjunto desordenado de filas.
  • Todas las filas en una relación tienen el mismo conjunto de columnas.
  • Cada columna tiene un nombre fijo y tipo de datos y el significado semántico en todas las filas.
  • filas en una relación se identifican por valores únicos en columna de clave principal (s).
  • etc.

Estos supuestos apoyan la simplicidad y la estructura, a costa de cierta flexibilidad. No todas las tareas de gestión de datos encajan en este tipo de estructura. Las entidades con atributos complejos o atributos de variable no lo hacen, por ejemplo. Si necesita flexibilidad en áreas en las que una solución de base de datos relacional no lo soporta, es necesario utilizar un tipo diferente de solución.

Existen otras soluciones para la gestión de datos con diferentes requisitos. tecnología de Web Semántica, por ejemplo, permite a cada entidad para definir sus propios atributos y ser auto-descripción, mediante el tratamiento de los metadatos como atributos al igual que datos. Esto es más flexible que la estructura impuesta por una base de datos relacional, pero que la flexibilidad viene con un coste de su propio.

En general, se debe utilizar la herramienta adecuada para cada trabajo.

Véase también mi otra respuesta a " La próxima generación bases de datos de . "

Hay tres principales modelos de datos (C.J.Date, E.F.Codd) y añado un archivo plano a esto:

  • archivo plano (s) (estructura varía - a partir del texto 'estúpida' plana a los archivos que se ajusten a las gramáticas, que junto con herramientas inteligentes hacer cosas muy inteligentes, compiladores pienso y lo que pueden hacer, aplicación restringida en el modelado de las cosas nuevas)
  • jerárquica (árboles, conjuntos anidados - ejemplos: XML y otros lenguajes de marcado, registro, organización gráficos, etc, cualquier cosa se pueden modelar, pero las reglas de integridad no son fáciles de expresar y la recuperación es difícil de optimizar automáticamente, algunas de recuperación es rápido y algo es muy lento)
  • red (redes, gráficos - ejemplos: bases de datos de navegación, enlaces, web semántica, casi nuevo nada puede ser modelado pero optimización automática de recuperación es un problema)
  • (Lógica de primer orden predicado - ejemplo: bases de datos relacionales, optimización automática de recuperación)
  • relacional

Tanto jerárquica y la red se puede representar en relacional y relacional se puede expresar en los otros dos.

La razón de que relacionales se considera 'mejor' es la naturaleza declarativa y la normalización no sólo en el lenguaje de recuperación de datos, sino también en el lenguaje de definición de datos, incluyendo la fuerte integridad de los datos declarativa, respaldada por estable , escalable, sistema de gestión multiusuario.

Los beneficios tienen un costo, que la mayoría de los proyectos encuentran para ser una buena relación de sistemas (aplicaciones múltiples) que almacenan datos a largo plazo en una de eso se podrá utilizar en el futuro previsible.

Si no están construyendo un sistema, pero una sola aplicación, tal vez para un solo usuario, y que son bastante seguro de que usted no querrá múltiples aplicaciones utilizando sus datos, ni los múltiples usuarios, en el corto plazo entonces es probable que encontrar métodos más rápidos.

Además, si usted no sabe qué tipo de datos que desea almacenar y cómo modelar entonces relacionales fortalezas modelo se pierden en él.

O si simplemente no se preocupan por la integridad de los datos que gran parte (que puede ser muy bien).

Todas las estructuras de datos están optimizados para un determinado tipo de uso, sólo se trata adecuadamente si relacionales modelados para representar a la 'realidad' de manera imparcial semánticamente. Las personas que tenían mala experiencia con bases de datos relacionales por lo general no se dan cuenta de que su experiencia habría sido mucho peor con otros tipos de modelos de datos. implementaciones horribles son posibles, y sobre todo con bases de datos relacionales, donde es relativamente fácil de construir modelos complejos, que podría terminar con un gran monstruo en sus manos. Aún así siempre me siento mejor cuando trato de imaginar el mismo monstruo en XML.

Un ejemplo de cómo un buen modelo relacional es, en mi opinión, es la relación de la complejidad frente a la dificultad de las preguntas que usted encontrará que implican SQL.

Le sugiero que visite la alta escalabilidad del blog , donde se discute este tema casi a diario y tiene muchos artículos sobre proyectos que eligió distribuidos hashes, etc. sobre RDMBS.

La rápida (pero muy incompleta respuesta) es que no todos los datos se traduce bien a las tablas en formas eficientes. Por ejemplo, si los datos es esencialmente un diccionario grande, probablemente hay alternativas mucho más rápido que el viejo y simple RDBMS. Habiendo dicho esto, es sobre todo una cuestión de rendimiento, y si el rendimiento no es una gran preocupación en un proyecto, y la estabilidad, consistencia y fiabilidad, por ejemplo, son, entonces no veo mucho sentido ahondar en estas tecnologías cuando RDBMS es un esquema mucho más madura y bien desarrollada, con el apoyo de todos los idiomas y plataformas y un enorme conjunto de soluciones para elegir.

Hace quince años yo estaba trabajando en un sistema de riesgo de crédito (básicamente un gran sistema de árbol que camina). Estábamos usando Sybase en HP-UX y Solaris y performnce nos estaba matando. Hemos contratado a consultores directos de Sybase que dijeron que no se podía hacer. A continuación, pasamos a una base de datos orientado a objetos (almacén de objetos, en este caso) y conseguimos una sobre un aumento de 100x rendimiento (y el código fue aproximadamente 100 veces más fácil de escribir también)

Sin embargo, este tipo de situaciones son muy raros -. Una base de datos relacional es una buena primera opción

Cuando esquema varía mucho va a tener un tiempo duro con bases de datos relacionales. Aquí es donde las bases de datos XML o bases de datos de pares de valores clave que mejor funcionan. o se puede utilizar IBM DB2 y tienen tanto datos relacionales y datos XML gestionados por un único motor de base de datos.

Acerca de 7-8 años trabajé en un sitio web que creció en popularidad más allá de nuestras expectativas iniciales y se nos metió en problemas en cuanto al rendimiento.Ya estábamos todos, relativamente inexpertos en la web basado en proyectos se plantea una importante presión sobre nosotros acerca de qué hacer más allá de la habitual de la separación de la base de datos en otro servidor, equilibrio de carga, etc.

Un día he pensado en algo bastante simple.Desde el sitio se basa en los usuarios, sus perfiles se almacenan en una tabla de base de datos de la habitual manera de que alguien lo haría - id de usuario, un montón de información de las variables y cosas por el estilo - que le muestran como un perfil de los usuarios de la página de la que otros usuarios podrían buscar.Me ha tirado de datos en la que un simple archivo html, ya preparado como un perfil de los usuarios de la página y recibió un impulso significativo - básicamente una memoria caché.Incluso hice un sistema que cuando el usuario editar su información de perfil, sería analizar original archivo html, ponerla para editar y, a continuación, vaciar el html en el archivo de sistema - se puso aún más impulso.

Yo hice algo similar con los mensajes que los usuarios envían a cada uno de los otros.Básicamente, dondequiera que yo podría hacer un sistema de derivación de una base de datos por completo, evitando un INSERT o UPDATE, tengo un impulso significativo.Esto puede parecer de sentido común, pero fue una gran momento.No es una evasión de la configuración relacional de por sí, pero es una evasión de la base de datos por completo, se BESAN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top