рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд▓реЙрдиреНрдЪрд┐рдВрдЧ 1 рдирд╡рдВрдмрд░ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдФрд░ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЖрд▓реЛрдЪрдирд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЯреАрдо рдХреЛ рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЕрдЪрд╛рдирдХ рд▓реЛрдб рдЭрдЯрдХреЗ (1000 рд╕реЗ 50,000 рддрдХ, рдЖрджрд┐) рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд╛рдкрдиреАрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдмрд┐рдЫрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ (рд╕реНрдХреЗрд▓-рдЖрдЙрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░) рдХреЗ рдХрд╛рд░рдг рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдордВрдЪ
рд╣рдордиреЗ рдЬрд▓реНрджреА рд╕реЗ рдордВрдЪ рдЪреБрдирд╛ - рдпрд╣ рд╡рд╛рдИрдЖрдИрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдврд╝ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдкрд░рд┐рдЪрд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ
yii рдХреА рдкрд╕рдВрдж рдХреЛ рд▓рдВрдмреА googling, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдЬреИрд╕реЗ
www.yiyramework.com/performance ) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
YM ActiveRecord рдХреЛ ORM рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдЕрдбрд╝рдЪрдиреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣рдореЗрд╢рд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ, рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛ рд╣рдореЗрдВ рдЦреБрдж рд╣реА рдЕрдбрд╝рдЪрди рд▓рдЧрддреА рдереА, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдиреЗ рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдерд╛ рдХрд┐ MySQL (рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛) рдХреЛ рдЬрд▓реНрдж рд╣реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдзрд╛рд░рд╛ рдорд┐рд▓реЗрдЧреА рдЬреЛ рдПрдХ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреГрддрд┐
рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рддреБрд░рдВрдд рдЧрд┐рд░ рдЧрдИред рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг (рдкрд╣рд▓реЗ рд╡рд░реНрд╖) рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рд▓реЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдорд╛рд╕реНрдЯрд░ рдХреА рдирдИ рдЙрддреНрдкрдиреНрди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╡реИрд╕реЗ, рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рд╣реА рдореИрд▓рд╛ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ, рджрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдореА рдХреЗ рд░реВрдк рдореЗрдВ рджрд╛рд╕ред рдФрд░ рдПрдоред рдкреАред)ред рд╣рд╛рдБ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рд▓реЙрдЧ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рдирд┐рд░рдВрддрд░ рдХрд╛рдо рд╕реЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
sharding
рдЪреБрдирд╛рд╡ mysql рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ (рд╢рд╛рд░реНрдХрд┐рдВрдЧ) рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рдореИрдВ рдбреЗрдЯрд╛ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдЗрдХрд╛рдИ (рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (
рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ )ред рд╢рд╛рд░реНрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ "рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ" рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ (рдЪрд╛рд╣реЗ рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ рд╣реЛ)ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдлреИрд▓рд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдерд╛ред рдореИрдВ рдЖрдкрдХреЛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рддрд╛ рд╣реВрдВ, рдЬрд┐рдирд╕реЗ рд╣рдореЗрдВ рдХрдИ рдорд┐рд▓рд┐рдпрди рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ (tbUser) рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдм рд╣рдореЗрдВ рдпрд╣ рднреА рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬрдм рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреВрдЖрдИрдбреА рдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╢реЗрд╖ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирдП рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рд╣рдордиреЗ UID => SERVER_ID рдкреНрд░рдХрд╛рд░ рдХреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рдФрд░ рд╣рдордиреЗ рд░реЗрдбрд┐рд╕ рдХреЛ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ред
Rediska рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд░реЗрдбрд┐рд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд░реЗрдбрд┐рд╕реНрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Yii рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ / рд╕рдВрд░рдХреНрд╖рд┐рдд / рд╡рд┐рдХреНрд░реЗрддрд╛ / рд░рд┐рдбрд┐рд╕реНрдХрд╛ рдореЗрдВ рдФрд░ Rediska.php рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ:
<?php spl_autoload_unregister(array('YiiBase','autoload')); require_once dirname(__FILE__) . '/Rediska/Autoloader.php'; Rediska_Autoloader::register(); spl_autoload_register(array('YiiBase', 'autoload')); class Rediska extends Rediska_Options
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдСрдЯреЛрд▓реИрдб рд╡рд╛рдИ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░реЗрдбрд┐рд╕рдХреЛрд╡рд╕реНрдХреА (рдЕрдиреНрдпрдерд╛ рдСрдЯреЛрд▓реЙрдбреНрд╕ рдмрд╕ рд╕рдВрдШрд░реНрд╖) рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рд╕рдВрд░рдХреНрд╖рд┐рдд / рдШрдЯрдХреЛрдВ / рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛:
<?php require_once dirname(__FILE__).'/../vendor/rediska/Rediska.php'; class RediskaConnection { public $options = array(); private $_rediska; public function init() { $this->_rediska = new Rediska($this->options); } public function getConnection() { return $this->_rediska; } }
... рдФрд░ рдЗрд╕реЗ main.php рдореЗрдВ рдкреНрд▓рдЧ рдХрд┐рдпрд╛
'RediskaConnection'=>array( 'class'=>'application.components.RediskaConnection', 'options'=>array( 'servers' => array( 'server1' => array( 'host'=>'192.168.0.131', 'port'=>'6379', 'timeout'=>'3',
рд╕рднреА Rediska рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╡реЗрдмрд╕рд╛рдЗрдЯред рдПрдХ рдирдП рдШрдЯрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЧреЗрдЯ / рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
Yii::app()->RediskaConnection->getConnection()->set('key', 'value'); echo Yii::app()->RediskaConnection->getConnection()->get('key');
рдбреЗрдЯрд╛рдмреЗрд╕ рддреИрдпрд╛рд░реА
рдЬрдм рд░реЗрдбрд┐рд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рдЫреЛрдЯреА рдкрд░реЗрд╢рд╛рдирд┐рдпрд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИрдВ, рддреЛ рд╣рдо рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде MySQL рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗ:
'shard1' => array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=192.168.0.131;dbname=dbshard', 'username' => 'dbuser', 'password' => 'dbpass', 'autoConnect' => false, 'charset' => 'utf8', ), 'shard2' => array( 'class' => 'CDbConnection', 'connectionString' => 'mysql:host=192.168.0.61;dbname=dbshard', 'username' => 'dbuser', 'password' => 'dbpass', 'autoConnect' => false, 'charset' => 'utf8', ),
рд╢рд╛рд░реНрдкрд┐рдВрдЧ рдХрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрди рдард┐рдХрд╛рдиреЛрдВ рдкрд░ рд╣рдордиреЗ рдХреЗрд╡рд▓ рдЯреЗрдмреБрд▓рд┐рдВрдЧ (tbUser рд╕рд╣рд┐рдд) рдХреЗ рдЕрдзреАрди рд░рдЦрд╛, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдо рднреНрд░рдорд┐рдд рди рд╣реЛрдВред рдЕрдм рдпрд╣ рдкреНрд░рд╛рдкреНрдд рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, CShardedActiveRecord рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ CActiveRecord рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред рдХрд╛рдо рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рджрд┐рдпрд╛ рд╣реИ (), рдЬреЛ рдЕрдм рдирдП рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрд╕реА рдХреЛ SERVER_QUANTITY рджреНрд╡рд╛рд░рд╛ рдпреВрдЖрдИрдбреА рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╢реЗрд╖ рд╣реИ) рдФрд░ рд░реЗрдбрд┐рд╕ рдореЗрдВ рдЧрд┐рдиреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрдЪрдд рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдЖрдИрдбреА рддрдм рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдбрд┐рд╕ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ () рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЖрдИрдбреА рдирдВрдмрд░рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ); рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЦреЛрдЬрдмреАрдХ (), рдЬреЛ рдЕрдм рд╕рд░реНрд╡рд░ рдирдВрдмрд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:
<?php class CShardedActiveRecord extends CActiveRecord { private $_pk = null; private $_connection = null; public function getDbConnection() { if (!is_null($this->_connection)) return $this->_connection; if (is_null($this->_pk)) { $serverName = Yii::app()->params->servers['serverNames'][0]; } else { $serverId = $this->getServerId($this->_pk); $serverName =empty(Yii::app()->params->servers['serverNames'][$serverId]) ? Yii::app()->params->servers['serverNames'][0] : Yii::app()->params->servers['serverNames'][$serverId]; } $this->_connection = Yii::app()->{$serverName}; return $this->_connection; } private function removeConnection() { $this->_connection = null; } private function getRedisKey($key) { return $this->tableName() . '_' . $key; } private function getServerId($pk) { if (is_null($pk)) return false; $serverId = Yii::app()->RediskaConnection->getConnection()->get($this->getRedisKey($pk)); return $serverId; } public function findByPk($pk, $condition = '', $params = array()) { if (!is_integer($pk)) throw new Exception ('primary key must be integer'); $this->_pk = $pk; $this->removeConnection(); return parent::findByPk($pk, $condition, $params); } protected function beforeSave() { if (!parent::beforeSave()) return false; if ($this->getIsNewRecord()) { $key = $this->tableName().'_counter'; $this->id = $this->_pk = Yii::app()->RediskaConnection->getConnection()->increment($key); $serverId = $this->id % Yii::app()->params->servers['serverCount']; $result = Yii::app()->RediskaConnection->getConnection()->set($this->getRedisKey($this->id), $serverId); $this->removeConnection(); } return true; } }
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ ActiveRecord рдмрдирд╛рдпрд╛, рдФрд░ рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдереЗ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ CActiveRecord рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ CShardedActiveRecord рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗред рдУрд╡рд░рд░рд╛рдЗрдб рддрд░реАрдХреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирдореВрдирд╛ рдкреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ Sphinx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреЛрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреЗрдЯрд╛рдкреНрд░реЙрдЗрдбрд░ рднреА рд▓рд┐рдЦрд╛ рдерд╛ рддрд╛рдХрд┐ рд╣рдо рд╡рд╛рдИ рдореЗрдВ рдПрдХреАрдХреГрдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛рдкреНрд░реЛрдЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд░рд▓ рдЖрд╡реЗрд╖рдг рдФрд░ рдЪрдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдордиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдереЗред