quickly populating a disc_copy table

Ulf Wiger (AL/EAB) <>
Wed Nov 9 15:42:06 CET 2005


When creating a large disc_copy table in 
mnesia, a performance tip is to first create
it as a ram_copy (no replicas), and fill it 
using dirty writes. After that, 
use change_table_copy_type(Tab, Node, disc_copies),
and perhaps add_table_copy(Tab, OtherNode, disc_copies)
if you want it replicated.

This will be radically (several hundred times) faster 
than creating it as a replicated disc_copy from the 
beginning and then writing one object at a time into it.

Another, really sneaky, way of getting the job done
quickly is to create a disc_copy table, stopping 
mnesia, and then opening <MnesiaDir>/<MyTab>.DCD,
and then using disk_log:log(MyTab, Term) for each 
object you want written. Then close the disk_log,
start mnesia, and then possibly start other mnesia
nodes that have replicas of the table. (*)


(*) The Lifetime Mnesia Warranty will of course be 
    void if you do this.

Perhaps mnesia could provide a reasonably safe 
function for quickly building a large database 
from scratch?

/Uffe



More information about the erlang-questions mailing list