MS SQL рдХреЗ рд▓рд┐рдП рдЗрди-рдореЗрдореЛрд░реА рдХреА-рд╡реИрд▓реНрдпреВ рдХреИрд╢


рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?
рдХреИрд╢рд┐рдВрдЧ рдЕрдХреНрд╕рд░ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреАрдврд╝реА рдХреЛ рдХреБрдЫ рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрд╡рд╛ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдХрд┐ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдПрдХрд▓-рдореВрд▓реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рдХрд▓реНрдкред


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдЬреЛ рдХрд┐ рдЕрдХреНрд╕рд░ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ (рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде, рдЖрдорддреМрд░ рдкрд░ рд▓рдЧрднрдЧ 10-15 рд╕реЗрдХрдВрдб), рдФрд░, рдЕрдиреБрд░реЛрдз рдкрд░, рдЖрдИрдбреА рд╢реАрдЯ (рдкреВрд░реНрд╡ рдЖрдИрдбреА) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдЬрд▓реНрджреА рдЙрддреНрдкрдиреНрди рдкрде рджреЗрддрд╛ рд╣реИред 2012, рдкреЗрдЯ = рдореБрдЦреНрдп / рдкрд░реАрдХреНрд╖рдХ / рдЖрдЙрдЯрд▓реЗрдЯ)ред

SQL рд╕рд░реНрд╡рд░ рдкрд░ рд╣реА
CREATE FUNCTION [dbo].[GetPath] ( @ID INT ) RETURNS VARCHAR(512) AS BEGIN DECLARE @__CACHE_ENABLED BIT = 0; -- /  DECLARE @__CACHE_SECTION VARCHAR(50) = 'ggpi'; --  ┬л┬╗  DECLARE @__CACHE_VALUE_OUTDATE_MS INT = 8000; --    DECLARE @Path VARCHAR(512); IF (@__CACHE_ENABLED = 1) BEGIN SET @Path = dbo.CacheGet(@__CACHE_SECTION, @ID); --   IF (@Path IS NOT NULL) RETURN @Path; END; --      -  SET @Path = ItsALongLongWayToTipperary(@ID); IF (@__CACHE_ENABLED = 1) BEGIN DECLARE @resf BIT; SET @resf = dbo.CacheAdd(@__CACHE_SECTION, @ID, @Path, @__CACHE_VALUE_OUTDATE_MS); --        END; RETURN @Path; END 

рдФрд░ рд╣рдо рдЗрд╕ рдЦреБрд╢реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрд╛рддрд╛рд░ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдЬреИрд╕реЗ рдХрд┐ рдХрд░рддреЗ рд╣реИрдВ
 SELECT ID, dbo.GetPath(ID) FROM GROUPS WHERE ID IN (тАж) 

рдЦреИрд░, рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛
 private static readonly ThreadSafeDictionary<string, ThreadSafeDictionary<string, CacheData>> Cache = new ThreadSafeDictionary<string, ThreadSafeDictionary<string, CacheData>>(); [Microsoft.SqlServer.Server.SqlFunction] public static bool CacheAdd(SqlString section, SqlString key, SqlString value, SqlInt32 availms) { ThreadSafeDictionary<string, CacheData> ht; Cache.TryGetValue(section.Value, out ht); if (null == ht) { ht = new ThreadSafeDictionary<string, CacheData>(); Cache[section.Value] = ht; } DateTime dt = DateTime.Now; ht[key.Value] = new CacheData(value.Value, dt.AddMilliseconds(availms.Value)); return true; } [Microsoft.SqlServer.Server.SqlFunction] public static SqlString CacheGet(SqlString section, SqlString key) { ThreadSafeDictionary<string, CacheData> ht; bool b = Cache.TryGetValue(section.Value, out ht); if (!b || null == ht) return SqlString.Null; CacheData sdp; b = ht.TryGetValue(key.Value, out sdp); if (!b) return SqlString.Null; if (sdp.OutDate > DateTime.Now) { return sdp.Value; } else { ht.Remove(key.Value); } return SqlString.Null; } 

рдФрд░ рдЕрдВрдд рдореЗрдВ -

SQLServer'e рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рд╕реЗрдЯ = рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рд╕рдорд╛рдзрд╛рди, рдмрд▓реНрдХрд┐, "рдЕрдЧрд░ рд╣рдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рдЧрд╛рдбрд╝рддреЗ рд╣реИрдВ" рдХреА рд╢реНрд░реЗрдгреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЛрдб рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

рдкреВрд░реНрдг рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдмрд╛рд╣рд░ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдЕрд╕реНрд╡реАрдХрд░рдг: рдПрдордПрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдЯреАрдХред рдбреЗрдЯрд╛ рдХреЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рднрдВрдбрд╛рд░рдг рдХреА рдХрднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

Source: https://habr.com/ru/post/In149563/


All Articles