2010-07-07 2 views
4

У меня есть сайт с 100 000 уникальными страницами.Создание большой карты сайта в Google App Engine?

(1) Как создать Sitemap для всех этих ссылок? Должен ли я просто перечислить их в большом файле, совместимом с протоколом Sitemap?

(2) Необходимо реализовать это в Google App Engine, где существует ограничение на 1000 пунктов, и все мои отдельные URL-адреса сайтов хранятся в виде отдельных записей. Как решить эту проблему?

ответ

6

Карты сайта должны быть не более 10 МБ и содержать не более 50 000 URL-адресов, поэтому вам нужно как-то разбить его.

Вам понадобится какая-то стратегия очертания. Я не знаю, как выглядят ваши данные, так что теперь, скажем, каждый раз, когда вы создаете объект страницы, вы назначаете ему случайное целое число от 1 до 500.

Затем создайте Sitemap index и выплюните карту сайта ссылка для каждого из значений индекса:

<?xml version="1.0" encoding="UTF-8"?> 
    <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <sitemap> 
     <loc>http://example.appspot.com/sitemap?random=1</loc> 
    </sitemap> 
    <sitemap> 
     <loc>http://example.appspot.com/sitemap?random=2</loc> 
    </sitemap> 
    ... 
    <sitemap> 
     <loc>http://example.appspot.com/sitemap?random=500</loc> 
    </sitemap> 
</sitemapindex> 

Наконец, на странице карты сайта, запрос для страниц и фильтра для вашего случайного индекса. Если у вас 100 000 страниц, это даст вам около 200 URL-адресов на карту сайта.

Немного другая стратегия здесь должна была бы дать каждой странице автоинкрементный числовой идентификатор. Для этого вам нужен объект-счетчик, который заблокирован транзакцией и увеличивается каждый раз при создании новой страницы. Недостатком этого является то, что вы не можете распараллелить создание новых объектов страницы. Положительным моментом является то, что у вас будет немного больше контроля над тем, как выкладываются ваши страницы, поскольку ваша первая карта сайта может быть страницами 1-1000 и т. Д.

+0

awesome! спасибо, что сделал мою жизнь проще :) Я собираюсь закодировать это в ближайшие 30 минут сейчас :) – demos

+0

Хорошая стратегия! Тем не менее использование инкрементного счетчика в App Engine обычно является плохим. –

+0

интересный подход – systempuntoout

0

Вы можете использовать Query Cursors, чтобы обойти 1000 пунктов запроса; хотя даже использование курсоров, вероятно, не полностью решит вашу проблему, так как создание файла Sitemap с 100 000 элементов в нем может легко превысить количество времени, которое может быть разрешено одним запросом. Кроме того, генерация файла Sitemap динамически может легко использовать все или большую часть вашей квоты ресурсов.

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