2017-05-31 9 views
-1

Ich arbeite an einem kleinen Projekt mit einem großen, sich nicht oft ändernden Datensatz von Menschen. Jeder Datensatz wird mit dem Namen einer Person und einer Liste früherer Unternehmen gespeichert, für die sie gearbeitet haben (nummerierte ID).Welche Datenbank (en) wird verwendet, wenn Millionen von Datensätzen gesucht und Verbindungen hergestellt werden?

Ich schreibe eine einseitige Webanwendung, mit der Sie die Verbindungen von Personen und Unternehmen suchen und visuell anzeigen können. Wenn ich "John Smith" eintrage, zeigt es mir die Firmen, für die er gearbeitet hat, die Leute, die in dieser Firma arbeiten, und die Firmen, für die sie gearbeitet haben, und so weiter (wie eine Netzwerkgrafik).

Ich benutze derzeit MongoDB, um all diese Leute zu speichern ... aber ich habe das Gefühl, dass dies keine optimale Lösung ist. Ich sehe, dass es viele verschiedene Datenspeicher wie Cassandra (Wide-Column), Couchbase (ähnlich wie Mongo?), ElasticSearch (Suche), Neo4J (Grafik) gibt, die optimaler sein und eine bessere Leistung bieten kann.

Es gibt eine riesige Auswahl an Optionen, aber ich bin mir nicht sicher, wie ich die optimale Lösung aussuchen soll.

Ist es in Ordnung, mehr als eine Datenbank (z. B. MongoDB und Neo4J) zu verwenden, oder ist das in der Praxis schlecht, da es schwierig ist, beide synchron zu halten?

Wie gehe ich vor, um die optimale Technologie auszuwählen, um sicherzustellen, dass meine Anwendung gut funktioniert und meine Daten leicht abgefragt werden kann?

Antwort

0

1) Interessant, dass Sie angeben, dass die Struktur "wie ein Netzwerkdiagramm" ist. Also würde diese Art von Datenbank offensichtlich passen.

2) Mehrere Datenbanken synchron zu halten ist ein Schmerz, kein Zweifel, aber Sie behaupten, dass Ihr Dataset ziemlich statisch ist. So können Sie mit dem Schmerz umgehen und wählen Sie die beste Übereinstimmung für jeden Teil Ihres Problems. Auf der anderen Seite ... Lösungen wie Neo4j und MongoDB haben Volltext-Suchfunktionen enthalten (oder einfach implementiert). Sofern Sie keine super-Suchfunktionen benötigen, glaube ich nicht, dass Elasticsearch ein Kandidat für Ihr Problem ist.

3) Ich würde zwei wahrscheinliche Kandidaten wählen (und persönlich würde ich mit Neo4j (Graph) gehen und bei MongoDB bleiben (da Sie Ihre Daten bereits in diesem Format haben)) und einen POC machen. Können Sie Ihr Problem beantworten? Ist es flexibel genug, um verschiedene Probleme zu lösen?

Nur meine 2,5 Eurocent Meinung natürlich.

Grüße, Tom

1

Während diese Frage Meinung basiert sein könnte geschlossen werden, gibt es einige Punkte, die Sie berücksichtigen müssen.

A) Das Aktualisieren eines Netzwerks in einen normalisierten Speicher (Mongo für zB) ist manchmal problematisch. Sobald Sie einen Punkt des Netzwerks aktualisieren, müssen Sie benachbarte Knoten und damit mehrere MongoDb-Dokumente aktualisieren.

Beachten Sie, dass dies auch für Elasticsearch gilt.

B) Sie erwähnen "Suchen". In den genannten Technologien gibt es nur einen echten Kandidaten und es ist Elasticsearch. Während Neo4j hat coole Integrationen wie die weit verbreitete neo4j-to-elasticsearch Plugin oder APOC, wenn Sie beginnen, einige Bedürfnisse in Bezug auf die Suche haben dann ES ist eine der besten Technologien auf dem Planeten.

Also IMO, nimm das Beste aus beidem.Viele große Unternehmen tun es, Airbnb für zB (https://www.youtube.com/watch?v=gayXC2FDSiA)

Was Sie am Ende erhalten werden, ist die Fähigkeit, von leistungsfähiger Suche kombiniert mit graphbasierter Relevanzsteigerung zu profitieren.

Ein komplexeres Beispiel ist das, was wir Graph-Aided Search nennen.

Verwandte Themen