¿Cuándo debería considerar el uso de una base de datos en memoria y cuáles son los problemas a tener en cuenta?

StackOverflow https://stackoverflow.com/questions/1593692

Pregunta

Solo pensé que ahora es así. Es común tener suficiente RAM en su servidor de base de datos para almacenar en caché su base de datos completa. ¿Por qué el especialista en base de datos de memoria (p.ej veces diez, ver también página de wikipedia) que estaban de moda hace unos años no se utilizan más?

Parece ser que a medida que pasa el tiempo, las bases de datos basadas en disco se utilizan menos; por ejemplo, la mayoría de las aplicaciones ahora se basan en bases de datos racionales convencionales.Habría esperado lo contrario, ya que la RAM está cada vez más disponible para muchos servidores.

Estoy preguntando esto, ya que acabo de leer sobre la arquitectura de desbordamiento de pila y la página dice

Esto es importante porque Stack La base de datos de Overflow está casi completamente en RAM y las articulaciones todavía Exactamente un costo demasiado alto.

Pero no creo que esto sea un problema si se usaran “punteros” y “colecciones” en lugar del btree normal.Btree es muy inteligente para sortear los límites de la velocidad de acceso al disco, por ejemplo, intercambia el uso de la CPU para reducir el uso del disco.Pero ahora tenemos un ram tan compatible.

Pero todavía necesitamos una base de datos, como hacer la tuya propia.

  • Cierre
  • Detección de interbloqueo
  • Registro de transacciones
  • Recuperación
  • Etc

Es muy dificil.

@S.Lott, dado que todos pasamos tanto tiempo eligiendo índices, evitando uniones e investigando problemas de rendimiento de la base de datos.Debe haber una mejor manera.Hace unos años nos dijeron que las “bases de datos en memoria” eran la mejor manera.Entonces, antes de comenzar a usar uno, etc., deseo saber por qué otras personas no los usan más.

(Es poco probable que use TimesTen yo mismo, ya que tiene un precio elevado ($41,500.00 / Procesador) y no me gusta hablar con el personal de ventas de Oracle; prefiero dedicar mi tiempo a escribir código).

Ver también:

Actualizar:

Hice esta pregunta un LARGO Hace un tiempo, en estos días Microsoft SQL Server tiene "OLTP en memoria"Es un motor de base de datos optimizado para memoria integrado en el motor de SQL Server.No es barato, pero parece serlo. muy rapido para algunas cargas de trabajo.

¿Fue útil?

Solución

Lo más probable es que no existan productos maduros de bases de datos en memoria que puedan utilizarse como sustituto completo de una base de datos clásica.

Las bases de datos relacionales son un concepto muy antiguo.Aunque hubo muchos enfoques para avanzar y desarrollar nuevas tecnologías, p.bases de datos orientadas a objetos, las bases de datos relacionales realmente no cambiaron sus conceptos.No espere que las cosas cambien demasiado rápido, ya que las bases de datos no cambiaron mucho en los últimos diez o quince años o incluso más.

Creo que el desarrollo de las tecnologías no es tan rápido como podría creerse.Se necesitan décadas para que maduren y establezcan nuevos conceptos.En primer lugar, en las tecnologías de bases de datos, donde la madurez es mucho más importante que cualquier otra cosa.

Dentro de diez o veinte años, las bases de datos probablemente ya no sean las mismas que hoy.Si las bases de datos en memoria son el futuro (nadie puede decirlo hoy en día), sólo necesitan más tiempo para desarrollarse.

Otros consejos

Nadie realmente respondió a la pregunta "¿Cuándo debería considerar el uso de una base de datos en memoria y cuáles son los problemas a tener en cuenta?" así que voy a darle una oportunidad.

Debería considerar una base de datos en memoria si:1.El sistema objetivo tiene datos que gestionar, pero ningún medio persistente 2.El requisito de rendimiento simplemente no se puede cumplir con una base de datos persistente

