2010-04-07 14 views
6

Intento comparar Mnesia con bases de datos más tradicionales.¿Dónde se encuentran las mesas en Mnesia?

como yo lo entiendo tablas en Mnesia se pueden localizar a (ver Memory consumption in Mnesia):

  • ram_copies - tablas se almacenan en ets, por lo que no la durabilidad como en el ácido.
  • disc_copies - las tablas se encuentran en ets y dets, por lo que la tabla no puede ser más grande que la memoria disponible? Y si la tabla está fragmentada, la base de datos no puede ser más grande que la memoria disponible?
  • disc_only_copies - las tablas están ubicadas en dets, por lo que no hay almacenamiento en memoria caché ni un peor rendimiento. Y el tamaño de la tabla está limitado al tamaño de dets o la tabla debe estar fragmentada.

Así que si quiero el rendimiento de hacer lecturas desde la RAM y la durabilidad de las escrituras en el disco, el tamaño de las tablas es muy limitado en comparación con un RDBMS tradicional como MySQL o PostgreSQL.

Sé que Mnesia no está destinado a reemplazar los RDBMS tradicionales, pero ¿se puede usar como un RDBMS grande o tengo que buscar otra base de datos?

El servidor que usaré es un VPS con cantidad limitada de memoria, alrededor de 512MB, pero quiero un buen rendimiento de la base de datos.

¿Están disc_copies y los otros tipos de tablas en Mnesia tan limitados como he entendido? ¿No puede la base de datos estar parcialmente en la memoria y una copia completa en el disco?

Respuesta

2

La capacidad de almacenamiento de la base de datos Mnesia para los diferentes tipos de tablas se ha discutido en esta pregunta anterior SO:

What is the storage capacity of a Mnesia database?

donde una gran respuesta ya está disponible.

Obviamente (pero supongo que ya lo ha visto) el documento oficial está disponible en:

http://www.erlang.org/doc/man/mnesia.html

Además, la lectura de la Mnesia FAQ:

11,5 cuántos datos se ser almacenado en Mnesia?

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

En la práctica, su máquina se ralentizará a de una manera lenta antes de alcanzar este límite de .

Por último, las tablas pueden ser Mnesia fragmentada. Esto se discute here y there.

Estos son mis 2p.

+0

Gracias! Según tengo entendido, las tablas estarán limitadas a menos de 512 MB en mi caso, a menos que tenga 'disc_only', que da un mal rendimiento. Entonces mejor buscar otra base de datos entonces. Como solo tengo 512MB de RAM. – Jonas

+1

Esencialmente lo que quiere es almacenar en caché y no, hasta donde yo sé, Mnesia no hace eso por usted. Obviamente es posible implementarlo, pero no está esperando por ti :) –

Cuestiones relacionadas