Mnesia disk performance (was RE: multi-attribute mnesia indexes?)

David Gould dg@REDACTED
Thu Jan 4 03:11:26 CET 2001


On Wed, Jan 03, 2001 at 06:35:58PM -0500, Shawn Pearce wrote:
> Klacke <klacke@REDACTED> scrawled:
> > On Wed, Jan 03, 2001 at 12:07:21PM -0800, David Gould wrote:
> > > On Tue, Jan 02, 2001 at 10:05:56PM +0100, Andi Kleen wrote:
> > > 
> > > How hard would it be to add the capability of specifying a path of some
> > > kind to mnesia/dets tables/indexes/logs ets?
> > > 
> > 
> > This would be pretty straightforward, maybe one directory per table
> > (specified in create_table) and one directory for the logs
> 
> As a create_table option?
> 
>     {atomic, ok} = mnesia:create_table(sequence,
> 	            [{disc_copies, [node()]},
> 				 {directory, "/mnesia01"},
> 	             {attributes, record_info(fields, sequence)}])
> 
> My only concern is that not all nodes in a distribued database would
> want to store the tables necesarily at the same directory path.
> (Different drive structures for instance.)

Exactly. It really needs to be a per table/per node option.

> What about making the path always relative to the mnesia directory
> given on the command line to erts?  Then if you want to relocate the
> files of a table to another disk, you can make a symlink in the mnesia
> data directory to point to a directory on the other disk.  So long as
> all nodes have the same structure of their mnesia directory, your safe.

This could work. 

> This is assuming that all OSes have a good notion of symlinks.  I'm no
> Windows guru, but this makes me think that perhaps its not a good idea
> to do with Windows.

Er, except on Windows.
 
> The other option is to make either in schema or a new table that goes
> with schema that records the name of a table, the name of the node
> and the directory path of the storage file for the table.  If mnesia
> could bring the system tables 'schema' and 'table_storage' online,
> and ignore all other tables, the user could move the file, update the
> mnesia system table 'table_storage', and then bring the system up the
> rest of the way.  Oracle does this.  I'm sure other database vendors do
> too.

This is how Postgresql, Sybase, and Informix do it too. As far as I know
it is the "usual way". Of course for Mnesia this would want to be a
replicated table indexed on "node, table".

-dg

-- 
David Gould                                                 dg@REDACTED
SuSE, Inc.,  580 2cd St. #210,  Oakland, CA 94607          510.628.3380
why would you want to own /dev/null? "ooo! ooo! look! i stole nothing!
i'm the thief of nihilism! i'm the new god of zen monks."



More information about the erlang-questions mailing list