Le prestazioni del server scendono mentre cerchiamo di ottenere alcuni dati da Tridion 2009 Broker Link_info Tabella utilizzando C # 2.0

StackOverflow https://stackoverflow.com//questions/10674431

Domanda

In realtà ho provato ad implementare Google Markup sulle nostre pagine, in modo che il nostro USERControl renderà sotto il tipo di html sulla sezione della pagina della pagina

<link rel="alternate" hreflang="en-GB" href="http://www.mysite.com/english/index.aspx" />

<link rel="alternate" hreflang="de-DE" href="http://www.mysite.com/de/german/index.aspx" />

<link rel="alternate" hreflang="en-DE" href="http://www.mysite.com/de/english/index.aspx" />

<link rel="alternate" hreflang="ru-RU" href="http://www.mysite.com/ru/russian/index.aspx" />

<link rel="alternate" hreflang="en-RU" href="http://www.mysite.com/ru/english/index.aspx" />

<link rel="alternate" hreflang="fr-FR" href="http://www.mysite.com/fr/french/index.aspx" />

<link rel="alternate" hreflang="it-IT" href="http://www.mysite.com/it/italian/index.aspx" />

<link rel="alternate" hreflang="ja-JP" href="http://www.mysite.com/jp/japanese/index.aspx" />

<link rel="alternate" hreflang="ko-KR" href="http://www.mysite.com/kr/korean/index.aspx" />

<link rel="alternate" hreflang="pt-BR" href="http://www.mysite.com/br/portuguese/index.aspx" />

<link rel="alternate" hreflang="zh-Hans-CN" href="http://www.mysite.com/cn/chinese/index.aspx" />

<link rel="alternate" hreflang="en-US" href="http://www.mysite.com/us/english/index.aspx" />

<link rel="alternate" hreflang="en-GB" href="http://www.mysite.com/uk/english/index.aspx" />

<link rel="alternate" hreflang="en-AU" href="http://www.mysite.com/au/english/index.aspx" />

<link rel="alternate" hreflang="en-AE" href="http://www.mysite.com/ae/english/index.aspx" />
.

