рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░
рдЕрдм рдпреВрдирд┐рдЯ рдФрд░ рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА рд╣реИред рд╕рднреА рдЪреБрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
рдЯреАрдбреАрдбреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ,
рдЬреЗрдореАрдЯрд░ / рдПрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗ рдмрд╣реБрдд рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди / рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рддреАрд╡реНрд░ рдирд╣реАрдВ рд╣реИ - рдереНрд░рдХреНрд╕ рдореЙрдХ, рдЗрд╕рдХрд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ рдФрд░ рднреВрд▓ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореБрдЭреЗ 1-2-5-10 рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐
рд▓рд╛рдЦреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ?

рдЕрдзрд┐рдХрд╛рдВрд╢ (php) рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реЗ рдЬрдм рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрдирд╛рд╡ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрдИ рдЬреБрдбрд╝рдирд╛рд░ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ (
ab / jmeter ) рдмрд▓ рджреЗрдВред рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЦреЗрд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИрдВ, рдФрд░ рд╡рд┐рдзрд┐ рдЦреБрдж рдореЗрд░реЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ - рдПрдХ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реНрдерд┐рд░рддрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрдХрд╡рд╛рд╕-рдХреЛрдб рдХреЛ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рдЗрд╕реЗ рдЬрд▓реНрджреА рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрдж рд╣реА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╣рд░ рдХреЛрдИ рдпрд╛ рддреЛ рдкрд╣рд▓рд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдЧрд╛ рдпрд╛ рдПрдХ рдирдпрд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред generilkuред
рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЬреБрдбрд╝рдирд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдЕрдм рдХрдо рдЖрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдкрд░ рдХрдИ рдмрд╕ рд╣рдереМрдбрд╝рд╛ (рдХрд▓реНрдкрдирд╛ 15-25 рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рдкреАрдврд╝реА рдХреА рдкрдЯрдХрдерд╛ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рд╣реА рдЕрд╣рдо, рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛)ред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ, рддреЛ рдореИрдВрдиреЗ рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдЯрдХреНрдХрд░ рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди
рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдореИрдВ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдореЗрдВ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде рдХреБрдЯрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рднреА, рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдХрд░рдг рдорд┐рд▓рд╛, рд╣рдордиреЗ рдЗрд╕реЗ рдХрд╛рдо рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
Databene Benerator - FTW!
рдЬреЗрдирд░реЗрдЯрд░ (рд╣рд╛рдБ, рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рдирд╛рдо) 2 рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: рдбреЗрдЯрд╛ рдЬрдирд░реЗрд╢рди рдФрд░ рдПрдиреЛрдорд┐рдиреЗрд╢рдиред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╣реА рдФрд░ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИ (рдЙрддреНрдкрд╛рджрди рд╕реЗ рдбрдВрдк рдХрд╛ рд╕рдВрд╢реЛрдзрди, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдФрд░ рдЙрдирдХреЗ рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рдирдВрдмрд░ рдореЗрдВ рдХрдЯреМрддреА рд╣реЛ рд╕рдХреЗ)ред
рддреБрд▓рд╕рд╛ рдПрдХ
XML рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ
CSV / XML рдмрдирд╛рдиреЗ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
- рдУрд░реЗрдХрд▓
- рдбреАрдмреА 2
- рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░
- MySQL
- PostgreSQL
- HSQL
- рдПрдЪ 2
- рдбрд░реНрдмреА
- Firebird
рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЬрдирд░реЗрдЯ рдЯреИрдЧ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреМрди рд╕реА рдЗрдХрд╛рдЗрдпрд╛рдБ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ рдХрд┐рд╕ рддрд░реАрдХреЗ рд╕реЗред рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред
рдпрд╣ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ рд╣реИ, рдореИрдВ рдЗрд╕ рдЯреВрд▓ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рд╕рднреА рдорд▓реНрдЯреА-рдкреЗрдЬ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░рд╛ рдХрд╛рдо рд╢рд╛рд╕реНрддреНрд░реАрдп рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд░реБрдЪрд┐ рд░рдЦрдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рдореИрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдХ рдЪрд░рдгрдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ :)
рдкреИрдХрд┐рдВрдЧ / рд╕реНрдерд╛рдкрдирд╛
рдЙрддреНрдкрд╛рдж рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ
~ / .bash_profile рдЬреЛрдбрд╝реЗрдВ:
export BENERATOR_HOME=/path/to/unpacked/benerator
export PATH=$PATH:$BENERATOR_HOME/bin
рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ:
chmod a+x $BENERATOR_HOME/bin/*.sh
рдкрд╣рд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдгреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдЗрдП рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде 5 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдВрд╕реЛрд▓ рджреЗрдВред
рдПрдХ рдордирдорд╛рдирд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде benerator.xml рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
benerator.xml <?xml version="1.0" encoding="UTF-8"?> <setup xmlns="http://databene.org/benerator/0.7.6" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://databene.org/benerator/0.7.6 benerator-0.7.6.xsd" defaultEncoding="UTF-8" defaultDataset="US" defaultLocale="us" defaultLineSeparator="\n"> <bean id="dtGen" class="DateTimeGenerator"> <property name='minDate' value='2013-01-01'/> <property name='maxDate' value='2013-01-31'/> <property name='dateGranularity' value='00-00-02' /> <property name='dateDistribution' value='random' /> <property name='minTime' value='08:00:00' /> <property name='maxTime' value='17:00:00' /> <property name='timeGranularity' value='00:00:01' /> <property name='timeDistribution' value='random' /> </bean> <import domains="person"/> <generate type="user" count="5" consumer="ConsoleExporter"> <variable name="person" generator="PersonGenerator"/> <attribute name="first_name" script="person.givenName"/> <attribute name="last_name" script="person.familyName"/> <attribute name="birthdate" script="person.birthDate"/> <attribute name="email" script="person.email"/> <attribute name="gender" script="person.gender" map="'MALE'->'true','FEMALE'->'false'"/> <attribute name="created_at" type="timestamp" generator="dtGen"/> </generate> </setup>
рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
benerator.sh ./benerator.xml рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЛ рдХрдВрд╕реЛрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм, рдЪрд▓реЛ
benerator.xml рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди
рдХрд░реЗрдВ рдФрд░
рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реБрдЖред
- .. .
- DateTimeGenerator dtGen. . property , .
- . , PersonGenerator import, DateTimeGenerator .
- user ConsoleExporter ( , CSVExporter). 5 .
- , . , . , generate. .
- . , script person, PersonGenerator . , . map. .. , "" , , .
рд▓рд┐рдкрд┐ рдХреА рдЬрдЯрд┐рд▓рддрд╛
рдЖрдкрдиреЗ рдЬреЛ рдКрдкрд░ рджреЗрдЦрд╛ рд╡рд╣ рд╕рднреА рдЕрджреНрднреБрдд рдФрд░ рд╕реБрдВрджрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЛрдорд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдХрд╣рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рдПрдХ рдЯреИрдЧ рддрд╛рд▓рд┐рдХрд╛, рд╕рд╛рде рд╣реА user_refs_tag рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрджрдиреБрд╕рд╛рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЯреИрдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдХрдиреЗрдХреНрд╢рди n рд╕реЗ n рд╣реЛрдЧрд╛ ред
рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ (рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рд┐рдд!) рдЯреИрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЯреИрдЧ рд╕реНрд╡рдпрдВ рдкреНрд░рдмрдВрдзрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рд╕реАрдПрд╕рд╡реА рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдереЗ, рд╣рдореЗрдВ рдЗрд╕ рдлрд╛рдЗрд▓ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рдорд╛рд░реА рдЧреЛрд▓рд┐рдпрд╛рдБ рдмрдирд╛рдПрдБ:
psql create table users (id serial primary key, first_name varchar not null, last_name varchar not null, birthdate date not null, email varchar not null, gender boolean not null, created_at timestamp not null); create table tags (id serial primary key, name varchar not null, weight numeric not null, active boolean not null); create table user_refs_tag (user_id integer not null references users (id), tag_id integer not null references tags (id), primary key (user_id, tag_id));
рд╣рдо рдЯреИрдЧ.ent.csv рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ , рдЬреЛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдиреЗ рдХрдерд┐рдд рддреМрд░ рдкрд░ рд╣рдореЗрдВ рднреЗрдЬреЗ рдереЗ:
tags.ent.csv name,weight,active Tag 1,1.0,true Tag 2,1.05,true Tag 3,0.95,true Tag 4,1.0,true Tag 5,1.06,true Tag 6,1.04,true Tag 7,1.05,true Tag 8,1.1,true Tag 9,1.01,true Tag 10,0.8,true
Benerator.xml рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ :
benerator.xml <?xml version="1.0" encoding="UTF-8"?> <setup xmlns="http://databene.org/benerator/0.7.6" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://databene.org/benerator/0.7.6 benerator-0.7.6.xsd" defaultEncoding="UTF-8" defaultDataset="US" defaultLocale="us" defaultLineSeparator="\n"> <import domains="person"/> <import platforms="db" /> <database id="db" url="jdbc:postgresql://127.0.0.1:6432/benerator" driver="org.postgresql.Driver" user="benerator" password="123" schema="public" catalog="benerator" /> <memstore id="memstore"/> <setting name="min_tags_per_user" value="1"/> <setting name="users_count" value="5"/> <execute target="db" type="sql" onError="warn"> truncate users cascade; truncate tags cascade; </execute> <bean id="dtGen" class="DateTimeGenerator"> <property name='minDate' value='2013-01-01'/> <property name='maxDate' value='2013-01-31'/> <property name='dateGranularity' value='00-00-02' /> <property name='dateDistribution' value='random' /> <property name='minTime' value='08:00:00' /> <property name='maxTime' value='17:00:00' /> <property name='timeGranularity' value='00:00:01' /> <property name='timeDistribution' value='random' /> </bean> <bean id="tags_seq" spec="new DBSequenceGenerator('tags_id_seq', db)" /> <bean id="users_seq" spec="new DBSequenceGenerator('users_id_seq', db)" /> <bean id="tags_counter" spec="new IncrementalIdGenerator(1)" /> <iterate type="tags" source="tags.ent.csv" consumer="db,memstore,ConsoleExporter"> <id name="id" type="long" generator="tags_seq" /> <variable name="tags_count" generator="tags_counter" /> <setting name="max_tags_per_user" value="{tags_count}"/> </iterate> <echo>{ftl:Total tags count: ${max_tags_per_user}}</echo> <generate type="users" count="{users_count}" consumer="db,ConsoleExporter"> <variable name="person" generator="PersonGenerator"/> <id name="id" type="long" generator="users_seq" /> <attribute name="first_name" script="person.givenName"/> <attribute name="last_name" script="person.familyName"/> <attribute name="birthdate" script="person.birthDate"/> <attribute name="email" script="person.email"/> <attribute name="gender" script="person.gender" map="'MALE'->'true','FEMALE'->'false'"/> <attribute name="created_at" type="timestamp" generator="dtGen"/> <variable name="tags_per_user_count" type="int" min="{min_tags_per_user}" max="{max_tags_per_user}" distribution="random" /> <generate type="user_refs_tag" count="{tags_per_user_count}" consumer="db,ConsoleExporter"> <variable name="tag" source="memstore" type="tags" distribution="random" unique="true" /> <attribute name="tag_id" script="tag.id"/> <attribute name="user_id" script="{users.id}"/> </generate> </generate> </setup>
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░, рдЙрд╕реА рд╕рдордп, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВрдЧреЗред рдЧреМрд░ рдХреАрдЬрд┐рдП рдХреНрдпрд╛ рд╣реБрдЖред
- . , catalog, .
/>
- рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдкреВрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХреБрдЫ рдордзреНрдпрд╡рд░реНрддреА рдбреЗрдЯрд╛ рдбрд╛рд▓реЗрдВрдЧреЗ, рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВред рдпрд╛рджрдЧрд╛рд░ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдкреВрд▓ рд╕реБрд▓рдн
- , .
DBSequenceGenerator . , .
, IncrementalIdGenerator - , , , . 1 - .
рдХреБрдЫ рдирдпрд╛ DBSequenceGenerator . , .
, IncrementalIdGenerator - , , , . 1 - .
DBSequenceGenerator . , .
, IncrementalIdGenerator - , , , . 1 - .
- . csv, tags, , csv . .
consumer - db memstore . .
рд▓реВрдк рдХреЗ рдЕрдВрджрд░, рдореИрдВ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ tags_count рдЪрд░ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬреЛ IncrementalIdGenerator рдЬрдирд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, IncrementalIdGenerator рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЗрд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдЯреИрдЧ рд╕реАрдПрд╕рд╡реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдереЗред рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рдЯреИрдЧ_рдХрд╛рдЙрдВрдЯ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ max_tags_per_user рдХреЛ рд╕реНрдерд╛рдиреАрдп tags_count рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдм рд╕рднреА рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред
- . , , {ftl:}. , .
users , (distribution) min max. . , tags_per_user_count , count .
user_refs_tag. , , tags_per_user_count. , , , ( IncrementalIdGenerator csv?) ( 11 , 10, 11 ).
user_refs_tag tags memstore tag. , (distribution), (unique). , , .
user_refs_tag , user_id - users. :)
users , (distribution) min max. . , tags_per_user_count , count .
user_refs_tag. , , tags_per_user_count. , , , ( IncrementalIdGenerator csv?) ( 11 , 10, 11 ).
user_refs_tag tags memstore tag. , (distribution), (unique). , , .
user_refs_tag , user_id - users. :)
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:
psql benerator=> select * from tags; id | name | weight | active ----+--------+--------+-------- 1 | Tag 1 | 1 | t 2 | Tag 2 | 1.05 | t 3 | Tag 3 | 0.95 | t 4 | Tag 4 | 1 | t 5 | Tag 5 | 1.06 | t 6 | Tag 6 | 1.04 | t 6 | Tag 7 | 1.05 | t 8 | Tag 8 | 1.1 | t 9 | Tag 9 | 1.01 | t 10 | Tag 10 | 0.8 | t (10 rows)
benerator=> select * from users; id | first_name | last_name | birthdate | email | gender | created_at ---+------------+-----------+------------+------------------------------------+--------+--------------------- 1 | Francis | Gardner | 1946-08-22 | francis_gardner@hotmail.com | t | 2013-01-01 09:46:57 2 | Todd | Robinson | 1911-07-24 | todd_robinson@william-thompson.org | t | 2013-01-21 14:42:54 3 | Jamie | Lyons | 1933-08-14 | jamielyons@owwybni.net | f | 2013-01-29 11:23:07 4 | Ronald | West | 1989-03-24 | ronald_west@yahoo.com | t | 2013-01-11 15:43:42 5 | Vanessa | Pope | 1942-05-27 | vanessapope@apc.de | f | 2013-01-05 12:28:43 (5 rows)
benerator=> select * from user_refs_tag; user_id | tag_id ---------+-------- 1 | 4 1 | 10 1 | 6 1 | 7 1 | 5 1 | 2 1 | 3 1 | 1 1 | 9 1 | 8 2 | 5 2 | 8 3 | 7 3 | 10 3 | 3 3 | 2 3 | 4 3 | 1 3 | 5 3 | 8 3 | 6 4 | 1 4 | 9 4 | 4 5 | 6 (25 rows)
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдВрдХреЗрддрд┐рдХ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдм рдЖрдкрдиреЗ рдЬрдирд░реЗрдЯрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:
рдЦреБрдж рдХреЗ рдЬрдирд░реЗрдЯрд░ <bean id="special" class="com.my.SpecialGenerator" />
рдПрдХ рдЪрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: <attribute name="ean_code" source="db" selector="{{ftl:select ean_code from db_product where country='${shop.country}'}}"/>
рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛: <generate type="db_role" count="10" consumer="db" /> <generate type="db_user" count="100" consumer="db"> <reference name="role_fk" targetType="db_role" source="db" distribution="random"/> </generate>
рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рд╡рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:city.ent.csv :
name,population New York,8274527 Los Angeles,3834340 San Francisco,764976
<generate type="address" count="100" consumer="ConsoleExporter"> <variable name="city_data" source="cities.ent.csv" distribution="weighted[population]"/> <id name="id" type="long" /> <attribute name="city" script="city_data.name"/> </generate>
рдпрд╣ рд╕рдм рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдПрдХ рдордВрдЪ рднреА рд╣реИ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдореГрдд рдЕрдВрдд рдореЗрдВ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдореМрдХрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЫреЛрдбрд╝рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдХрд░рдг рдмрд╕ рдЕрдкреВрд░рдгреАрдп рд╣реИред
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рд╕рднреА рдкреАрдврд╝реА рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░, рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдПрдХ рд╣реА рд╢реИрд▓реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рдирдХреАрдХреГрдд рдФрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред рдХрд╛рдо рдХреА рдПрдХ рдирдИ рдЬрдЧрд╣ рдкрд░ рдЖрдХрд░, benerator.xml рдХреЛ рджреЗрдЦрдХрд░, рдЖрдк рддреБрд░рдВрдд рдЦреБрдж рдХреЛ рджреВрд╕рд░реА рдмрд╛рдЗрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рд╕реЗ рд░рд╛рд╣рдд рджреЗрддреЗ рд╣реИрдВред
- рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЬрд╛рдирдиреЗ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдбреАрдмреАрдП рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдЖрдк xml рдФрд░ csv рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЧрддрд┐ + рд▓рдЪреАрд▓рд╛рдкрди + рдкрд░рд┐рд╡рд░реНрддрди рджрд░ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдпрд╛ рджрд┐рдирд╛рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдмрд╣реБрддрд╛рдпрддред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬрдирд░реЗрдЯрд░ рдХреА реиреж% рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк 20реж% рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирдВрдЧреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рдкрдХреНрд╖:
- рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╡рд┐рд╖рдп рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдзреНрдпрдпрди рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛ред
- рдХрдордЬреЛрд░ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдорд░реНрдердиред RuNet рдореЗрдВ, рдореИрдВ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛; рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░, рдмрд╣реБрдд рдХрдо рд╣реИрдВред
- рдУрд╡рд░рд╣реЗрдбред рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУред рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХрд╛ рдЦрддрд░рд╛ рд╣реИред