使用Python / SQLite时的Amazon EC2与S3?

4 投票
5 回答
8322 浏览
提问于 2025-04-16 19:17

假设我有一个很大的 SQLite 文件(比如说,500MB),存储在亚马逊的 S3 上。请问,一个在小型 EC2 实例上运行的 python 脚本能否直接访问和修改这个 SQLite 文件?还是说我必须先把文件复制到 EC2 实例上,在那里修改,然后再复制回 S3

这样做的输入输出效率会高吗?

我想做的是这样的。正如我所说,我在 S3 上有一个500MB的 SQLite 文件。我想启动大约 10个不同的亚马逊 EC2 实例,每个实例会读取文件的一部分并进行处理(每个实例处理的都是500MB SQLite 文件的不同部分)。然后,一旦处理完成,每个实例只会更新它处理过的数据部分(如前所述,处理之间的数据不会重叠)。

举个例子,假设这个 SQLite 文件有100万行

实例 1 会处理(并更新)第 0 - 100000

实例 2 会处理(并更新)第 100001 - 200000

.........................

实例 10 会处理(并更新)第 900001 - 1000000


这样做有可能吗?听起来可以吗?欢迎任何建议或想法。

5 个回答

2

如果你的数据库结构很简单,为什么不直接使用AWS simpledb呢?或者在你的某个服务器上运行mysql(或者其他数据库)也可以。

2

因为S3不能直接挂载,所以最好的办法是创建一个EBS卷,把SQLite文件放进去,然后从另一个(控制)实例直接使用这个EBS卷。你可以对这个卷创建快照,然后把它存档到S3里。使用像boto这样的工具(Python的一个接口),你可以自动化快照的创建和把备份移动到S3的过程。

6

我想启动10个不同的亚马逊EC2实例,每个实例会读取文件的一部分并进行一些处理(每个实例会处理500MB的SQLite文件中的不同部分)

你不能这样做,SQLite不支持这种操作,无论是在亚马逊的基础设施上还是其他地方。SQLite在数据库层面上会进行写入锁定。除非这10个实例都是在进行只读操作,否则你无法实现并发处理。甚至SQLite的网站也这么说。

在以下情况下,其他关系型数据库管理系统可能更合适:

  • 客户端/服务器应用
  • 高流量网站
  • 非常大的数据集
  • 高并发

你考虑过使用PostgreSQL吗?

撰写回答