亚马逊 EC2 上的 MySQL 和 SQLite 比较

5
我有一个Java程序和PHP网站,计划在我的Amazon EC2实例上运行,并使用EBS卷。该程序从数据库读取和写入数据。该网站仅从相同的数据库中读取数据。
在AWS上,您需要支付IOPS(每秒IO请求)的数量来访问卷。哪种数据库具有最少的IOPS?此外,SQLite能够同时处理程序和网站的查询吗?

1
数据库有多大?如果您可以将整个数据库缓存到内存中,用于Web(只读)端,几乎可以消除该端的I/O。您可以在服务器代码中或使用内存中的SQLite数据库来实现此目的。 - Larry Lustig
数据库大约会有1-5GB大小。如果它在Java应用程序的内存中,Web服务器如何访问它? - Arjan
1
Java应用程序将针对磁盘上的数据库运行。Web应用程序将在内存中缓存该数据库,定期更新或在需要在内存中更新时从Java应用程序接收指令。可能在1GB下工作,但可能不适用于5GB。 - Larry Lustig
2个回答

10

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

这个网站“估计IO请求”有一个聪明的方法来计算您的实际IO并用它来估计您的EBS成本。您可以在模拟负载下在测试系统上运行您的应用程序,并使用这种技术来测量MySQL解决方案和SQLite解决方案之间的IO差异。

实际上,这可能并不重要。成本为每百万次IO请求0.10美元。在一个中等流量的电子商务网站上,我们每个月大约进行了3.15亿次IO请求,或者31美元。与EC2、存储和带宽费用相比,这是微不足道的,这些费用达到数千美元。您可以使用AWS成本计算器插入估计值并计算您的所有AWS成本。

您还应牢记,SQLite仅建议您将其用于低到中等流量的网站。对于高流量网站,MySQL是更好的解决方案。


截至2016年,SQLite处理大容量数据非常出色。对于高流量网站,我们经常遇到锁定错误,并不得不使用WAL(预写日志pragma journal_mode = WAL)以及每日cron来检查数据库(以防止运行失控的WAL文件)。 - Max

0

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

内存中的SQLite适用于独立或嵌入式程序。

不要仅使用内存中的SQLite:

  • 当您在多个进程之间共享数据库时

  • 当您有一个基于PHP的网站时,在这种情况下,您将无法利用PHP FastCGI


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接