In Sopra HTML è possibile trovare questa parte di HTML "/e/english/index.aspx, /au/english/index.aspx ecc." Dalla tabella Broker Link_info, questa implementazione ha funzionato bene fino a quando siamo andati al sito web dal vivo con un broker dal vivo Database, e quando abilitiamo questa funzionalità sul vivo le nostre prestazioni del server sono state uccise a causa dei successi sul database del broker e sembra bloccare la tabella Link_info come il nostro sito Web ha ottenuto 1,5 milioni al giorno, soprattutto funzionalità come segue: .

  • Ogni volta che viene caricata qualsiasi pagina del sito Web, chiama il nostro proxy e le nostre chiamate proxy e proxy il nostro WebService e WebService chiama la nostra procedura SQL che va alla tabella LINK_INFO e tira fuori un elenco di risultato sulla base della procedura Passage è passata alla procedura SQL.
  • La procedura SQL ha restituito il risultato XML viene quindi passato al mio controllo in cui il mio XSLT lo usa e reso sopra pieno HTML.

    Sembra che qualcosa stia sbagliando, ti preghiamo di suggerire che ci può essere in altro modo per ottenere questa funzionalità di cui sopra senza il touching Broker Database. La pagina di scrittura evento o personalizzazione del deployer aiuterebbe?

    Si prega di suggerire !!

    Nota: stiamo usando TRIDION 2009

    Modifica: la procedura SQL Broker è come segue:

    ALTER PROCEDURE [dbo].[GETDataFromLinkInfo] 
    -- Add the parameters for the stored procedure here 
    (@PageID INT) 
    AS 
      BEGIN 
          -- SET NOCOUNT ON added to prevent extra result sets from 
          -- interfering with SELECT statements. 
          SET NOCOUNT ON; 
    
          -- Insert statements for procedure here 
          SELECT DISTINCT [PUBLICATION_ID] AS n, 
                          [URL]            AS u 
          FROM   [LINK_INFO] WITH(NOLOCK) 
          WHERE  Page_ID = @PageID 
                 AND Component_Template_Priority > 0 
                 AND PUBLICATION_ID NOT IN( 232, 481 ) 
          ORDER  BY URL 
          FOR XML RAW ('p'), ROOT ('ps'); 
    
          RETURN 
      END
    
    .

  • È stato utile?

    Soluzione

    Spero che tu abbia qualche codice standard nella tua implementazione, che potresti essere in grado di cercare per un corretto collegamento API di Tridion. Ovviamente, come è stato già dichiarato prima, la direttiva direttamente il Broker di Tridion non è supportato, ma non ha alcun senso per questa funzione di collegamento del nucleo tridon.

    Comunque, cerca il codice che assomiglia a questo:

    <tridion:ComponentLink runat="server" PageURI='tcm:12-1234-64'
                    TemplateURI="tcm:0-0-0" ComponentURI="tcm:12-1233"
                    LinkText="proper Tridion Linking in .NET" TextOnFail="true"/>
    
    .

    Prendi la tua mano su una documentazione Tridon al più presto. Questo è un must quando si lavora con Tridion!

    Buona fortuna!


    .

    Modifica: un campione di codice non testato che dovrebbe essere in grado di scrivere il tuo collegamento multilingue di Google Markup in testa quando l'ID del metodo ha chiamato con la pagina PageSID (senza TCM):

    using System;
    using Tridion.ContentManager;
    using Tridion.ContentManager.CommunicationManagement;
    using Tridion.ContentManager.ContentManagement;
    using Tridion.ContentManager.Templating;
    
    namespace Website.TridionTBBs.Utilities
    {
        /// <summary>
        /// Class exposing utility methods for frequent Tridion item methods.
        /// </summary>
        public static class TridionCustomUtilities
        {
            #region Constants
    
            public const string PageLinkGoogleMarkup = "<link rel=\"alternate\" hreflang=\"{0}\" href=\"{1}\" />\r\n";
    
            #endregion
    
            #region PageLinks
            /// <summary>
            /// This method will return the MultiLingual Google Markup link
            /// Relies on two important Webconfig entries where the publication and culture information is located
            /// <add key="publications" value="26,27,28,29,30,31,32,33,34" />
            /// <add key="tcm:0-26-1" value="en-GB" />
            /// <add key="tcm:0-27-1" value="de-DE" />
            /// etc...
            /// </summary>
            /// <param name="pageID">The PageId is provided from the page</param>
            static void GoogleMarkupPageLink(int pageID)
            {
    
                string[] publicationIDs = ConfigurationManager.AppSettings["publications"].Split(',');
    
                StringWriter s = new StringWriter();
    
                using (PageLink pageLink = new PageLink())
                {
                    for (int i = 0; i < publicationIDs.Count; i++)
                    {
                        Link link = pageLink.GetLink(String.Format("tcm:{0}-{1}", publicationIDs[i], pageID.ToString()));
    
                        if (link != null && link.IsResolved)
                        {
                            string linkUrl = link.Url;
    
                        }
                        string culture = ConfigurationManager.AppSettings[String.Format("tcm:0-{0}-1", publicationIDs[i])];
    
                        Response.Write(String.Format(PageLinkGoogleMarkup, culture, linkUrl));
                    }
                }
            }
            #endregion
        }
    }
    
    .

    Questo richiederebbe di memorizzare le pubblicazioni e la stringa di cultura che appartiene a ciascuna pubblicazione nel web.config. Naturalmente, puoi memorizzarlo da qualche altra parte, ma questo sembrerebbe essere il più veloce e meno stressante per i servizi Web. Ovviamente il cacheggio adeguato deve essere in posizione.

    Ciò eviterebbe di dover scrivere script di implementazione personalizzati o altri metodi di tridioni non standard complicati.

    Altri suggerimenti

    Interrogazione direttamente il database non è supportato, potrebbe invalidare il contratto di supporto e - ovviamente: circonda l'utilizzo della cache di tridion (che può spiegare parzialmente i tuoi problemi di prestazione).Suggerimento: utilizzare l'API di collegamento Tridion per quello che stai cercando di ottenere.

    Ogni volta che si entra in problemi di prestazioni del database, ci sono due approcci che possono fornire sollievo rapido:

      .
    1. Aggiungi ulteriori indici su colonne utilizzate in (ordinamento e filtro di) le tue query
    2. cache i risultati di costose query per una certa quantità di tempo

      In questo caso guarderei sicuramente gli indici, dal momento che sembra che tu possa mancare alcuni indici XML necessari sul tuo database live. Se non sei molto fluente con le operazioni del database, considera anche di mantenere il frammento HTML che si genera in una variabile statica e ri-usalo per le richieste successive. Anche se lo fai solo per dire 5 minuti che finirai per ridurre i colpi sul database da fattori.


      .

      Penso che l'avviso di utilizzo di SQL contro un database Tridion sia stato guidato a casa abbastanza a casa ora. A più lungo termine dovresti assolutamente cercare un modo per ottenere le stesse informazioni attraverso l'API della consegna dei contenuti di Tridion. Sono abbastanza sicuro che anche le stesse informazioni sono facilmente disponibili lì, anche se non sono del tutto sicuro se puoi anche ottenere i risultati come un elenco più rapidamente come puoi farlo qui.

      Anche se potresti finire con problemi di prestazioni simili se si va in quel percorso, almeno torni in un dominio di tridion supportato. Ciò significa che altri membri della comunità di Tridion possono essere in grado di aiutarti.

      La cache sarà sicuramente un'opzione per ridurre i problemi di prestazione una volta che si passa all'utilizzo dell'API Tridion. Alternativa È possibile effettivamente mantenere l'elenco delle lingue / URL come un file separato sul disco e aggiornare ogni volta che viene distribuito qualcosa di rilevante. Un'estensione del deployer di Tridion sarebbe il posto logico per farlo. Se fai una ricerca su Google per "Tridion Deployer Extension", sono abbastanza sicuro che alcuni buoni risultati verranno visualizzati.

    Autorizzato sotto: CC-BY-SA insieme a attribuzione
    Non affiliato a StackOverflow
    scroll top