Ich habe in bit string
letzter Zeit etwas über den Datentyp gelernt und bin ziemlich neugierig auf:
Am Ende dieser Dokumentseite befindet sich der Satz:
... plus 5 oder 8 Byte Overhead, abhängig von der Länge des Strings
Wie werden Bitstrings in anderen Sprachen wie PHP, Java, C #, C ++ usw. über Treiber wie Npgsql, ODBC usw. behandelt?
Bei Frage 1 ist die Verwendung von smallint oder bigint wesentlich speichereffizienter und bietet möglicherweise einen Leistungsgewinn, da Ganzzahlen überall unterstützt werden. Die meisten Programmiersprachen verarbeiten problemlos Bitoperationen für Ganzzahlen. Wenn dies der Fall ist, wozu dient dann der Datentyp Bitfolge? Ist es nur für Fälle, die eine große Anzahl von Bitmasken benötigen? Bitfeldindizierung vielleicht? Ich bin eher neugierig, wie die Bitfeldindizierung in PostgreSQL durchgeführt wird.
Für # 2 bin ich verwirrt, mehr als neugierig. Was ist zum Beispiel, wenn ich Wochentag-Bitmasken in einem Bit (7) -Feld speichere, ein Bit für einen Tag, wobei das niedrigste Bit für Montag steht. Dann frage ich nach dem Wert in PHP und C ++. Was bekomme ich? In der Dokumentation steht, dass ich eine Bit-Zeichenfolge haben werde, aber eine Bit-Zeichenfolge kann ich nicht direkt verwenden - wie bei ganzen Zahlen. Sollte ich dann in diesem Fall das Bitfeld aufgeben?
Kann jemand erläutern, warum und wann ich etwas oder etwas variieren sollte?
quelle
Antworten:
Wenn Sie nur ein paar Variablen haben, würde ich in Betracht ziehen, separate
boolean
Spalten zu führen.NULL
Werte für einzelne Bits, falls Sie diese benötigen sollten. Sie können immer Spalten definieren,NOT NULL
wenn Sie dies nicht tun.Speicher optimieren
Wenn Sie mehr als eine Hand voll Variablen haben , aber weniger als 33, eine
integer
Spalte können Sie am besten dienen. (Oder abigint
für bis zu 64 Variablen.)=
Operator).bit string
oderboolean
.Mit noch mehr Variablen, oder wenn Sie die Werte viel manipulieren möchten, oder wenn Sie nicht über große Tabellen und Speicherplatz / RAM verfügen, ist dies kein Problem, oder wenn Sie nicht sicher sind, was Sie auswählen sollen, würde ich
bit(n)
oder inbit varying(n)
Betracht ziehen .Beispiele
Für nur 3 Informationsbits kommen einzelne
boolean
Spalten mit 3 Bytes aus, eineinteger
benötigt 4 Bytes und einebit string
6 Bytes (5 + 1).Für 32 Informationsbits
integer
benötigt ein noch 4 Bytes, einbit string
belegt 9 Bytes für dasselbe (5 + 4) undboolean
Spalten belegen 32 Bytes.Weitere Lektüre
quelle
Alle PostgreSQL-Typen sind für einige Dinge nützlich und für andere weniger nützlich. Im Allgemeinen müssen Sie sich erst um die Funktionalität und später um die Leistung kümmern. PostgreSQL verfügt über eine Vielzahl von Funktionen zur Bearbeitung verschiedener Datentypen, die keine Ausnahme bilden.
Ich würde erwarten, auf der Anwendungsebene, wenn Ihr DB-Treiber es durch eine Art Typkonvertierung behandelt, würden Sie eine Zeichenfolgendarstellung erhalten und müssen dies behandeln. Daher kann es in dieser Eigenschaft nützlich sein oder auch nicht.
Dies ist wahrscheinlich hilfreich, wenn Sie Datensätze basierend auf bitweisen Operationen auswählen möchten, z. B. bitweise oder bitweise und oder die Daten in SQL-Abfragen anderweitig bearbeiten möchten. Wenn Sie dies nicht tun, sind viele der esoterischeren Funktionen von PostgreSQL weniger hilfreich.
Beachten Sie auch, dass es für längere Zeichenfolgen von Binärinformationen eine große Objektschnittstelle gibt, mit der Sie Streaming usw. durchführen können, und eine Bytea-Schnittstelle, die eine kompaktere Darstellung von Zeichenfolgen ermöglicht.
tl; dr .: Wenn du es brauchst, wirst du es wissen. Andernfalls legen Sie es im Abschnitt "Für zukünftige Verwendung reserviert" ab.
quelle