2009-01-07 21 views

Respuesta

58

bastante grande si su pregunta es "¿cuál es la capacidad de almacenamiento de una base de datos mnesia compuesto por un gran número de mesas disc_only_copies" - que está en gran medida limitada 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 tabla de mnesia de diferentes tipos. Las tablas ram_copies están limitadas por la memoria disponible. disc_copies tablas están limitadas por su dets backend (Hakan Mattsson on Mnesia) - este límite es de 4 Gb de datos en este momento.

Así que la respuesta simple es que la tabla simple disc_copies puede almacenar hasta 4Gb de datos antes de que se encuentren con problemas. (Mnesia en realidad no bloquee si se excede el límite de tamaño en disco - la parte ram_copies de la mesa sigue funcionando, por lo que puede reparar este borrando los datos o hacer otros arreglos en tiempo de ejecución)

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

  • local_content tables. Si la tabla es una tabla local_content, entonces pueden tener diferentes contenidos de en cada nodo en el clúster mnesia, lo que la capacidad de la tabla es 4Gb * <number of nodes>
  • fragmented tables. Mnesia admite partición o fragmentación de tabla configurable por el usuario mediante fragmentos de tabla. En este caso, puede distribuir y redistribuir eficazmente los datos en su tabla sobre una serie de tablas primitivas. Estas tablas primitivas pueden tener su propia configuración, por ejemplo, una tabla ram_copies y el resto disc_only_copies tablas. 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 mesa, y luego tienes que modificar el código de acceso a la tabla de usar mnesia:activity/4 en lugar de mnesia:write y amigos, pero si va esto de antemano que es manejable)
  • external copies Si te gusta vivir en la hemorragia extrema edge, puede aplicar los parches mnesiaex a mnesia y almacenar los datos de su tabla en un sistema externo como Amazon S3 o Tokyo Cabinet. En este caso, la capacidad de la tabla está limitada por el almacenamiento de back-end.
+0

Brillante, excelente respuesta. –

+0

Esto es perfecto. Muchas gracias. – user52543

+4

Hasta donde yo sé, los dets solo pueden manejar archivos de 2GB, no de 4GB, que será el límite para las disc_copies. Hay un Dets experimental de 64 bits que puede manejar archivos mucho más grandes, pero nadie lo ha usado aún en producción. – Happi

5

Según la documentación, esto es 4GB. Sección 11,5

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

+1

¿De todos modos, esto está influenciado por la cantidad de nodos? ¿Distribuirá/fragmentará Mnesia? – user52543

+0

Todavía es el caso a partir de junio de 2017 – amirouche

Cuestiones relacionadas