3 Stimmen

Strategien für die Suche in unterschiedlichen Datenquellen

Ich baue ein Tool, das Personen auf der Grundlage einer Reihe von Attributen sucht. Die Werte für diese Attribute sind über mehrere Systeme verstreut.

Ein Beispiel: Das Geburtsdatum wird in einer SQL Server-Datenbank als Teil des Systems ABC gespeichert. Die Zuordnung des Vertriebsgebiets dieser Person ist in einer schrecklichen Legacy-Datenbank gespeichert. Andere Attribute sind in einem System gespeichert, das nur über einen XML-Webdienst zugänglich ist.

Erschwerend kommt hinzu, dass die Legacy-Datenbank und der Webdienst sehr langsam sein können.

Welche Strategien und Tipps sollte ich bei der Implementierung einer Suche über all diese Systeme hinweg berücksichtigen?

Anmerkung: Obwohl ich eine Antwort geschrieben habe, bin ich nicht davon überzeugt, dass es eine gute Antwort ist. Ich habe nicht die Absicht, meine eigene Antwort zu akzeptieren, es sei denn, jemand anderes gibt einen besseren Einblick.

4voto

skaffman Punkte 389758

Sie könnten einen Indizierungsmechanismus verwenden, um die Daten über alle Systeme hinweg abzurufen und lokal zu indizieren, und dann Ihre Suchvorgänge anhand des Indexes durchführen. Die Suchvorgänge wären dann wesentlich schneller und zuverlässiger.

Natürlich wird dadurch das Problem nur von einem Teil Ihres Systems auf einen anderen verlagert - jetzt muss Ihr Indexierungsmechanismus mit Ausfällen und heterogenen Systemen umgehen, aber das ist vielleicht ein einfacher zu lösendes Problem.

Ein weiterer Faktor ist, wie oft sich die Daten ändern. Wenn Sie Daten in Echtzeit abfragen müssen, die sehr schnell veralten, ist eine Indexierung möglicherweise nicht sinnvoll.

1voto

Larsenal Punkte 47282

Wenn Sie mit einer restriktiven Suche auskommen, beginnen Sie mit der Rückgabe einer Liste, die auf den Suchkriterien basiert, die der schnellsten Datenquelle entsprechen. Verknüpfen Sie dann diese Datensätze mit den anderen Systemen und entfernen Sie Datensätze, die den Suchkriterien nicht entsprechen.

Wenn Sie eine ODER-Logik implementieren müssen, wird dieser Ansatz nicht funktionieren.

1voto

Matt McMinn Punkte 15223

Dies ist zwar keine wirkliche Antwort, könnte Sie aber zumindest auf dem Weg zu einer praktikablen Lösung weiterbringen. Bei einem früheren Arbeitgeber hatten wir eine ähnliche Situation - viele Datenquellen, unterschiedliche Zugriffsmöglichkeiten auf diese Datenquellen, unterschiedliche Zugriffsberechtigungen, militärische/staatliche/zivile Quellen usw. Wir verwendeten Maultier das auf dem Enterprise Service Bus-Konzept aufbaut, um diese Datenquellen mit unserer Anwendung zu verbinden. Die Details sind etwas dürftig, da ich nicht der eigentliche Implementierer war, sondern nur ein Integrator, aber wir haben einen Kanal in Mule definiert. Dann schreibt man ein einfaches Integrationsstück, das zwischen dem Kanal und der Datenquelle sowie der Anwendung und dem Kanal geschaltet wird. Wir hatten also ein generisches SQL-Integrationsstück für den Zugriff auf eine Datenbank, und für Dinge wie Webservices hatten wir einige Basisklassen, die allgemeine Funktionen implementierten, so dass die eigentliche Anpassung des Integrationsstücks viel weniger Arbeit war, als es sich anhört. Die Anwendung konnte dann den Kanal abfragen, der den Zugriff auf die verschiedenen Datenquellen, die Umwandlung in ein normalisiertes XML-Format und die Rückgabe der Ergebnisse an die Anwendung übernahm.

Das hatte für unsere Situation eine Menge Vorteile. Wir konnten neue Datenquellen für bestehende Abfragen einbeziehen, indem wir sie einfach mit dem Kanal verbanden - die Anwendung musste nicht wissen oder sich darum kümmern, welche Datenquellen vorhanden waren, da sie nur die Daten aus dem Kanal betrachtete. Da Daten aus dem Channel gepusht oder gezogen werden können, konnten wir eine Datenquelle die Anwendung aktualisieren lassen, wenn sie z. B. aktualisiert wurde.

Es hat eine Weile gedauert, bis es konfiguriert war und funktionierte, aber als wir es einmal zum Laufen gebracht hatten, waren wir ziemlich erfolgreich damit. In unserem Demo-Setup hatten wir am Ende 4 oder 5 Anwendungen, die sowohl als Datenproduzenten als auch als Datenkonsumenten fungierten und sich mit vielleicht 10 Datenquellen verbanden.

0voto

Ryan Ische Punkte 3286

Haben Sie daran gedacht, die Daten in eine separate Struktur zu verschieben?

Lucene beispielsweise speichert die zu durchsuchenden Daten in einem schemafreien invertierten Index. Sie könnten ein separates Programm haben, das Daten aus all Ihren verschiedenen Quellen abruft und sie in einen Lucene-Index einfügt. Ihre Suche könnte gegen diesen Index arbeiten und die Suchergebnisse könnten einen eindeutigen Bezeichner und das System enthalten, aus dem sie stammen.

http://lucene.apache.org/java/docs/ (Es gibt auch Implementierungen in anderen Sprachen)

0voto

TWith2Sugars Punkte 3358

Haben Sie einen Blick geworfen auf YQL ? Es ist vielleicht nicht die perfekte Lösung, aber ich könnte Ihnen einen Ausgangspunkt für Ihre Arbeit geben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X