erlang couchdb riak otp in-memory-database

erlang - Por qué las grandes empresas usan Mnesia en lugar de utilizar Riak o CouchDB



otp in-memory-database (3)

Te estás perdiendo una cantidad de puntos importantes:

En primer lugar, mnesia no tiene un límite de 2 gigabytes. Está limitado en una arquitectura de 32 bits, pero casi ninguno está presente para un trabajo real. Y en 64 bits, no está limitado a 2 gigabytes. He visto bases de datos del orden de varios cientos de gigabytes. El único problema es el tiempo de inicio inicial para aquellos.

Mnesia está diseñado para manejar:

  • Búsqueda de K / V de latencia muy baja, no necesariamente linealizable.
  • Transacciones apropiadas con cambios linealizables (C en el teorema CAP). Se permite que funcionen a una latencia mucho peor, ya que se espera que sean relativamente raros.
  • Cambio de esquema en línea
  • Supervivencia incluso si los nodos fallan en un clúster (donde el clúster es pequeño, digamos 10-50 máquinas como máximo)

El diseño es tal que evita un proceso separado ya que los datos ya están en el sistema Erlang. Usted tiene QLC para consultas tipo registro de datos. Y tienes la capacidad de almacenar cualquier término de Erlang.

A Mnesia le va bien si lo anterior es lo que necesita. Sus límites son:

  • No puede obtener una máquina con más de 2 terabytes de memoria. Y cargar 2 teras desde cero va a ser lento.
  • Como es un sistema CP y no un sistema AP, la pérdida de nodos requiere intervención manual. Es posible que no necesite transacciones también. También es posible que desee agregar sin problemas más nodos al sistema, etc. Para esto, Riak es una mejor opción.
  • Utiliza un bloqueo optimista que genera problemas si muchos procesos intentan acceder a la misma fila en una transacción.

Mi truco habitual es comenzar con Mnesia en sistemas Erlang y luego cambiar a otro sistema a medida que crece el tamaño de los datos. Si el tamaño de los datos crece lentamente, entonces puede mantener todo en la memoria en Mnesia y ponerse en marcha de manera extremadamente rápida.

Veo que 2 grandes compañías como Klarna y Whatsapp están utilizando Mnesia como su base de datos en memoria (no estoy seguro de cómo persisten los datos con Mnesia con un límite de 2 GB). Mi pregunta es: ¿por qué las empresas como esas, y pueden ser más no sé, usan Mnesia en lugar de Riak o couchDB, ambos son Erlang, donde ambas bases de datos son más rápidas en bases de datos de memoria, mejor persistencia indolora y muchas más características. ¿Extraño algo aquí?


Por lo que puedo decir, ni Riak ni (Ver nota sobre BitCask en los comentarios) CouchDB admite bases de datos en memoria. Podría estar equivocado con Riak, pero trabajo en CouchDB, así que estoy muy seguro.

Los ingenieros eligen mnesia sobre Riak o CouchDB porque resuelve un problema diferente.

Si son grandes empresas no es un factor en esto.


muy atentamente No existen límites reales para el tamaño de la tabla del disco de mnesia.

  • Mnesia es gratuita a diferencia de riak (para uso comercial).
  • Lea sobre el teorema de la tapa. Puede construir su propia base de datos ca o cp o ap usando plain mnesia como back-end. Pero si tomas un dbms particular, digamos couchdb, está diseñado para ser ap out de la caja. Y no puedes hacerlo, digamos, ca (hasta donde yo sé)