J'ai une bande d'URL stockées dans une table en attente d'être grattée par un script. Cependant, beaucoup de ces URL sont du même site. Je voudrais renvoyer ces URL dans une commande "Site-amical" (c'est-à-dire essayer d'éviter deux URL du même site d'affilée), donc je ne serai donc pas bloquée accidentellement en faisant trop de demandes HTTP en peu de temps. .
La mise en page de la base de données est quelque chose comme ceci: p> résultat: p> J'ai pensé à quelque chose comme " Commander par site <> @Last_Site Desc code>" Mais je n'ai aucune idée de savoir comment écrire quelque chose comme ça. p> p>
5 Réponses :
Je pense que vous surchargez cela. Pourquoi pas simplement utiliser p>
commander par NewID () P>
Joli! Joliment simpliste.
Est-ce similaire à aléatoire ()? Si c'est le cas, ce n'est pas assez bon. Il existe quelques sites qui représentent 10 à 30% de la table.
@HHAAMU: Je pense que vous sous-estimez la puissance du hasard:
Voir cet article sur mon blog pour des explications plus détaillées sur la façon dont cela fonctionne:
avec le nouveau avec des versions d'aînée: p> , bien qu'il puisse être moins efficace. p> p> postgreSQL 8.4 code>: p>
La dernière requête vraiment i> doit être vérifiée pour une efficacité si votre table est grande.
Merci, ça marche parfaitement! On dirait que Voodoo pour moi, mais je vais le comprendre un jour.
J'utilise toujours 8.3, mais la table n'est que 150 rangées jusqu'à présent.
@HHAAMU: Notez que la durée de requête pour la dernière requête augmentera de manière exponentielle. Je serais testé sur le nombre maximum d'enregistrements que vous envisagez d'atteindre.
@Quassnoi: fera. Il y a beaucoup de doute qu'il y aura 1000 rangées. Et la requête ne sera pas courue tout cela souvent (une fois par jour ou plus rarement).
Vous demandez de rond-robin, mais je pense qu'un simple fera le tour. Il devrait fonctionner même si les URL du même site sont regroupées dans DB. p> p>
Si les URL ne changent pas très souvent, vous pouvez proposer un travail quelque peu compliqué que vous pourriez courir périodiquement (nocturne?) qui affecterait des entiers à chaque enregistrement basé sur les différents sites présents.
Que Vous pouvez faire est d'écrire une routine qui analyse du domaine à partir d'une URL (vous devriez être capable de trouver un extrait qui le fait presque n'importe où). P>
Ensuite, vous créez une table temporaire contenant chaque domaine unique. , plus un nombre. p>
Puis, pour chaque enregistrement de votre table d'URL, vous recherchez le domaine de votre table Temp, affectez-vous l'enregistrement du nombre de numéros et ajoutez un grand nombre à ce numéro de la table TEMP. . P>
Puis pour le reste de la journée, trier par le numéro. p>
Voici un exemple avec les cinq enregistrements que vous avez utilisés dans votre question: p>
URL: p>
table TEMP: p> puis pour chaque URL, vous recherchez la valeur dans la table TEMP et l'ajoutez-en 3 (car il est obtenu 3 Enregistrements distincts): p> URL: p> Itération 1: H2>
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask 2
https://stackoverflow.com/tags 5
http://use.perl.org/ 3
Il y a une solution beaucoup plus simple et plus rapide ... p>
-> C'est très rapide et indexé -> Les lignes viendront dans un ordre reproductible et aléatoire p>