AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie bekomme ich einen performanten Firebird?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie bekomme ich einen performanten Firebird?

Ein Thema von Union · begonnen am 24. Apr 2014 · letzter Beitrag vom 28. Apr 2014
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:21
Zitat:
Keine Ahnung, wieviele Datensätze Firebird ohne Commit speichern kann, aber ich denke, es sind mehr als 1000.
Da dürfte es keine Beschränkung geben.

Wie führst Du das Skript aus? Eventuell funkrt Dir da doch noch ein AutoCommit dazwischen.
Markus Kinzler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:27
Wie führst Du das Skript aus? Eventuell funkrt Dir da doch noch ein AutoCommit dazwischen.
Wie oben angegeben: Im Scripteditor (Ctrl-F12) laden und ausführen oder gleich von Platte ausführen, was etwas langsamer ist, aber bei riesigen Scripts unumgänglich, wenn man nicht genug Arbeitsspeicher hat. Keinesfalls im SQL-Editor laden, das ist viel langsamer. Von irgendwelchen AutoCommits weiß ich nichts.

Wenn ich wüßte, wie man via Server Manager ein Insert-Script einer MSSQL-Tabelle generiert, würde ich mal testweise meine riesige 900000 DS große Ortsdatenbank exportieren und in Firebird einlesen, um zu sehen, wie lange das dauert.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:32
Wenn ich wüßte, wie man via Server Manager ein Insert-Script einer MSSQL-Tabelle generiert, würde ich mal testweise meine riesige 900000 DS große Ortsdatenbank exportieren und in Firebird einlesen, um zu sehen, wie lange das dauert.
Siehe Bild.
Angehängte Grafiken
Dateityp: png MSSQLExport.png (55,2 KB, 54x aufgerufen)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:36
Wenn ich wüßte, wie man via Server Manager ein Insert-Script einer MSSQL-Tabelle generiert, würde ich mal testweise meine riesige 900000 DS große Ortsdatenbank exportieren und in Firebird einlesen, um zu sehen, wie lange das dauert.
Siehe Bild.
Das kenne ich selbstverständlich bereits, aber das erzeugt mir kein Insert-Script aller 900000 DS, sondern lediglich das:
Code:
USE [GeoNames]
GO

INSERT INTO [dbo].[Plaetze]
           ([ISO_Code]
           ,[Postal_Code]
           ,[Place_Name]
           ,[State]
           ,[State_Code]
           ,[Provinz]
           ,[Provinz_Code]
           ,[Kommune]
           ,[Kommune_Code]
           ,[Latitude]
           ,[Longitude]
           ,[Genau])
     VALUES
           (<ISO_Code, char(2),>
           ,<Postal_Code, nvarchar(50),>
           ,<Place_Name, nvarchar(180),>
           ,<State, nvarchar(100),>
           ,<State_Code, nvarchar(50),>
           ,<Provinz, nvarchar(100),>
           ,<Provinz_Code, nvarchar(50),>
           ,<Kommune, nvarchar(100),>
           ,<Kommune_Code, nvarchar(50),>
           ,<Latitude, numeric(7,4),>
           ,<Longitude, numeric(7,4),>
           ,<Genau, tinyint,>)
GO
Hab nur gerade keine Lust, ein Programm zu schreiben, das mir das Insert-Script generiert, ich schau mir nämlich nebenher einen Film an und gehe danach zu Bett, weil ich eigentlich schon saumäßig müde bin. Für das Anlegen einer Tabelle in FB würd's aber grad noch reichen

