2017-07-07 1 views
0

Ich habe eine Datenbanktabelle mit 100 Millionen Datensätzen. Screen Shot is taken from RobomongoWie kann ich die C# mongodb-Abfrage bei großen Datenadressaten optimieren?

Tabellenschema: There are 100 million records

Wenn ich den folgenden Code ausführen. Ich bekomme Ergebnisse, aber es dauert ungefähr 1 Minute, um abgeschlossen zu werden. Ich muss die Abfrage optimieren, um Ergebnisse schneller zu erhalten. Was ich bis jetzt gemacht habe, ist hier. Bitte sagen Sie mir, wie Sie das optimierte Ergebnis erreichen können.

 var collection = _database.GetCollection<BsonDocument>("FloatTable1"); 

     var sw = Stopwatch.StartNew(); 
     var builder = Builders<BsonDocument>.Filter; 
     int min = Convert.ToInt32(textBox13.Text); //3 
     int max = Convert.ToInt32(textBox14.Text); //150 
     var filt = builder.Gt("Value", min) & builder.Lt("Value", max); 
     var list = collection.Find(filt); 
     sw.Stop(); 
     TimeSpan time = sw.Elapsed; 
     Console.WriteLine("Time to Fetch Record: " + time.ToString()); 


     var sw1 = Stopwatch.StartNew(); 
     var list1 = list.ToList(); 
     sw1.Stop(); 
     TimeSpan time1 = sw1.Elapsed; 
     Console.WriteLine("Time to Convert var to List: " + time1.ToString()); 
     Console.WriteLine("Total Count in List: " + list1.Count.ToString()); 

Out Put ist:

  • Zeit Bilanz zu holen: 00: 00: 00,0059207
  • Zeit var konvertieren zur Liste: 00: 01: 00,7209163
  • Gesamtzählung in der Liste: 1003154

Ich habe einige Fragen zu dem angegebenen Code.

  1. Wenn line collection.Find (filt) ausgeführt wird, ruft es gefilterte Datensätze aus der Datenbank ab OR Just creating filter?
  2. var list1 = list.ToList(); dauert 1 Minute um ausgeführt zu werden, wird nur von var zu Liste konvertiert OR Erste Daten holen als konvertieren?
  3. Wie erreicht man diese Abfrage und Ergebnis in möglichst wenig Zeit. Bitte Hilfe.

Antwort

2

Wenn Leitung collection.Find (FILT) durchführt, wird es gefiltert fetch Datensatz aus der Datenbank oder Filter zu schaffen?

Es wird nur der Filter erstellt.

var list1 = list.ToList(); dauert 1 Minute zum Ausführen, ist es nur Konvertierung von var zu Liste ODER Erste Daten holen als Konvertierung?

Es holt die Daten und Konvertierung.

Wie erreichen Sie diese Abfrage und Ergebnis in möglichst wenig Zeit. Bitte Hilfe.

Das Holen/Filtern auf der Datenbank isst Ihre Zeit. Der einfachste Weg, um es zu beschleunigen, wäre ein Index für die Spalte, die Sie filtern.

Alles andere würde mehr Aufwand oder Datenbank-Technologien erfordern, wie das Erstellen einer Spalte, die grob Ihr Datum darstellt (z. B. nach Tag gruppiert) und dieses indiziert oder etwas wie Tabellenabschnitte nach einer bestimmten Zeitspanne gruppiert (I ' Ich bin kein DB-Admin und weiß nicht die richtigen Bedingungen dafür, aber ich erinnere mich, dass jemand es auf einer Datenbank mit Milliarden von Datensätzen macht;))

+0

Vielen Dank für die bereitgestellten Informationen. Ich habe versucht, indem ich den Index auf der Wertspalte machte, aber es half nicht. Irgendein anderer Weg zur Lösung? – Umer