Pregunta

Algunos lugares indican un período de 2 GB.Algunos lugares indican que depende de la cantidad de nodos.

¿Fue útil?

Solución

Bastante grande si su pregunta es "¿cuál es la capacidad de almacenamiento de una base de datos mnesia compuesta por una gran cantidad de disc_only_copies tablas": está limitado en gran medida por el espacio disponible en el disco.

Una pregunta más fácil de responder es cuál es la capacidad máxima de una única mesa mnesia de diferentes tipos. ram_copies Las tablas están limitadas por la memoria disponible. disc_copies Las tablas están limitadas por su dets back-end (Hakan Mattsson sobre Mnesia) - este límite es de 4 Gb de datos en este momento.

Entonces la respuesta simple es así de simple. disc_copies La tabla puede almacenar hasta 4 Gb de datos antes de que surjan problemas.(Mnesia en realidad no falla si excede el límite de tamaño en el disco: la parte ram_copies de la tabla continúa ejecutándose, por lo que puede reparar esto eliminando datos o haciendo otros arreglos en tiempo de ejecución.)

Sin embargo, si consideramos otras características de la mnesia, la respuesta es más complicada.

  • local_content mesas.Si la mesa es un local_content tabla, luego puede tener diferentes contenidos en cada nodo en el clúster de mnesia, por lo que la capacidad de la tabla es4Gb * <number of nodes>
  • tablas fragmentadas.Mnesia admite la partición o fragmentación de tablas configurables por el usuario mediante fragmentos de tablas.En este caso, puede distribuir y redistribuir eficazmente los datos de su tabla en varias tablas primitivas.Cada una de estas tablas primitivas puede tener su propia configuración, digamos una tabla ram_copies y el resto tablas disc_only_copies.Estas tablas primitivas tienen los mismos límites de tamaño que se mencionaron anteriormente y ahora la capacidad efectiva de la tabla fragmentada es 4Gb * <number of fragments>. (Lamentablemente, si fragmenta su tabla, tendrá que modificar su código de acceso a la tabla para usar mnesia:activity/4 en lugar de mnesia:write y amigos, pero si planificas esto con anticipación es manejable)
  • copias externas Si te gusta vivir al límite, puedes aplicar el mnesiaex parches a mnesia y almacenar los datos de su tabla en un sistema externo como amazon s3 o Gabinete de Tokio.En este caso, la capacidad de la mesa está limitada por el almacenamiento backend.

Otros consejos

Esta respuesta contradice las dos respuestas existentes cuando se trata de tablas de tipo disc_copies.Primero, permítanme aclarar algunos puntos generales:

  • Una tabla de mnesia de tipo ram_copies solo está limitado por la RAM disponible (excepto si estás en una máquina de 32 bits).Los datos se almacenan en una tabla ETS.
  • Una tabla de mnesia de tipo disc_only_copies se almacena en una tabla Dets.Las tablas detalladas están limitadas a 2 GB debido a limitaciones en el formato de archivo.
  • La forma obvia de eludir ese límite es crear más tablas, posiblemente a través de fragmentación de tablas.
  • El esquema también se almacena en una tabla Dets, por lo que la información que describe todas las tablas existentes también está limitada a 2 GB.Sin embargo, es probable que te encuentres con otros límites antes de alcanzar ese.
  • Una tabla de mnesia de tipo disc_copies está almacenado ambos en RAM y en disco, por lo que está limitado por la RAM disponible, ¿y quizás por algo más?

Voy a intentar mostrar a continuación que hay No límite específico impuesto por Mnesia al tamaño de un disc_copies mesa.Sin embargo, tenga en cuenta que muchos programadores de Erlang creen que disc_copies las tablas están limitadas a 2 GB.Eso se afirma en la respuesta aceptada a esta pregunta, que al momento de escribir este artículo supera esta respuesta por un factor de 7.


disc_copies pasó de dets a disk_log en 2001

Se cree comúnmente que disc_copies Las mesas están respaldadas por mesas Dets.Hasta donde puedo decir, este fue el caso hasta Erlang/OTP R7B-4 (lanzado el 30 de septiembre de 2001).De el LÉAME:

  -- mnesia -----------------------------------------------------------------

        OTP-3712 - Speed/load improvements disc_copies tables are not 
                   implemented with dets anymore.

