Gibt es einen Unterschied zwischen integer und bit - (n) Datentypen für eine Bitmaske?
Ich arbeite mit einer Tabelle in einem PostgreSQL-Datenbank, die mehrere Boolesche Spalten bestimmen in einem Staat (z.B. published
, visible
usw.). Ich möchte eine einzelne Spalte status gespeichert werden alle diese Werte so gut wie möglich neue in form einer Bitmaske. Gibt es einen Unterschied zwischen integer
und bit(n)
in diesem Fall?
Das wird eine ziemlich große Tabelle, denn es speichert Objekte, die von Nutzern erstellt, die über ein web-interface. Also ich denke, ich werde verwenden müssen (Teil -) Indizes für diese Spalte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur ein paar Variablen würde ich erwäge, separate
boolean
Spalten.boolean
Spalten erlaubenNULL
Werte für die einzelnen bits, falls Sie Sie brauchen. Sie können jederzeit Spalten definierenNOT NULL
wenn Sie nicht.Wenn du mehr als eine hand voll Variablen, aber nicht mehr als 32, ein
integer
Spalte kann am besten dienen. (Oder einbigint
für bis zu 64 Variablen.)=
Betreiber).varbit
oderboolean
.Mit noch mehr Variablen, oder wenn Sie wollen, zu manipulieren-die Werte, die eine Menge, oder wenn Sie nicht über riesige Tabellen oder Speicherplatz /RAM ist kein Problem, oder wenn Sie nicht sicher sind, was zu Holen, würde ich prüfen,
bit(n)
oderbit varying(n)
(kurz:varbit(n)
.Nur für 3 bits von Informationen, individuelle
boolean
Spalten mit 3 bytes, eineinteger
benötigt 4 Byte (vielleicht zusätzliche Ausrichtung Polsterung) und einebit string
6 bytes (5 + 1).Für 32 bits von Informationen, eine
integer
noch benötigt 4 Byte (+ Polsterung), einbit string
belegt 9 bytes für die gleiche (5 + 4) undboolean
Spalten besetzen 32 bytes.Optimieren Speicherplatz weiteren müssen Sie verstehen, die Speichermechanismen von PostgreSQL, speziell data alignment. Mehr in diesem Zusammenhang zu beantworten.
Diese Antwort , wie Transformation der Arten boolean, bit(n) und integer Hilfe sein können, zu.
integer
Spalte.Können Sie die bit-string-Funktionen direkt auf einen bit-string, ohne die Notwendigkeit der cast von integer.