рдореЗрдиреНрд╕рд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ: рдПрд░реНрд▓рд╛рдВрдЧ рдкреНрд░рд╛рд░реВрдк, рдкреНрд░рддрд┐рдХреГрддрд┐, рд▓реЗрдирджреЗрди рдЖрджрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЖрджрд┐ рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ -
рдЯреЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ?рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдлрд╝реАрд▓реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рд╣реЛрдЧреАред рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬрдм
mnesia рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝реАрд▓реНрдб рдХреА рд╕реВрдЪреА рдХреЛ
рдмрджрд▓рдирд╛: transform_table (рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓рдирд╛), рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛, рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╢реБрд░реВ (рдкрд░реАрдХреНрд╖рдг) рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдСрдкрд░реЗрд╢рди рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдВред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ рдордиреЗрд╕рд┐рдпрд╛ рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдкрд░ рд╢реЛрдз рдХрд┐рдпрд╛ред рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ:
Mnesia рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдХреЛ рдХрд╕рдХрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдирд╛рдо рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ - рдЕрд░реНрдерд╛рдд рд╕рднреАред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрдврд╝рддреЗ рд╕рдордп, рдорд╛рдиреЗрд╕рд┐рдпрд╛ рдЦреЗрддреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реВрдЪреА рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛, рдЬреЛ рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕реЗ рджреВрд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЦреЗрддреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ mnesia рдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: transform_table (рдЯреИрдм,
рдЕрдирджреЗрдЦрд╛ , рдлрд╝реЗрд▓рд┐рд╕реНрдЯ)ред
рдкреНрд░рд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдкреНрд░рдкрддреНрд░ рддрд╛рд▓рд┐рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рдирдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдмрджрд▓реЗрдВ:
-module(recordtest).
-compile(export_all).
-record(r1 ,{f1,f2}).
-record(r2 ,{f1,f2,f3,f4}).
dbtest()->
mnesia:create_table(r1,[{attributes, record_info(fields, r1)}]).
transform()->
mnesia:transform_table(r1,ignore,record_info(fields, r2), r2).
рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ:
14> mnesia:create_schema([node()]).
18> mnesia:start().
ok
19> recordtest:dbtest().
{atomic,ok}
20> mnesia:dirty_write(r1, {r1,l1,l2}).
ok
21> mnesia:dirty_write(r1, {r1,t1,t2,t3}).
** exception exit: {aborted,{bad_type,{r1,t1,t2,t3}}}
in function mnesia:abort/1
22> mnesia:dirty_write(r1, {r2,l1,l2}).
** exception exit: {aborted,{bad_type,{r2,l1,l2}}}
in function mnesia:abort/1
23> mnesia:dirty_read(r1, l1).
[{r1,l1,l2}]
24> mnesia:dirty_read(r1, l1).
[{r1,l1,l2}]
38> recordtest:transform().
{atomic,ok}
39> mnesia:dirty_read(r1, l1).
[{r1,l1,l2}]
40> mnesia:dirty_write(r1, {r2,l1,l2}).
** exception exit: {aborted,{bad_type,{r2,l1,l2}}}
in function mnesia:abort/1
41> mnesia:dirty_write(r1, {r2,a1,a2,a3,a4}).
ok
49> mnesia:dirty_read(r1, l1).
[{r1,l1,l2}]
50> mnesia:dirty_read(r1, a1).
[{r2,a1,a2,a3,a4}]
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрдм
mnesia:add_table_index(r1,[l4]).
рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЪреМрдереЗ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ
mnesia:add_table_index(r1,[l4]).
- рдПрдХ рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рднреВрд▓рдиреЗ рдХреА рдмреАрдорд╛рд░реА рдХреЛ рд░реЛрдХреЗрдВред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлрд┐рд░ рд╕реЗ рд╣реЛрдЧреАред R1.dcm рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА - рдЙрд╕рдХреЗ рдмрд╛рдж, рдореЗрдиреНрд╕рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЛ рд╕реНрдХреАрдорд╛ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдорд╛рдиреЗрд╕рд┐рдпрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рдлреА рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдбрд┐рдЬрд╛рдЗрди рдЪрд░рдг рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпрд╣ рд╕рдВрдХреНрд░рдордг рдореЛрдб рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдпрд╛ рдПрдХ рдкреБрд░рд╛рдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЛ рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдВ (рдкреБрд░рд╛рдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ) рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдорд╛рдиреЗрд╕рд┐рдпрд╛ рдореЗрдВ рдЯреЗрдмрд▓ рдмрджрд▓рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ - рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред Mnesia рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реИред