0

Фактически я попытался реализовать Google Markup на наших страницах, чтобы наш пользовательский контроль отображал ниже тип HTML в разделе заголовка страницыПроизводительность сервера снижается, когда мы пытаемся получить некоторые данные из таблицы трейдеров Tridion 2009 LINK_INFO с использованием C# 2.0

<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 вы можете найти эту часть «/ae/english/index.aspx, /au/english/index.aspx и т.д.» HTML от брокера LINK_INFO таблицы, эта реализация работала нормально, пока мы не пошли в прямом эфире веб-сайт с базой данных LIVE broker, и когда мы включили эту функциональность в LIVE, наша производительность сервера была убита из-за хитов в базе данных брокера, и это похоже на блокировку таблицы LINK_INFO, так как наш сайт имеет 1,5 миллиона в день хитов, выше функциональности работает, как ниже:

  1. Всякий раз, когда какой-либо веб-страница загружается он называет наш прокси-сервер и прокси-вызовы нашего веб-сервиса и вебсервис называет нашу процедуру SQL, которая идет в LINK_INFO таблицу и вынимает список результата на основе PageId перешел к процедуре SQL ,
  2. Результат процедуры SQL, возвращаемый xml, затем передается в мой элемент управления, где мой XSLT использует его и отображает выше полного HTML.

Кажется, что-то ошибочно, пожалуйста, предложите, что для достижения этой выше функциональности может быть другой способ, не касаясь базы данных брокера. Написание страницы СОБЫТИЕ или пользовательская настройка Deployer помогут?

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

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

EDIT: Брокер 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 
+0

Есть ли причина, по которой вы запрашиваете Брокерскую БД с использованием SQL, а не используя API-интерфейс кэширования ссылок? –

+0

Привет, Крис благодарит за ваш ответ, на самом деле у нас будут разные данные для каждой страницы, и мы передаем pageID для брокера, и на основе pageID он возвращает XML из 130 строк (в нашем случае), поскольку у нас есть 130 публикации в тридионе. Как мы можем использовать cachable linking api на этом .. Пожалуйста, предложите –

+0

Любые причины, почему этот вопрос оценивается минусом –

ответ

2

Надеюсь, у вас есть стандартный код в вашей реализации, который вы могли бы найти в качестве подходящего связывания API Tridion. Очевидно, что, как уже было сказано ранее, запрос Tridion Broker напрямую не поддерживается, но также не имеет смысла для этой функции Tridon Core Linking.

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

<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 как можно скорее. Это необходимо при работе с Tridion!

Удачи вам!


EDIT: непроверенной образец кода, который должен быть в состоянии выписать вашу ссылку Google Markup МНОГОЯЗЫЧНОЙ в голове, когда идентификатор методы вызывается с PageId (без ТОГО):

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. Конечно, вы можете сохранить это и в другом месте, но это, пожалуй, будет самым быстрым и наименее напряженным для веб-серверов. Конечно, правильное кэширование должно быть на месте.

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

+0

Привет, Хендрик ... Спасибо, я очень хорошо знаю Tridion Linking API, мой вопрос в том, что это поможет мне в реализации выше, поскольку моя текущая реализация передает pageid (центральная часть) в мою базу данных GoogleSEO и отправляет результат обратно меня и дальше передается моему XSLT, который отображает выше HTML. Теперь я не могу понять, как получить эти данные с помощью Tridion Linking API ... Пожалуйста, предложите это. Спасибо –

+0

Я обновил ответ с помощью примера PageLink. –

+0

Я планирую настроить развертыватель, пожалуйста, см. Мои комментарии ниже в ответе Франя, было бы полезно, если бы вы могли пролить свет на эту реализацию. –

2

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

+0

спасибо .. это было только для тестирования .. и теперь мы переместили эти данные, чтобы разделить базу данных и таблицу. Любая отправная точка, как мы можем использовать Tridion Linking API здесь вместо использования базы данных –

+0

http: //sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_Tridion_2011_SPONE/dlidheading-258866368 –

+0

@ frank-van-puffelen, мы по-прежнему используем Tridion 2009, а также то, что является именем пользователя и паролем для вышеуказанной ссылки. –

2

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

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

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


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

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

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

+0

Спасибо, Фрэнк, я получил это (http: //www.sdltridionworld ,com/articles/sdltridion2011/tutorials/Deployer_Extensions_With_Eclipse_1.aspx), теперь возникает пара вопросов, прежде чем мы будем расширять развертывание, публикация будет замедляться, поскольку мое расширение будет работать для публикации или публикации любой страницы, и оно удалит xml когда выполняется повторная публикация и создается новый xml при публикации, теперь, когда пользователь просматривает эту страницу на веб-сайте, и в этом редакторе публикуется одна и та же страница, тогда это исключает блокировку и развертывание, не создаст xml ... что делать вы предлагаете на этом –

+0

Фрэнк, я планирую настроить развертыватель, который будет настроен для модуля PageDeploy и UnDeploy, один вопрос касается проблемы блокировки, так как всякий раз, когда публикуется одна страница, мой развертыватель создаст xml на сервере, что-то вроде этого имени 123456. xml для этой страницы, и он сохранит узел, например для этой конкретной страницы, и если та же страница будет опубликована с другого языка, она пойдет и проверит на странице xml существует там, если существует, откроет его и добавит узел снова , мой вопрос в том, что, как избежать блокировки здесь! –

+0

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