我有一个大数据(某些TB),我必须保存在数据库中。
我有一些可以保存为少量的列(columnA有20个唯一值1 ... 20,columnB有10个值等等。)
有没有办法将这些数据保存在数据库中只有4位,5位......(AS NEEDED)?不是像小int或类似的1字节。
如果那样的话。我应该使用什么数据库引擎(针对这种特定情况)?答案 0 :(得分:2)
如果您真的想要,可以将多个值打包到一个字节中,并使用虚拟列和位操作来提取单个值:
Oracle 11g R2架构设置:
CREATE TABLE test (
value CHAR(1 BYTE),
five_bits NUMBER(2,0) GENERATED ALWAYS
AS ( BITAND( ASCII(value), 1+2+4+8+16 ) ) VIRTUAL,
two_bits NUMBER(1,0) GENERATED ALWAYS
AS ( BITAND( ASCII(value), 32+64 ) / 32 ) VIRTUAL,
one_bit NUMBER(1,0) GENERATED ALWAYS
AS ( BITAND( ASCII(value), 128 ) / 128 ) VIRTUAL
);
INSERT INTO test ( value ) VALUES ( CHR( 20 + 2*32 + 0*128 ) );
查询1 :
SELECT * FROM test
<强> Results 强>:
| VALUE | FIVE_BITS | TWO_BITS | ONE_BIT |
|-------|-----------|----------|---------|
| T | 20 | 2 | 0 |
但是,使用此变通方法会产生性能开销,我建议保存有限数量的字节可能不值得。