减少应用程序和数据库的I / O.

时间:2011-03-24 20:44:39

标签: python mysql amazon-ec2 mysql-management

有没有办法减少与mysql或python脚本相关的I / O?我正在考虑使用EC2并且成本似乎没问题,除非我无法真正预测我的I / O使用情况,我担心它可能会使我失去成本。

我基本上开发了一个python脚本来解析数据并将其上传到mysql中。一旦它在mysql中,我对它做了一些相当重的分析(创建新的列,表...基本上对大型数据集进行了大量的数学和基于财务的分析)。那么有没有任何设计最佳实践来避免繁重的I / O?我认为memcached将所有内容存储在内存中并从那里访问它,有没有办法让mysql或其他脚本也这样做?

我现在正在另外一台主机上运行脚本,并且有2台演出的ram,但我看的ec2实例大约有8场演出,所以我想知道我是否可以使用额外的内存来节省一些钱。 / p>

2 个答案:

答案 0 :(得分:0)

通过IO我假设你的意思是磁盘IO ...并且假设你可以将所有内容都装入内存舒适。你可以:

  • 禁用您的盒子上的交换†
  • 在处理时使用mysql MEMORY表(或者如果您只是为了方便SQL查询而使用数据库,可考虑在内存存储中使用Sqlite3

另外:除非您使用的是EBS,否则我认为亚马逊不会对您的实例收取IO费用。 EBS比实例存储慢得多,所以只有在需要持久性时才使用它,即。而不是在你处理数据的时候。

†可能是个坏主意

答案 1 :(得分:0)

您没有真正指定是写入还是读取。我的猜测是你可以在ramdisc的一个mysql实例中完成所有操作(Linux下的tmpfs)。

诸如ALTER TABLE和复制大数据之类的操作最终会产生大量IO请求,因为它们会移动大量数据。这与你刚刚获得大量随机(或更可预测的查询)不一样。

如果是批处理操作,也许你可以在tmpfs实例中完全完成。

可以在机器上运行多个mysql实例,在tmpfs上启动实例非常容易 - 只需在tmpfs中使用带有datadir的mysql_install_db,然后使用适当的参数运行mysqld。坚持在一些shell脚本中,你会得到它启动。因为它在ramfs中,它不需要为缓冲区使用太多内存 - 只需将它们设置得相当小。