schneller Schreibzugriff mit C#

Vorab… Super DB und Super Forum :slight_smile:

ich muss mich nun mit dem Thema DBMS auseinander setzten und da bin ich auf PostgreSQL gekommen. Ich finde die Möglichkeiten welche man mit der DB hat einfach nur klasse.

Aber kommen wir mal zu meiner Frage… ich versuche schnellstmöglich daten in eine DB zu schreiben und denke dass mein Code dafür nicht richtig ausgelegt ist… hat jemand eine bessere idee als diese :

string connectionString = “Server=127.0.0.1;Port=5432;User Id=postgres;Password=passwort;Database=TEST;Enlist=true”;
NpgsqlConnection connection = new NpgsqlConnection(connectionString);
connection.Open();
NpgsqlTransaction trans;
// NpgsqlTransaction trans = connection.BeginTransaction();
NpgsqlCommand command = new NpgsqlCommand(“insert into npdata(messung, meter, tempe, dampf ) values(:messung, :meter, :tempe, :dampf )”, connection);
// command.Transaction = trans;
command.Parameters.Add(new Npgsql.NpgsqlParameter(“messung”, DbType.Int32));
command.Parameters.Add(new Npgsql.NpgsqlParameter(“meter”, DbType.Int32));
command.Parameters.Add(new Npgsql.NpgsqlParameter(“tempe”, DbType.Int32));
command.Parameters.Add(new Npgsql.NpgsqlParameter(“dampf”, DbType.Int32));


for (int i = 0; i < 77; i++)
{
for (int m = 0; m < 100000; m++)
{
trans = connection.BeginTransaction();
command.Parameters[0].Value = 1;
command.Parameters[1].Value = m;
command.Parameters[2].Value = 10;
command.Parameters[3].Value = 10;
command.ExecuteNonQuery();
trans.Commit();
}
}
connection.Close();


}

Über verbesserungen würde ich mich freuen…

Hallo,

das Commit sollte nicht nach jedem Datensatz passieren, da dies langsam ist. Du könntest z.B. alle 1000 Datensätze committen (oder überhaupt erst am Ende).

Hallo fatalbert,
ich bin leider mom. nicht an meinem PC aber werde es mir heute noch ansehen. danke

Wenn Du nur 100000 Datensätze mit 3 fixen und einem fortlaufend sich um 1 erhöhenden Wert eintragen willst, dann kannst Du auch generate_series() benutzen.

test=# create table foo (id int, val int);
CREATE TABLE
Time: 6.305 ms
test=*# insert into foo select * from (select generate_series(1,1000), 10)s;
INSERT 0 1000
Time: 30.986 ms
test=*# select count(1) from foo;
 count
-------
  1000
(1 row)

Im Beispiel füge ich id von 1-1000 ein, die 2. Spalte ist immer 10. Das für Dich anzupassen überlasse ich Dir zur Übung.

Andreas

Hallo akretschmer,

vielen Dank für den Tip, ich werde mir die Sachen nochmals heute abend ansehen…
aber dass Problem ist dass die werte nicht konstant sind…

messung -> ist ein sequentieller wert… damit meine ich dass pro messung mehrere meter vorhanden sind. Pro eintrag ist dieser wert fix.

meter -> eine fortlaufende Zahl 0…12000
tempe -> pro meter anderer wert
dampf -> pro meter anderer wert

vielen dank für deine Hilfe