sqlite数据库大小低级控制

sqlite数据库大小低级控制,sqlite,Sqlite,我正在为sqlite数据库中的点开发一个简单的存储,问题是磁盘上的空间消耗稍微不令人满意。我的意思是: 为数据库生成某些数据的程序: #include <cstdlib> #include <cstdint> #include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { doubl

我正在为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;
}
紧随其后的数据库大小显示为3.3M,但数据的实际大小为100000*8字节*3=2.4M及以上

sqlite> create index points_index on points(id);
数据库大小增加了一倍多,达到5.1M

Q空间到哪里去了?我不是指索引空间,而是指存储数据的开销,以及如何控制存储/索引的低级行为,以及如何做到这一点


points数据库只是一个例子,我想存储一些类似于id->payload mapping的内容,其中payload size是预先知道的,并且对于每个id都是相同的。

运行。@CL谢谢,我不知道。我猜相关部分是文件的大小,以字节为单位。。。。。。。。。。。。。。。。。。。。。。。。。存储的用户有效负载5328896字节。。。。。。。。。。。。。。。。。。。。。。2799305 52.5%对此可以做些什么吗?尝试将id列设置为整数主键。谢谢,这样会自动创建索引,对吗?我也发现了这个。从本质上讲,它从中删除了一个隐藏的列database@CL据我所知,sqlite在主键列上使用64位ID。有没有办法告诉它使用32位?或者这与机器上指针的大小有关?
sqlite> create index points_index on points(id);