mnesia_frag ????
Rikard Johansson
rikard.johansson@REDACTED
Mon Jan 16 14:01:41 CET 2006
As Ulf says, you should use mnesia:read within the ReadFun,
ReadFun = fun(Db,DBKey) -> mnesia:read({Db, DBKey}) end.
However, if you want "dirty access" you can use the 'sync_dirty'
AccessContext.
mnesia:activity(sync_dirty, ReadFun, [profile_db,777], mnesia_frag).
/Rikard
Ulf Wiger (AL/EAB) wrote:
>
> Don't use mnesia:dirty_read/2 as your read function.
> Try with mnesia:read({Tab, Key}) instead.
>
> Dirty_read() goes directly to the (base-) table, and has no concept of
> mnesia_frag.
>
> /Uffe
>
> ------------------------------------------------------------------------
> *From:* owner-erlang-questions@REDACTED
> [mailto:owner-erlang-questions@REDACTED] *On Behalf Of *Sanjaya
> Vitharana
> *Sent:* den 16 januari 2006 13:32
> *To:* erlang-questions@REDACTED
> *Subject:* mnesia_frag ????
>
> Hi .. !!!
>
> Can any one show me where I'm doing wrong, I'm trying to write a
> single record & retrive it using mnesia_frag.
>
> But it's not working :( for me.
>
> (vmdb@REDACTED)29 <mailto:vmdb@REDACTED)29>>
> mnesia:table_info(profile_db, frag_properties).
> [{base_table,profile_db},
> {foreign_key,undefined},
> {hash_module,mnesia_frag_hash},
> {hash_state,{hash_state,30,15,4}},
> {n_fragments,30},
> {node_pool,[vmdb@REDACTED]}]
> (vmdb@REDACTED)31 <mailto:vmdb@REDACTED)31>> WriteFun1 = fun(DbFile,
> Rec) -> mnesia:write(DbFile, Rec, write)end.
> #Fun<erl_eval.12.2225172>
> (vmdb@REDACTED)32 <mailto:vmdb@REDACTED)32>>
> mnesia:activity(transaction, WriteFun1, [profile_db,
> {profile_db,777,"test",333,1234,5678,1234}], mnesia_frag).
> ok --- Here it shows as it works
> (vmdb@REDACTED)33 <mailto:vmdb@REDACTED)33>> ReadFun = fun(Db,DBKey)
> -> mnesia:dirty_read(Db, DBKey)end.
> #Fun<erl_eval.12.2225172>
> (vmdb@REDACTED)34 <mailto:vmdb@REDACTED)34>>
> mnesia:activity(transaction, ReadFun, [profile_db,777], mnesia_frag).
> [] -- but empty list given when try to retrive
> (vmdb@REDACTED)35 <mailto:vmdb@REDACTED)35>>
> mnesia:dirty_first(profile_db).
> '$end_of_table' --- since the db should contains only 2 records, I
> tried this. but :(
> (vmdb@REDACTED)36 <mailto:vmdb@REDACTED)36>>
>
>
> Furthermore I have used below, to create the DB.
>
> -record(profile_db, {mobile_no, prof_details, type,
> last_update_date, first_creation_date, fax_no}).
>
> Res = mnesia:create_table(profile_db,[
> {disc_copies, NodeList},
> {type, ordered_set},
> {index, [type, last_update_date,
> first_creation_date, fax_no]},
> {frag_properties, [{n_fragments, 30}]},
> {attributes, record_info(fields, profile_db)}
> ]),
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------
> consider the mnesia:info() result below, and note that the
> profile_db_frag2: with 1 records occupying 95 words of mem
> disc_copies = [schema]
> but I have used {disc_copies, NodeList}
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
> (vmdb@REDACTED)43 <mailto:vmdb@REDACTED)43>>
> mnesia:info().
> ---> Processes holding locks <---
> ---> Processes waiting for locks <---
> ---> Participant transactions <---
> ---> Coordinator transactions <---
> ---> Uncertain transactions <---
> ---> Active tables <---
> profile_db : with 0 records occupying 70 words of mem
> profile_db_frag2: with 1 records occupying 95 words of mem
> ......
> profile_db_frag13: with 1 records occupying 95 words of mem
> .......
> profile_db_frag29: with 0 records occupying 70 words of mem
> profile_db_frag30: with 0 records occupying 70 words of mem
> schema : with 31 records occupying 4380 words of mem
> ===> System info in version "4.2.3", debug level = none <===
> opt_disc. Directory "/usr2/omni_vm_prof/db/vmdb" is used.
> use fallback at restart = false
> running db nodes = [vmdb@REDACTED]
> stopped db nodes = []
> master node tables = []
> remote = []
> ram_copies = [profile_db,
> profile_db_frag10,
> profile_db_frag11,
>
> ...
>
> profile_db_frag8,
> profile_db_frag9]
> disc_copies = [schema]
> disc_only_copies = []
> [{vmdb@REDACTED,disc_copies}] = [schema]
> [{vmdb@REDACTED,ram_copies}] = [profile_db_frag30,
> profile_db_frag29,
>
> .....
>
> profile_db_frag3,
> profile_db_frag2,
> profile_db]
> 12 transactions committed, 5 aborted, 0 restarted, 0 logged to disc
> 0 held locks, 0 in queue; 0 local transactions, 0 remote
> 0 transactions waits for other nodes: []
> ok
> (vmdb@REDACTED)44 <mailto:vmdb@REDACTED)44>>
>
>
> I have confused with the results, can anyone explane this ??
>
> Thanks in advance.
>
> Sanjaya Vitharana
More information about the erlang-questions
mailing list