Mira a la diferencia para más detalles, en particular mnesia_lib.erl y mnesia_loader.erl.


Fuentes que admiten dets y un límite de 2/4 GB

la respuesta de Arquelao se basa en http://erlang.org/~hakan/mnesia_consumption.txt, lo que explica que disc_copies las tablas residen en tablas ets y dets.Sin embargo, mirando el índice del directorio, vemos que este documento tiene fecha de 1999:

[TXT] mnesia_consumption.txt  26-Oct-1999 10:57    10k  

Tiene sentido que diga esto, ya que fue escrito dos años antes del cambio.

La respuesta de Ray Boosen se basa en Preguntas frecuentes sobre Erlang:

11.5 ¿Cuántos datos se pueden almacenar en Mnesia?

Dets utiliza enteros de 32 bits para desplazamientos de archivos, por lo que la tabla mnesia más grande posible (por ahora) es de 4 Gb.

En la práctica, su máquina se ralentizará mucho antes de alcanzar este límite.

Las preguntas frecuentes han estado diciendo que desde al menos enero de 2001 (ver la primera copia en la Wayback Machine).Eso significa que esta entrada de preguntas frecuentes data de antes del cambio a disk_log y no se ha actualizado durante mucho tiempo.(De todos modos, el límite de tamaño de la tabla Dets es 2 GB, no 4 GB). una solicitud de extracción para las preguntas frecuentes.


Fuentes que apoyan límites más altos

El capítulo Aprende algo de Erlang sobre Mnesia dice:

copias_ram
Esta opción hace que todos los datos se almacenen exclusivamente en ETS, es decir, solo en memoria.La memoria debería limitarse a 4 GB teóricos (y prácticamente a unos 3 GB) para máquinas virtuales compiladas en 32 bits, pero este límite se amplía aún más en máquinas virtuales de 64 bits, suponiendo que haya más de 4 GB de memoria disponible.

copias_solo_disco
Esta opción significa que los datos se almacenan únicamente en DETS.Solo disco y, como tal, el almacenamiento está limitado al límite de 2 GB de DETS.

copias_disco
Esta opción significa que los datos se almacenan tanto en ETS como en el disco, es decir, tanto en la memoria como en el disco duro.Las tablas disc_copies no están limitadas por los límites de DETS, ya que Mnesia utiliza un sistema complejo de registros de transacciones y puntos de control que permiten crear una copia de seguridad de la tabla en la memoria basada en disco.

No estoy seguro de cuándo se escribió esto, pero el texto anterior existe en el primera copia de Wayback Machine, de abril de 2012.

En una publicación sobre preguntas de erlang titulada "golpear a la mnesia hasta matarla (era RE:Usando 4 Gb de RAM con Erlang VM)", del 7 de noviembre de 2005, Ulf Wiger escribe:

En una máquina de 16 GB, puedes:

  • Ejecute 6 millones de procesos simultáneos (mediante el uso de Erlang: Hibernate, en realidad pude ejecutar 20 millones - Tiempo de desove:6.3 EE. UU., Tiempo de paso del mensaje:5.3 nosotros, y tenía 1.8 GB de sobra).

  • Popular la mnesia con al menos 12 GB de datos, pero piense en cómo desea representarlo, ya que el tamaño de la palabra de 64 bits explota un poco las cosas.

  • mantenga una tabla disc_copy de más de 10 GB en mnesia.Los tiempos de carga y el costo de volcado de registro parecen aceptables (10 minutos de carga, el vertido lleva un tiempo pero funciona en segundo plano bastante bien).

Conclusiones

La confusión parece surgir de información faltante o desactualizada de fuentes oficiales:

  • La documentación de Mnesia no menciona ningún límite de tamaño de tabla.
  • Las preguntas frecuentes de Erlang dicen que Mnesia está sujeta a un límite de tamaño de Dets de 4 GB, pero esta respuesta se escribió antes de que cambiaran los dets a disk_log.
  • El único otro documento en el dominio erlang.org es el documento de Håkan Mattsson, que data de antes del cambio de disk_log.

LYSE parece ser la primera fuente "autorizada" que menciona disc_copies las mesas no están sujetas al límite de tamaño de la mesa Dets.

Según la documentación, esto es de 4 GB. Sección 11.5

http://erlang.org/faq/mnesia.html

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