【发布时间】:2016-05-06 16:55:42
【问题描述】:
我有这种记录:
- 名称 varchar(128)
- 说明 varchar(64)
- 字段 varchar(32)
(名称、描述)的组合必须是唯一的,并且需要为 名称 编制索引以便快速搜索/检索。更新不频繁,但很大,例如我可能一次添加 100 万条记录,但全天有大量读取。
我有超过 2 亿条这样的记录,未来可能会变成 300 条,当我尝试将它添加到 MySQL 时,DB 已经变得非常庞大,我正在查看 200GB+ 以及所有索引等。有没有节省空间的方法来构造这些数据。任何数据库技术都适合我,只要它不需要大量内存并且使用更少的磁盘。
2 亿 * (128+64+32) = ~50GB 数据。不知道 MySQL 如何存储数据,但我猜它为唯一键(124+64)创建了一个索引,所以我们已经在谈论 50GB + ~index 40Gb 的数据。还有一些其他开销,可能是由于下面建议的碎片。
谢谢,提前!
【问题讨论】:
-
您的索引是否碎片化?对于 2 亿行的新表来说,这听起来有很多空间
-
2 亿 * (128+64+32) = 50GB 数据。不知道 MySQL 如何存储数据,但我猜它为唯一键(124+64)创建了一个索引,所以我们已经在谈论 50GB + 索引 40Gb 的数据。我假设索引是碎片化的,这会增加更多空间。我正在尝试降低存储成本,因为文件越大,服务器空间、复制和备份的成本就越高。
-
90GB 不是那么大。如果您对磁盘大小有疑问,请尝试使用 tokuDB 或使用 InnoDB 的压缩格式。
-
您是否需要在关系数据库中存储非关系信息?您对这些数据进行了哪些类型的查询?
-
我对其他数据库持开放态度。 99% 的查询执行非常简单的查找。只要它可以处理来自多个进程的同时查找。