2016-07-29 10 views
1

Ich habe einen Dienst, der jeden Tag ein Online-Dokument analysieren. Ich möchte das auf einer Mongo-Datenbank speichern. Die Daten extrahiert wird so organisiert (ich jeden Tag eine Prozessliste haben):Mit Mongodb in einem täglichen Dienst

public class Process 
{ 
    public IList<Lawyer> Lawyers { get; set; } 
    public string Details { get; set; } 
    public DateTime Date { get; set; } 

    public Info AdditionalInfo { get; set; } 
} 

Also ich jeden Tag eine Liste der Prozesse speichern müssen. Meine Client-Anwendung wird diese Datenbank lesen und alle Prozesse eines gegebenen Anwalts dieses Tages durchsuchen und wie eine E-Mail-App anzeigen.

Wie kann ich meinen mongodb so strukturieren?


Ich werde zwischen 6k und 10k Prozesse pro Tag haben. Daily Dokument hat Prozesse für jeden Anwalt aus meinem Staat Jeder Anwalt wird höchstens 50 Prozesse pro Tag haben.

Also werde ich eine Webanwendung wie Google Mail haben, wo ein Anwalt alle seine Prozesse sehen wird.

Prozesse werden jeden Monat (oder 2) gelöscht, aber ich muss die Prozesse von meinen Kunden für immer behalten, oder bis er es wegwerfen.

Meine ursprüngliche Idee war es, Client-Prozesse in eine andere (?) Datenbank zu verschieben, die von 'Gmail' App verbraucht wird.

Also, wenn die Prozesse von meinen tatsächlichen Kunden sind, behalte ich es (bewegen?) Wenn es von einem Nicht-Client ist, lösche ich nach 1 Monat.

Was denkst du?


Dank

+2

Das ist eine knifflige Frage. In der Tat gibt es mehrere Lösungen für Ihr Problem. Wie wäre es mit einer einzigen Sammlung, Prozesse zu speichern? – Odonno

+0

Wird es eine gute Lösung Performance-weise sein, wenn ich alle Prozesse finden muss, die lawyer.id = 123 haben? – Paul

+1

Auch hier gibt es mehrere Lösungen. Es hängt von deinem Input und deiner Ausgabe ab, denke ich. Filterung durch einen Anwalt ist nicht wirklich schlecht (in Bezug auf die Leistung oder Programmierkenntnisse). Können Sie uns sagen, wie viele Prozesse Sie von einer einzelnen Abfrage abrufen möchten? So können wir sehen, ob es machbar ist oder nicht. – Odonno

Antwort

1

Mongo ist nicht in einem relationalen Kontext verwendet werden soll. Ihr Anwendungsfall scheint nicht sehr relational, so scheint es eine gute Passform. Statt der klassischen "einen Tabelle für Anwälte und eine für Prozesse" würde ich einfach eine einzige Sammlung für Anwälte machen, wobei eines der Attribute im Objekt "Prozesse" genannt wird und eine Liste von Prozessobjekten enthält. Da Sie immer alle Prozesse eines Anwalts abfragen werden (wenn ich das richtig verstanden habe), erfordert es nur eine einzige Abfrage.

{ 
    id: '12345', 
    name: 'Foo Bar', 
    address: '123 Main St.', 
    phone: '123-456-7890', 
    processes: [ 
     { 
      name: 'process 1', 
      ...: ... 
     }, 
     { 
      name: 'process 2', 
      ...: ... 
     } 
    ] 
    ...: ... 
} 
+0

Nicht möglich auf diese Weise. Er sagt, dass er 10k Prozesse pro Tag haben wird. Es bedeutet also, dass ein Anwalt nach einigen Tagen, Wochen eine unendliche Anzahl von Prozessen haben wird. Mongodb kann Dokumente mit einer großen Größe nicht verarbeiten (Ihre Prozessliste ist zu groß). Ich bleibe lieber bei meiner Antwort, die eine Sammlung von Prozessen ist. Außerdem denke ich, dass er den Service bevorzugt, um mit einer Liste von Prozessen, dem Kern der App und so der Hauptsammlung zu antworten. Habe ich recht ? – Odonno

+0

Ich lese das als 10K insgesamt pro Tag, nicht 10K pro Anwalt pro Tag. Und ich gehe nicht davon aus, dass sich Prozesse unter jedem Anwalt ansammeln, sondern dass sie täglich ersetzt werden. Ich weiß nicht, was ein Prozess in diesem Zusammenhang ist. YMMV. –

+0

Oh, ich habe es nicht gesehen. Ich denke jeder Prozess wird jeden Tag zu Mongo hinzugefügt, kein Müll. Deshalb dachte ich, dass eine Process-Sammlung besser ist. Bleibe immer noch von der Notwendigkeit abhängig. – Odonno