2010-02-07 1 views
1

J'écris un blog en Python et j'en suis au point où je dois décider du schéma d'URL à utiliser. Il est tentant de ne citer que les entrées début à la fin, comme:Décider d'un schéma d'URL de blog en ce qui concerne la performance de python

http://myblog.com/1 
http://myblog.com/2 
... 
http://myblog.com/1568 

Et du côté du serveur, il est juste que les entrées de blog dans une liste de python. Ma crainte est que cela deviendra lent à traverser à l'entrée demandée comme la liste se développe. Je ne sais pas quelle taille (comme dans la mémoire) les entrées seront donc je ne peux pas les stocker dans un tableau de niveau inférieur (s'il y a même en python) ou une table de taille fixe de toute sorte.

L'autre option Je pense est à préfixer les URL d'entrée avec un an:

http://myblog.com/2010/1 
http://myblog.com/2010/2 
http://myblog.com/2011/1 

Je suppose que cela accélère les choses que je pouvais stocker les entrées dans une structure arborescente:

entries = { 
    '2010': [entry1, entry2, ...], 
    '2012': [entry1, entry2, ...] 
} 

Comment le feriez-vous? Je laisse la discussion ouverte car je m'intéresse à la façon dont les gens pensent ici.

Merci!

+2

Est-ce que je comprends bien, vous avez l'intention de stocker les entrées littéralement * dans votre code *? – balpha

+0

Bien sûr. Bien sûr, je vais les stocker quelque part de manière persistante afin qu'ils survivent aux redémarrages du serveur etc, mais sinon, ils ne sont que du texte, donc je ne vois aucune raison de ne pas les garder tous en RAM. – pthulin

+1

Hmmm ... bien, de toute façon: la recherche de liste n'a rien à voir avec la traversée et est en fait assez rapide (voir http://stackoverflow.com/questions/2214651/efficient-python-array-with-100-million-zeros pour Exemple). Je suggère fortement de ne pas penser à l'optimisation en ce moment même - c'est certainement prématuré. Quoi qu'il arrive, la question de rechercher l'entrée de l'URL ne sera pas votre goulot d'étranglement. – balpha

Répondre

0

Qu'en est-il de mapper des URL aux entrées de blog en utilisant un dictionnaire? C'est simple, et le dictionnaire a la recherche O (1) donc ce serait rapide même si votre blog avait beaucoup d'entrées.

+0

Peut-être, je suppose que ce serait un compromis entre la consommation de mémoire et le processeur. – pthulin

1

La différence de performance entre les deux sera négligeable. Le surdébit de la liste ou du dictionnaire sera beaucoup plus petit que la taille du texte dans les entrées. Garder tout en mémoire n'est cependant pas une bonne solution. Vous devez conserver les entrées sur disque (base de données, fichier plat, etc.), puis (si nécessaire) utiliser un cache pour conserver les entrées les plus fréquemment consultées en mémoire.