2010-07-07 19 views
4

J'ai un site avec environ 100 000 pages uniques.Création d'un sitemap volumineux dans Google App Engine?

(1) Comment créer un sitemap pour tous ces liens? Devrais-je les énumérer à plat dans un grand fichier compatible avec le protocole Sitemap?

(2) Vous devez implémenter cette fonctionnalité sur Google App Engine lorsqu'il existe une limite de requête de 1 000 éléments, et que toutes les URL de mon site sont stockées séparément. Comment puis-je résoudre ce problème?

Répondre

6

Les cartes du site ne doivent pas dépasser 10 Mo et ne doivent pas contenir plus de 50 000 URL, vous devez donc les décomposer d'une manière ou d'une autre.

Vous aurez besoin d'une stratégie de fragmentation. Je ne sais pas à quoi ressemblent vos données, donc pour l'instant disons que chaque fois que vous créez une entité de page, vous lui attribuez un entier aléatoire entre 1 et 500.

Ensuite, créez un Sitemap index et crachez un sitemap lien pour chacune de vos valeurs d'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> 

Enfin, sur votre page plan du site, recherche pour les pages et le filtre pour l'index aléatoire. Si vous avez 100 000 pages, cela vous donnera environ 200 URL par sitemap.

Une stratégie légèrement différente ici serait de donner à chaque page un ID numérique auto-incrémenté. Pour ce faire, vous avez besoin d'un objet compteur verrouillé transactionnel et incrémenté chaque fois qu'une nouvelle page est créée. L'inconvénient de ceci est que vous ne pouvez pas paralléliser la création de nouvelles entités de page. L'avantage est que vous auriez un peu plus de contrôle sur la façon dont vos pages sont disposées, car votre premier sitemap pourrait être les pages 1-1000, et ainsi de suite.

+0

génial! merci de rendre ma vie plus simple :) Je vais coder ceci dans les 30 prochaines minutes maintenant :) – demos

+0

Belle stratégie! L'utilisation d'un compteur incrémentiel dans App Engine est généralement une mauvaise idée. –

+0

approche intéressante – systempuntoout

0

Vous pouvez utiliser Query Cursors pour contourner la limite de 1000 éléments de requête; Même si l'utilisation de curseurs ne résoudra probablement pas entièrement votre problème, la création d'un sitemap contenant 100 000 éléments pourrait facilement dépasser la durée d'exécution d'une seule requête. En outre, la génération dynamique du sitemap pourrait facilement utiliser la totalité ou une grande partie de votre quota de ressources.

Si vos données ne sont pas très dynamiques, je envisagerais de générer un fichier de sitemap statique et de l'inclure dans votre package de déploiement. Même si vos données sont très dynamiques, vous voudrez probablement adopter une stratégie de régénération seulement une fois par jour et faire un déploiement pour le mettre sur le serveur.