存储模型和数据布局(Storage Models & Data Layout)
对于内存数据库而言,它的结构大致如下
可以将之理解为一个大的数组,通过索引(或者直接扫描全部内存)得到所需要的值和存储地址,则通过页和页偏移等信息找到需要的数据。
如果页面是不定长的数据块,可能需要做一个二次指针才可以。
类型表示
- INTEGER/BIGINT/SMALLINT/TINYINT
- C/C++ 的表示方法
- FLOAT/REAL vs. NUMERIC/DECIMAL
- IEEE-754 Standard / Fixed-point Decimals
- VARCHAR/VARBINARY/TEXT/BLOB
- Pointer to other location if type is ≥64-bits
- Header with length and address to next location (if segmented), followed by data bytes.
- TIME/DATE/TIMESTAMP
- 32/64-bit integer of (micro)seconds since Unix epoch
感觉这儿怎么翻译都不太准确,就直接看就好了。
可变精度数字
如,FLOAT, REAL/DOUBLE
使用原生C/C++类型的不精确的可变精度的数字类型。这样的优点就是,它的速度比较快;缺点就是会损失精度。
举个例子
#include <stdio.h>
int main(int argc, char* argv[]) {
float x =