Warum enthalten Datenbankschemata oft 32, 64, 128 usw.?

8

Ich verstehe, dass 2, 4, 8, 16, 32, 64, 128, 256 ... die Dezimaläquivalente von Binärziffern sind.

Gibt es einen Grund, warum diese in Datenbanken verwendet werden? Zum Beispiel sind VARCHAR-Felder oft 255 Zeichen lang. Da (wie ich annehme) jedes Zeichen ein Byte ist, warum gibt es einen Unterschied zwischen der Verwendung von 255 Zeichen und der Verwendung von 257 Zeichen?

    
Leo Jiang 23.02.2012, 02:47
quelle

4 Antworten

4

Bei varchar -Spalten wird die -Länge mit Daten gespeichert, die vorzeichenlose Ganzzahlen in den führenden Bytes der Daten verwenden. Die geringste Anzahl von Bytes wird verwendet; Ein Byte kann Längen von 0 bis 255, zwei Bytes von 0 bis 65535 usw. speichern. Indem Sie die Länge 255 eingeben, erhalten Sie den "größten Wert" aus dem Minimum eines Längenbytes.

In den vergangenen Tagen waren einzelne Bytes pro Zeile, die gespeichert wurden, wert, gespeichert zu werden. Obwohl jetzt die Festplatte billig ist, ist das Denken geblieben, vor allem von grauhaarigen DBAs.

Es hat keinen Vorteil, eine Länge mit einer Potenz von 2 zu wählen, zum Beispiel varchar(64) - es ist nur eine Gewohnheit / Konvention (ich folge ihr sogar - und ich weiß nicht warum!).

    
Bohemian 23.02.2012, 03:24
quelle
1

Es werden nicht nur Datenbankschemata, sondern so ziemlich jedes Programmierartefakt gefunden, das viele Zahlen der Form 2 ^ N oder 2 ^ N-1 enthält. Während einige dieser Anwendungen sinnvoll sind (z. B. 2 ^ 32-1 ist die größte Zahl, die als eine standardmäßige Ganzzahl ohne Vorzeichen in vielen Maschinenarchitekturen darstellbar ist), sind die meisten Anwendungen mit Potenzen von 2 weniger notwendig. In der Praxis betrachten alte Hacker Mächte von 2 als heilig und verehren sie so.

    
Dave Griffith 23.02.2012 02:50
quelle
1

Die Daten in Datenbanken sind oft in Seiten organisiert. Diese Seiten sind fast universell mit Speichergrenzen für das Speicher- und Cache-Management ausgerichtet. Die Auswahl von 2 ^ n Größen für Ihre Daten ist gut, um die Verwendung von Speicherplatz in Ihrer Datenbank zu optimieren.

Hinweis: Abhängig von der RDBMS-Engine ist 256 möglicherweise nicht die beste Wahl für Zeichenfolgen mit variabler Länge aus der Speicherausrichtungsperspektive, da die Länge der Zeichenfolge ebenfalls Speicherplatz benötigt, dh ein varchar(256) belegt 258 Byte.

    
dasblinkenlight 23.02.2012 02:54
quelle
1

Es ist mehr Gewohnheit als alles andere. Es gibt nichts Magisches an varchar (32) oder varchar (64), ebenso gibt es nichts Magisches über die Standardwerte, die die visuellen Werkzeuge stattdessen benutzen (z. B. varchar (50)). Viele dieser oberen Grenzen sind in den Köpfen der Menschen verankert, da 640k genug Speicher für jedermann sind und wir uns wirklich um jedes einzelne Byte kümmern müssen.

In vielen Fällen kommt es auf einen gemeinsamen Nenner an. In einem früheren System hatte ich in den Produktmanagern keine Ahnung was ihre Anforderungen waren. Sie wollten einen Namen speichern, aber sie wussten nicht, woraus die Domain der Namen wirklich bestand - aber einer von ihnen gab an, dass sie von einem Nachnamen gehört hatten & gt; 50 Zeichen, also wusste er, dass es mehr als 32 und mehr als 50 sein musste. Wir kamen mit 64 zurück, er stimmte zu, dass das genug sei, und genau das gibt es heute noch AFAIK.

Obwohl wir einen technischen Grund für die E-Mail (varchar (320)) hatten, deutete der Standard zu diesem Zeitpunkt als 320 Zeichen auf 64 Zeichen für Benutzername / lokales Teil, 255 Zeichen für Domänennamen und 1 Zeichen für @. . Die meisten anderen Entscheidungen basierten auf Präzedenz (zB alle nachfolgenden Namen folgten dem oben beschriebenen nvarchar (64) -Modell) oder Logik (zB URLs müssen nicht nvarchar (max) sein, aber abhängig von den Standard - und Browserfähigkeiten der Zeit, sie waren entweder Varchar (2048) oder Varchar (4096). In diesem Fall nicht, weil es eine Potenz von 2 war, sondern weil die Software oder Standards von jemand anderem ihre Sachen so gebaut haben, dass sie eine Potenz von 2 verwenden.

    
Aaron Bertrand 23.02.2012 03:42
quelle

Tags und Links