【发布时间】:2011-09-18 21:40:45
【问题描述】:
我有一个 MySql 表,其中包括:
- ~2500 万行(当前)
- 3 个索引
- 每天,爬虫会增加大约 300 万行
- 我目前并没有看得太远,但对 db 的最终估计可能是 ~CONST*e9 行
- 目前为 9.5giga
- innodb 并且在插入时正在读取它
数据本身由约 100 个字符的文本 + 几个包含元数据的字段组成。索引是唯一 ID、作者姓名和作者 ID。
到目前为止,一切都很顺利,但是现在服务器很难处理新数据的插入(每个插入大约 10 秒,增加了大约 3k 行)。我正在努力寻找解决这个问题的方法。我考虑的事情:
- 在插入时执行索引需要花费一些力气。也许在插入时不这样做,并且只有在 X 插入添加索引之后。
- 将数据分区到不同的表中。
- 爬入小数据库,每 X 分钟/天,将数据移动到大数据库。
- 移动到不同的数据库。我对 NoSql 不够熟悉,能帮我解决这些问题吗?用起来费劲吗?
每个选项都有其子选项和困境,但我认为我应该首先专注于有一个方向。我应该走哪条路线,为什么?有没有我应该考虑的不同道路?
顺便说一句 - 还有一个选项可以不保留所有数据,而只保留我真正显示的部分,但这将导致无法在数据显示之前进行的过程中进行一些功能更改。
【问题讨论】:
-
数据是什么样的?和索引?
-
更新了问题的答案。
-
innodb 还是 myisam?插入时该表是否用于读取查询?
-
@ggiroux 更新了问题:“innodb 并且在插入时正在读取它”
-
服务器有多少内存,mysql允许使用多少?在这样大小的数据库上,我会检查各种缓存是否溢出,以至于 MySQL 必须更频繁地访问磁盘,这是一个巨大的减速(磁盘比 ram 慢许多数量级)。
标签: mysql database database-design indexing nosql