2011-11-09 206 views
3

我有一个Java程序和PHP网站,我打算在EBS卷上的Amazon EC2实例上运行。该程序写入和读取数据库。该网站只能从相同的数据库中读取。MySQL vs亚马逊EC2上的SQLite

在AWS上,您需要支付卷的IOPS(每秒I/O请求)数量。哪个数据库的IOPS最少?另外,SQLite可以同时处理来自程序和网站的查询吗?

+1

数据库有多大?如果你可以在网络(只读)端缓存整个内存,你几乎可以消除那边的I/O。您可以在服务器代码中或使用内存中的SQLite数据库执行此操作。 –

+0

数据库将大约为1-5GB。如果它存在于Java应用程序的内存中,那么Web服务器将如何访问它? – Arjan

+1

Java应用程序将对磁盘上的数据库起作用。 Web应用程序会将该数据库缓存在内存中,要么定期更新,要么在需要更新内存时从Java应用程序接收指令。可能会工作在1GB,但可能不会在5GB。 –

回答

7

IO的数量将取决于你如何配置MySQL以及应用程序如何使用数据库。缓存,日志文件大小,数据库引擎,事务处理等都将影响你做多少IO。换句话说,虽然我猜测SQLite会有更多的磁盘IO,但可能无法预先预测,因为数据库文件必须一直打开和关闭,而MySQL写入和读取(特别是)可以被缓存在MySQL本身的内存中。

这个网站,Estimating I/O requests,有一个整洁的方法来计算你的实际IO和使用它来估计你的EBS成本。您可以在模拟负载下在测试系统上运行您的应用程序,并使用此技术来衡量MySQL解决方案与SQLite解决方案之间的IO差异。

实际上,这可能并不重要。成本为每百万IO请求0.10美元。在拥有大量数据库访问权限的中等流量电子商务网站上,我们每月处理大约3.15亿IO请求,即31美元。与数以千计的EC2,存储和带宽成本相比,这是微不足道的。您可以使用AWS cost calculator来插入估算值并计算您的所有AWS成本。

你还应该记住,SQLite的人只有recommend that you use it for low to medium traffic websites。 MySQL是高流量站点的更好解决方案。

+0

截至2016年,sqlite处理量真的很好。对于高流量的网站,我们确实发生了很多锁定错误,不得不使用WAL(提前写入日志'pragma journal_mode = WAL')以及每日cron到检查点数据库(以防止失控的wal文件) – John

0

是的SQLite可以同时处理来自程序和网站的查询。 SQLite使用文件级锁定来确保一致性。

在内存中SQLite旨在用于独立或嵌入式程序。

只在内存中的SQLite不要使用:

  • 当您共享多个进程之间的分贝

  • 当你有一个基于PHP的网站,你将不能够充分利用在这种情况下, php fastcgi