Amazon EC2和S3在使用Python / SQLite时?

问题描述

| 假设我在Amazon
S3
中存储了一个huge0 huge文件(例如500 [MB])。 在小型
EC2
实例上运行的
python
脚本可以直接访问和修改
sqlite
文件吗?还是我必须先将文件复制到
EC2
实例,然后在其中进行更改,然后再复制到
S3
? I / O是否有效? 这是我想要做的。如我所写,我在
S3
中有一个500 [MB]
sqlite
文件。我想开始说“ 9”,每个将读取文件一个子集并进行一些处理(每个实例将处理500 [MB]“ 0”文件一个不同子集)。然后,一旦处理完成,每个实例将仅更新它处理的数据的子集(如所解释的,进程之间不会有数据重叠)。 例如,假设
sqlite
文件有1M行:
instance 1
将处理(并更新)rows13ѭ行
instance 2
将处理(并更新)rows15ѭ行 .........................
instance 10
将处理(并更新)rows17ѭ行 有可能吗?听起来还可以吗?任何建议/想法都欢迎。     

解决方法

           我想开始说10个不同的Amazon EC2实例,每个实例将读取文件的一个子集并进行一些处理(每个实例将处理500 [MB] SQLite文件的一个不同子集) 您不能使用SQLite来执行此操作。在亚马逊基础设施上还是其他方式。 sqlite执行数据库级别的写锁定。除非所有十个节点都以独占方式执行读取,否则您将不会获得任何种类的并发性。甚至SQLite网站也这样说。   另一个RDBMS可能效果更好的情况         客户端/服务器应用程序   大量网站   大型数据集   高并发    您考虑过PostgreSQL吗?     ,        由于无法直接挂载S3,因此最好的选择是创建一个包含SQLite文件的EBS卷,并直接与另一个(控制器)实例中的EBS卷一起使用。然后,您可以创建该卷的快照,并将其归档到S3中。使用boto(Python API)之类的工具,您可以自动创建快照以及将备份移至S3的过程。     ,        如果您的数据库结构很简单,为什么不只使用AWS simpledb?或在您的一个实例上运行mysql(或另一个数据库)。     ,        您可以在Linux机器上安装S3存储桶。见下文:   s3fs-   http://code.google.com/p/s3fs/wiki/InstallationNotes   -这确实对我有用。它使用FUSE文件系统+ rsync同步文件   在S3中。保留所有副本   本地系统中的文件名&make   它看起来像一个文件/文件夹。 如果系统已经就位并且正在运行且具有大量数据,则很好。但是,如果您是从头开始构建的,那么我建议您为SQLite创建一个EBS卷,并使用此脚本创建EBS卷的快照:   https://github.com/rakesh-sankar/Tools/blob/master/AmazonAWS/EBS/ebs-snapshot.sh     ,        可以在ec2实例之间共享Amazon EFS。这是托管的NFS共享。 SQLITE仍会在写入时锁定整个数据库。 但是,SQLITE网站不建议使用NFS共享。但是,根据应用程序的不同,您可以在多个ec2实例之间共享只读数据库,并将处理结果存储在其他位置,然后将结果串联起来。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...