sqlite数据库大小低级别控制

时间:2015-05-22 09:43:05

标签: sqlite

我正在为sqlite数据库中的点开发一个简单的存储,问题是磁盘上的空间消耗略微不满意。这就是我的意思:

为数据库生成一些数据的程序:

#include <cstdlib>
#include <cstdint>
#include <iostream>

using namespace std;

int main() {
  int n;
  cin >> n;

  for(int i = 0; i < n; i++) {
    double lat = 180*(rand()*1.0/RAND_MAX);
    double lon = 180*(rand()*1.0/RAND_MAX);
    int64_t id = rand()*1LL*rand();
    cout << id << "," << lat << "," << lon << "\n";
  }

  return 0;
}

导入数据运行:

g++ filldb.cpp
echo 100000 | ./a.out > db.text
sqlite3 test.db
sqlite> create table points(id UNSIGNED INT, lat REAL, lon REAL);
sqlite> .separator ,
sqlite> .mode csv
sqlite> .import db.text points

此后的数据库大小显示3.3M,但&#34;真实&#34;数据大小为100000 *(8字节)* 3 = 2.4M且在

之后
sqlite> create index points_index on points(id);

数据库大小增加一倍以上5.1M

Q 空间在哪里(我不是指索引的空间,而是存储数据的开销)以及如何控制存储/索引的低级行为,并且可以做到了吗?

点数据库只是一个例子,我希望存储类似id -> payload映射的内容,其中有效负载大小事先已知,并且每个id都相同。

0 个答案:

没有答案