Para el punto 1, piense en la Guía de TV de su decodificador (STB).STB de gama baja (es decir,aquellos sin capacidad de DVR) no tienen almacenamiento persistente y no necesitan almacenamiento persistente.Pero la base de datos de una guía de televisión de 14 días y 400 canales no es trivial.Aquí también existe un requisito de rendimiento, porque los datos llegan desde el carrusel del transpondedor a alta velocidad y se trata de "capturarlos o esperar hasta que el carrusel vuelva a aparecer".Pero no hay necesidad de perseverar.Todos hemos visto esto;cuando se corta la energía en su casa, cuando vuelve a aparecer en la Guía de TV dice "estará disponible en breve" porque se está aprovisionando desde el transpondedor o la cabecera del cable.Los enrutadores de red comparten las mismas características:no hay almacenamiento persistente, debe ser rápido y la base de datos se puede aprovisionar desde una fuente externa (enrutadores pares en la red, en este caso, para repoblar la tabla de enrutamiento).

Hay infinitos ejemplos del n.° 2:Selección de objetivos en tiempo real en sistemas militares, sistemas comerciales de alta frecuencia y más.

Respecto a la segunda parte de la pregunta, "cuestión a tener en cuenta":Hay muchos.

Asegúrese de evaluar una verdadera base de datos en memoria si necesita el rendimiento que sólo una base de datos en memoria puede ofrecer.Almacenar en caché una base de datos persistente no es lo mismo.Lanzar una base de datos persistente en una unidad RAM no es lo mismo.Usar una base de datos en memoria que inherentemente realiza el registro de transacciones (como TimesTen) no es lo mismo (incluso si inicia sesión en /dev/null).

Asegúrese de que está evaluando un sistema de base de datos y no simplemente un caché (p. ej.Memcache).Un sistema de base de datos admitirá transacciones con las propiedades ACID, múltiples opciones de indexación, admitirá acceso simultáneo y más.

Acerca del ÁCIDO:Los sistemas de bases de datos en memoria no carecen de la 'D' (durabilidad).Simplemente hay que tomarlo en contexto.Las transacciones en una base de datos persistente son duraderas sólo mientras el medio en el que están almacenadas sea duradero.Lo mismo ocurre con las bases de datos en memoria.En cualquier caso, si le importa la durabilidad, será mejor que tenga una copia de seguridad.

La tendencia parece ser almacenar en caché de manera agresiva y utilizar la base de datos para llenar el caché.Independientemente de dónde se encuentre la base de datos, las uniones siguen siendo costosas, por lo que la preferencia parece ser realizar la unión una vez y almacenar en caché el resultado en algo como Memcached o Velocidad.

Todavía existen bases de datos en memoria y se utilizan, pero depende del contexto en el que desee utilizarlas. SQLite por ejemplo, se utiliza a menudo como base de datos en memoria al probar capas de datos.

La razón más importante es la cultura de carga y el bajísimo nivel de conocimientos en TI.La mayoría de las aplicaciones funcionan suficientemente bien cualquiera que sea la solución de persistencia utilizada, y como las computadoras siguen siendo más rápidas cada año, no hay suficientes personas que sientan el dolor y sean capaces de identificar el problema.

Microsoft y Oracle ganan demasiado dinero con sus productos de bases de datos como para que les sea (políticamente) posible idear mejores enfoques.

Los costos de desarrollo del uso de una base de datos relacional no se hacen transparentes, por lo que la administración no tiene idea de que existe un problema, y ​​mucho menos una solución.

Bueno, las bases de datos en memoria generalmente carecen de la D (durabilidad) en ÁCIDO (atomicidad, consistencia, aislamiento, durabilidad) por su propia naturaleza.Esto se puede superar hasta cierto punto con enfoques "híbridos", sin embargo, en algún momento algo (ya sea los datos en sí o un registro de transacciones) debe persistir. en algún lugar para proporcionar el aspecto de durabilidad.Por lo general, esto puede ralentizar el rendimiento o introducir otras propiedades no deseadas en una solución de base de datos en memoria.

Por el contrario, la mayoría de los RDBMS actuales tienen el complemento completo de ACID, además de tener muchas décadas de desarrollo a sus espaldas.Esto ha dado como resultado sistemas de bases de datos basados ​​en disco que tienen un gran rendimiento, especialmente con los muchos años de mejoras y optimizaciones que han experimentado los sistemas RDBMS modernos (su BTárbol ejemplo es sólo uno de muchos).

