Si vous développez un moteur de recherche, vous serez forcé de penser à l'évolutivité très rapidement. Le tri dans les environnements liés à la recherche est un problème familier. Vous devriez jeter un coup d'œil aux implémentations de recherche de Google! Comment trier devrait dépendre d'un ranking algorithm. Une conception d'algorithme de classement centré sur un domaine ne devrait pas être si différente du classement qu'une approche de service!
Quelle langue vous utilisez est votre choix. Si vous choisissez C/C++ Message Passing Interface (MPI) pour l'informatique distribuée. Si vous utilisez Java, jetez un oeil à JMS et GridGain (GridGain implémente Googles MapReduce).
Une autre question est, comment stocker vos données (distribué, rapide, tolérant aux pannes)! Pour Java jeter un oeil à Project Voldemord (qui est l'un des meilleurs systèmes que vous pouvez obtenir gratuitement.
Pour plus d'informations sur l'architecture Google, en savoir plus sur the high scalability website.
Pour les questions au sujet de DDD, jetez un oeil à dddcommunity.org, la page d'accueil d'Eric Evans lui-même;) Il a écrit un très bon livre Domain-Driven Design. DDD est bien, car il assure l'intégrité et l'intégrité d'un domaine.
Un modèle simple pourrait être:
page (URL url, BigInt rank, List<String> keywords,
List<URL> links, List<URL> outLinks, Content ref)
content (GzippedBytes[] content)
Si un nouveau nœud est ajouté au système, il devrait réagir sur des choses comme « setLinks », etc. il peut l'obtenir est pagerank par son propre.
Le client est simple, il ne fait qu'une recherche (mots-clés) qui est triée par PageRank.
Voici un service example of a pagerank implementation en Java.
Avec le moteur de recherche je ne voulais pas dire crawler/indexer. Il est supposé être un mécanisme de recherche ordinaire sur des objets métier spécifiés. –
La méthode de recherche actuelle a cette signature: Get (string searchColonne, requête de chaîne, chaîne orderExpr, int startIndex, int maxRows, bool useRanks, int authorRank, int titleRank, int otherRank). –
Je ne sais pas comment faire en sorte que la couche d'interface utilisateur ne sache rien de la structure de la base de données et puisse trier la page de résultats. :) –