AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Datenbankgröße
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Datenbankgröße

Ein Thema von haentschman · begonnen am 2. Mai 2014 · letzter Beitrag vom 3. Mai 2014
Antwort Antwort
Seite 4 von 4   « Erste     234   
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#31

AW: Firebird Datenbankgröße

  Alt 2. Mai 2014, 20:07
Firebird verwendet eine RLE Komprimierung mit einem Byte für die Länge, es ist also für den Speicherbedarf egal ob das Feld als
Varchar(10) oder Varchar(100) definiert wird, wenn es meist weniger sind wie 8 Char im Varchar

das Varchar hat ein Integer(?16Bit?) als Länge das Varchar(10) belegt also maximal 12 Byte (Single Byte Charset vorrausgesetzt)

Auf der anderen Seite hat ein CHAR Feld immer nur die angegebene Länge also Char(10) hat eine Länge von 10
wird aber mit Spaces gepadded

zu beachten ist hier natuerlich auch der definierte Zeichensatz
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#32

AW: Firebird Datenbankgröße

  Alt 3. Mai 2014, 12:34
zum vor und nachteil von char oder varchar bei Firebird:

Beim Speichern braucht Firebird für ein varchar mit gleichem Inhalt 2 Byte mehr als wenn es in einem Char gleicher maximallänge gespeichert wäre. Darin speichert Firebird die Datenlänge. Bei x Millionen Records also schon ein Vorteil, wenn man den char nimmt, der braucht diese beiden Bytes nicht. Abgesehen von den beiden Längenbytes speichert Firebird Inhalte von char und varchar in gleicher Länge, d.h. nahezu immer die reinen benutzten bytes plus ein wenig Overhead (lange chars/varchars mal ausgenommen).

Leider kein Vorteil ohne Nachteil, denn während varchars im Netzwerk als reine Nutzdaten + overhead übertragen werden, werden chars mit Leerzeichen aufgefüllt, leider auch + overhead. Bei den Beispieldaten hier sind das mit 3 Records 20 Byte (188 zu 168 Byte) weniger, also ca. 10 % weniger netzwerktraffic, wenn man den varchar nimmt. Da das Netzwerk meistens wesentlich langsamer ist als der Zugriff auf die Festplatte bzw der bereits im Ram gecachten Daten, ist bei netzwerkintensiven Programmen meistens der varchar vorteilhaft, bei archivierten Daten, die selten abgefragt werden oder wirklich festen Längen aber manchmal eben auch der char.
Dann bringt es dann ggf. wesentlich mehr, die von dir beschriebenen Varianten der Messwerte über Nachschlagetabellen mit einem 4 Byte integer als Foreign Key zu verbinden, wenn man schon um jedes Byte kämpfen will.

Datenpaket mit varchar

Code:
 
CREATE TABLE T1 (
    ID  BIGINT NOT NULL,
    TXT VARCHAR(20)
);

Daten

ID    TXT
1    ABC
2    ABCDEF
3    ABCDEFGHIJKLMNOP

SQL

select * from T1

Netzwerkprotokoll Ausschnitt mit tcpipexpert erstellt

## 12:06:16:597 Channel 2; DATA (Server -> Client): Length= 168
00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 00                 
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00                 
00 00 00 42 00 00 00 00 00 00 00 01 00 00 00 00     B          
00 00 00 01 00 00 00 00 00 00 00 03 41 42 43 00              ABC
00 00 00 00 00 00 00 42 00 00 00 00 00 00 00 01         B      
00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 06                 
41 42 43 44 45 46 00 00 00 00 00 00 00 00 00 42  ABCDEF        B
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 03                 
00 00 00 00 00 00 00 10 41 42 43 44 45 46 47 48          ABCDEFGH
49 4A 4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 42  IJKLMNOP      B
00 00 00 64 00 00 00 00                             d

Datenpaket mit char

Code:
CREATE TABLE T2 (
    ID  BIGINT NOT NULL,
    TXT CHAR(20)
);

ID   TXT
1   ABC
2   ABCDEF
3   ABCDEFGHIJKLMNOP

SQL

select * from T2

Netzwerkprotokoll Ausschnitt mit tcpipexpert erstellt

12:06:29:002 Channel 2; DATA (Server -> Client): Length= 188
00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 00                 
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00                 
00 00 00 42 00 00 00 00 00 00 00 01 00 00 00 00     B          
00 00 00 01 00 00 00 00 41 42 43 20 20 20 20 20          ABC    
20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00                 
00 00 00 42 00 00 00 00 00 00 00 01 00 00 00 00     B          
00 00 00 02 00 00 00 00 41 42 43 44 45 46 20 20          ABCDEF
20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00                 
00 00 00 42 00 00 00 00 00 00 00 01 00 00 00 00     B          
00 00 00 03 00 00 00 00 41 42 43 44 45 46 47 48          ABCDEFGH
49 4A 4B 4C 4D 4E 4F 50 20 20 20 20 00 00 00 00  IJKLMNOP      
00 00 00 42 00 00 00 64 00 00 00 00                 B  d
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von IBExpert ( 3. Mai 2014 um 12:42 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Firebird Datenbankgröße

  Alt 3. Mai 2014, 13:00
Zitat:
Beim Speichern braucht Firebird für ein varchar mit gleichem Inhalt 2 Byte mehr als wenn es in einem Char gleicher maximallänge gespeichert wäre.
Da in diesem Fall die Maximallänge als absolutes Maxiumium zu sehen ist, und im Durchschnitt viel kürze Daten vorliegen, ist VARCHAR wohl die richtige Wahl.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz