最近接到一个小的新需求,需求很容易实现,就是定时把一些分析得出的指标从 Elasticsearch 中离线存储到 Mysql 数据库中,方便以后查询。离线存储的原因是因为资源不足,Elasticsearch 会自动删除 15 天以前的原始数据,而且 Elasticsearch 每天都会新产生数十万到数百万的数据,依据这些原始数据只会产生几十条分析结果,显然离线存储到 Mysql 中更为合理。在处理这个需求时,接着就遇到了一个小问题,当前业务组没有数据库资源,需要申请,而且由于资源不足,不能随便申请,要给出合理的预估值。这样,就涉及到数据库占用空间大小的预估了,本文记录一种简单的方法。
数据大小和索引大小预估
我当前使用的是 Mysql 数据库,其它数据库产品查询方式可能会有所不同,请根据实际情况操作。
在数据库中,使用系统数据库的表 TABLES 进行查询:1
2
3
4SELECT data_length,index_length
FROM information_schema.TABLES t
WHERE table_schema='your_db_name'
AND table_name = 'your_table_name';
其中,系统数据库是 information_schema,存储表信息的表是 TABLES,data_length、index_length 这 2 个字段表示数据大小、索引大小,单位是字节 B。