Производительность сервера идет вниз, пока мы пытаемся получить некоторые данные из Tridion 2009 Broker Link_info Таблица с использованием C # 2.0

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

Вопрос

На самом деле я попытался реализовать Google Markup на наших страницах, чтобы наш USERCONTROL представьте ниже типа HTML на секции заголовка страниц

<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" />
.

Вверху HTML Вы можете найти эту часть HTML "/ae/english/index.aspx, /au/english/index.aspx и т. Д." От таблицы Broker link_info, эта реализация работала нормально, пока мы пошли на сайт Live Broker База данных, и когда мы включаем эту функциональность в реальном времени нашего сервера производительности, были убиты из-за хитов на брокерской базе данных, и кажется блокировкой таблицы Link_info, поскольку наш веб-сайт получил 1,5 млн. В день, приведенные выше функциональные возможности, как ниже:

  1. всякий раз, когда любая страница веб-сайта загружается, вызывает наш прокси и прокси-вызовы нашего WebService и Webservice вызывают нашу процедуру SQL, которая отправляется в таблицу Science_info и вынимает список результатов на основе PageID, передаваемой в процедуру SQL.
  2. Процедура SQL Возвращенный результат XML, затем передается на мой контроль, где мой XSLT использует его и отображается выше полного HTML.

    Кажется, что-то не так, пожалуйста, предложите, что могут быть и другие способы для достижения этой вышеуказанной функциональности без прикосновения к базе данных брокеров. Писать событие страницы или настройки Deployer поможет?

    Пожалуйста, предложите!

    Примечание: мы используем Tridion 2009

    Редактирование: Брокер SQL Процедура как ниже:

    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
    
    .

Это было полезно?

Решение

Я надеюсь, что у вас есть какой-то стандартный код в вашей реализации, который вы сможете найти для одного правильного соединения API тридиона. Очевидно, как уже говорилось уже ранее, запрос брокера тридиона напрямую не поддерживается, но это также не имеет смысла для этой функции связывания циновки тридона.

В любом случае, ищите код, который выглядит так:

<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"/>
.

Получить руку на некоторую документацию Tridon как можно скорее. Это обязательно при работе с тридией!

Удачи!


Редактирование: непроверенная образец кода, который должен иметь возможность записать многоязычную ссылку Google Markup в голове, когда идентификатор метода вызывается Plied (без 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
    }
}
.

Это потребует от вас хранить публикации и строку культуры, которая принадлежит к каждой публикации в Web.config. Конечно, вы можете хранить это где-то еще, но это, похоже, это было бы самым быстрым и наименее стрессовым для веб-серверов. Конечно, правильное кэширование должно быть на месте.

Это позволяет избежать необходимости писать пользовательские сценарии развертывания или другие сложные нестандартные методы тридиона.

Другие советы

Запрос базы данных непосредственно не поддерживается, может привести к недействительным договора поддержки и - очевидно, - обойти использование кэша тридиона (что может частично объяснить ваши проблемы с производительностью).Предложение: Используйте API соединения тридиона для того, что вы пытаетесь достичь.

Всякий раз, когда вы столкнулись с проблемами производительности базы данных, есть два подхода, которые могут обеспечить быстрое облегчение:

  1. добавить дополнительные индексы на столбцы, которые используются в (сортировка и фильтрация) ваших запросов
  2. кэширует результаты дорогих запросов в течение определенного количества времени

    В этом случае я определенно посмотрю на индексы, поскольку звучит так, как будто вы можете отсутствовать некоторые необходимые индексы XML в вашей живой базе данных. Если вы не очень беглые с операциями базы данных, также рассмотрите возможность сохранения HTML-фрагмента, который вы генерируете в статической переменной и повторно используете его для последующих запросов. Даже если вы просто сделаете это, чтобы сказать, что 5 минут, вы в конечном итоге уменьшили попадания в базу данных факторами.


    Я думаю, что предупреждение об использовании SQL против базы данных Tridion была достаточна домой. В более длительный срок вы должны определенно искать способ получить ту же информацию через API доставки контента Tridion. Я вполне уверен, что такая же информация легко доступна там, хотя я не совсем уверен, что вы также можете получить результаты как список так же быстро, как вы можете сделать это здесь.

    Даже если вы можете в конечном итоге с аналогичными проблемами производительности, если вы идете этот маршрут, вы, по крайней мере, вернемся к поддерживаемую домену тридиона. Это означает, что более подробные члены сообщества Tridion могут помочь вам.

    Кэширование определенно также будет возможность уменьшить проблемы с производительностью после того, как вы перейдете к использованию API Tridion. Альтернатива Вы действительно можете сохранить список языков / URL в качестве отдельного файла на диске и обновлять, что каждый раз, когда что-то актуально развернуто. Расширение до развертывателя тридиона будет логическое место для этого. Если вы выполните поиск Google для «Расширение Tridion Deployer», я совершенно уверен, что некоторые хорошие результаты появятся.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top