Otro factor es nuestra capacidad como desarrolladores de aplicaciones para reducir la carga de la base de datos mediante mecanismos como almacenamiento en caché, exprimiendo así mucho más percibido rendimiento de la capa de datos de una aplicación.De hecho, el almacenamiento en caché en sí ha experimentado grandes avances en los últimos años y el almacenamiento en caché distribuido es común hoy en día (basta con mirar la cantidad de usuarios de memcached, Por ejemplo).

Irónicamente, los sistemas de almacenamiento en caché modernos, en muchos sentidos, se están transformando lentamente en algo parecido a un verdadero sistema de base de datos en memoria.Las bases de datos en memoria, como las bases de datos orientadas a objetos, son en gran medida los "nuevos chicos de la cuadra", por lo que será interesante ver a dónde va todo esto con el tiempo.Oracle ahora ha adquirido TimesTen y, según este artículo de wikipedia, Microsoft está considerando ingresar al mercado de bases de datos en memoria muy pronto.Se trata de dos "grandes jugadores" modernos en el campo RDBMS tradicional que se están tomando en serio los sistemas de bases de datos en memoria.

Esta también es una opción: http://www.memsql.com/

No lo he usado personalmente, pero se supone que es similar a un reemplazo directo para MySQL en memoria.

Varias versiones portátiles de SQL, que funcionarán con la misma eficiencia, diseñadas principalmente para dispositivos móviles.

SQLite

Edición compacta de SQL Server

Estos son solo grandes jugadores, es posible que existan otras opciones, pero los grandes jugadores manejan los requisitos mínimos con el lanzamiento.:)

y en la base de datos de la memoria, usted tiene una copia de seguridad continua de los datos, si surge una fluctuación o un corte de energía, puede perder todo el grupo.como en otros que se manejarán como si estuvieran en la memoria secundaria (HDD) y las posibilidades de pérdida serán del 10% en comparación con la memoria DB.

Espero que esto pueda ayudar :)

El caso de uso más típico de una base de datos es la persistencia, lo que hace que la mayoría de las bases de datos en memoria no sean adecuadas.Una razón popular para utilizar una base de datos en memoria es con fines de prueba.Pero esto requiere que utilice una base de datos que pueda configurarse como en memoria o algo más.

Las opciones populares en esta área parecen ser RavenDB para desarrolladores .Net y OrientDB para desarrolladores Java.Porque ambas pueden funcionar como bases de datos en memoria, y "algo más" dependiendo de la configuración, por lo que puedes usar una u otra dependiendo de tu configuración (app.config en .Net, Maven o Ant settings en Java).

Las necesidades de procesamiento de datos son cada vez más complejas y el ecosistema de productos está evolucionando para satisfacer estas nuevas necesidades.RDBMS basado en disco, caché en memoria y bases de datos en memoria se utilizan para satisfacer diferentes necesidades.Debes elegir lo que se adapte a tus necesidades.

RDBMS tradicionales: Su clúster MySQL es lo suficientemente rápido, fácil de mantener y le gusta tener la confiabilidad del cumplimiento de ACID.

Cahce distribuida en memoria: Su aplicación necesita realizar lecturas y escrituras rápidas sin preocuparse demasiado por la coherencia o las transacciones complejas.

RDBMS en memoria:

  1. (Velocidad):Su aplicación necesita procesar datos/solicitudes más rápido que su base de datos basada en disco.
  2. (Complejidad):Necesita realizar lecturas y escrituras transaccionales complejas con uniones y agregaciones y le gusta utilizar el poder de SQL.
  3. (Escalabilidad):Necesita escalar su base de datos horizontalmente sin tiempo de inactividad.
  4. (Mantenibilidad):Necesita que la base de datos proporcione alta disponibilidad, replicación, equilibrio de carga y recuperación ante desastres sin aumentar las tareas de mantenimiento.
  5. (Advertencia):Tus datos deben caber en la memoria (normalmente en terabytes).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top