Geändert von Perlsau (24. Apr 2014 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:40
Wenn ich wüßte, wie man via Server Manager ein Insert-Script einer MSSQL-Tabelle generiert, würde ich mal testweise meine riesige 900000 DS große Ortsdatenbank exportieren und in Firebird einlesen, um zu sehen, wie lange das dauert.
Gar nicht. Das geht mit dem Import/Export-Wizzard und dann wird das per ODBC/OLE (je nachdem, was man auswählt) mehr oder minder performant (meist mehr) durchgezogen.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 17:42
Genau das hatte ich befürchtet: Da hat man nun ein gewaltig aufgeblähtes Werkzeug und kann nicht mal Insert-Scripts erzeugen. Okay, vielleicht mach ich das morgen mal mit einer Stringliste. Bis dann ...
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 18:00
Es geht doch. Dazu im Kontextmenü der Datenbank Tasks->Scripts generieren auswählen und im "Erweitert" Dialog auch auswählen, dass man Daten exportieren möchte. Nur wass Du mit TSQL in FB anfangen willst.... Lieber die Variante mit der Stringlist (wenn die bei 1 Mio nicht überläuft).

Hier mal als Vorlage mein primitivst-QD:
Delphi-Quellcode:
procedure TForm1.ExtractData(ATableName: string);
   function QuoteValue(AValue : string) : string;
   begin
      if pos(#33, AValue) > 0 then
         result := StringReplace(AValue, #33, #33#33, [rfReplaceAll])
      else
         result := AValue;
   end;

   function BoolStr(AField : TField) : string;
   begin
      if AField.AsBoolean then
         result := 'T'
      else
         result := 'F';
   end;
var
   i : integer;
   LCount : integer;
   LRecords : integer;
   LLine : string;
   LValue : string;
   sl : TStringList;
begin
   AdsQuery1.SQL.Text := 'Select * from '+ATableName;
   sl := TStringList.Create;
   try
      AdsQuery1.Active := True;
      LRecords := AdsQuery1.RecordCount;
      ProgressBar1.Position := 0;
      ProgressBar1.Step := 1;
      ProgressBar1.Max := LRecords;
      sl.Capacity := LRecords;
      DecimalSeparator := '.';

      LCount := AdsQuery1.FieldCount;
      while not AdsQuery1.Eof do
      begin
         LLine := 'Insert into '+ATableName+' values(';
         for i := 0 to LCount-1 do
         begin
            if AdsQuery1.Fields[i].IsNull then
               LLine := LLine + 'null'
            else
            begin
               case AdsQuery1.Fields[i].DataType of
               ftDate : LLine := LLine + QuotedStr(FormatDateTime('yyyy-mm-dd', AdsQuery1.Fields[i].AsDateTime));
               ftDateTime : LLine := LLine + QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', AdsQuery1.Fields[i].AsDateTime));
               ftTimeStamp : LLine := LLine + QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', AdsQuery1.Fields[i].AsDateTime));
               ftBoolean : LLine := LLine + QuotedStr(BoolStr(AdsQuery1.Fields[i]));
               ftString :
               begin
                  LValue := QuoteValue(AdsQuery1.Fields[i].AsString);
                  LLine := LLine + QuotedStr(LValue);
               end;
               else
                  LLine := LLine + AdsQuery1.Fields[i].AsString;
               end;
            end;
            LLine := LLine + ', ';
         end;
         LLine := copy(LLine, 1, length(LLine)-2) + ');';
         sl.Add(LLine);
         AdsQuery1.Next;
         if (sl.Count mod 101 = 0) or AdsQuery1.Eof then
            sl.add('commit;');
         ProgressBar1.StepIt;
      end;
      sl.SaveToFile(ATableName+'.sql');
   finally
      sl.Free;
      AdsQuery1.Active := False;
   end;
end;
Angehängte Grafiken
Dateityp: png MSSQLDataExport.png (33,9 KB, 45x aufgerufen)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Wie bekomme ich einen performanten Firebird?

  Alt 24. Apr 2014, 21:45
Oh. Nett. Danke.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Wie bekomme ich einen performanten Firebird?

  Alt 25. Apr 2014, 06:21
Es geht doch. Dazu im Kontextmenü der Datenbank Tasks->Scripts generieren auswählen und im "Erweitert" Dialog auch auswählen, dass man Daten exportieren möchte. Nur wass Du mit TSQL in FB anfangen willst....
Stimmt, die SQL-Dialekte sind nicht kompatibel Umgekehrt geht's aber schon ... glaube ich ... ungetestet

Tatsächlich hatte ich jedoch auch eine FB-Version dieser Tabelle (als View), deren Daten ich exportieren konnte. Dabei wurden 923168 Datensätze mit dieser Struktur exportiert:
Code:
    P_IDX     BIGINT NOT NULL,
    P_LAND    VARCHAR(100),
    P_PLZ     VARCHAR(50),
    P_ORT     VARCHAR(180),
    P_STATE   VARCHAR(100),
    P_PROVINZ VARCHAR(100),
    P_KOMMUNE VARCHAR(100),
    P_LAT     NUMERIC(7,4),
    P_LON     NUMERIC(7,4),
    P_GENAU   SMALLINT
Nun hab ich mir in FB eine ebensolche Tabelle in einer Testdatenbank angelegt, wobei P_IDX auf AutoInc steht und daher automatisch erzeugt wird. Selbstverständlich hab ich zuvor im Export P_IDX nicht ausgewählt. Der Import via Script-Editor (von Datei ausführen) dauerte knapp 7 Minuten (6:55), das war eine knapp 206 MB große SQL-Datei. Berechnungen, wie lange ein DS benötigte, könnt ihr sicher selbst anstellen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz