Amazon EC2 & S3 При использовании Python / SQLite? - PullRequest
3 голосов
/ 10 июня 2011

Предположим, у меня есть огромный SQLite файл (скажем, 500 [МБ]), хранящийся в Amazon S3. Может ли сценарий python, запущенный на небольшом экземпляре EC2 , получить прямой доступ и изменить этот SQLite файл? или я должен сначала скопировать файл в экземпляр EC2, изменить его там, а затем скопировать в S3?

Будет ли эффективен ввод / вывод?

Вот что я пытаюсь сделать. Как я уже писал, у меня есть файл размером 500 [МБ] SQLite в S3. Я хотел бы начать с 10 different Amazon EC2 instances, каждый из которых будет читать подмножество файла и выполнять некоторую обработку (каждый экземпляр будет обрабатывать свое подмножество файла 500 [МБ] SQLite). Затем, когда обработка будет завершена, каждый экземпляр будет обновлять только подмножество данных, с которыми он имел дело (как было объяснено, не будет перекрытия данных среди процессов).

Например, предположим, что в файле SQLite написано 1M строк :

instance 1 будет обрабатывать (и обновлять) строки 0 - 100000

instance 2 будет обрабатывать (и обновлять) строки 100001 - 200000

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

instance 10 будет обрабатывать (и обновлять) строки 900001 - 1000000


Это вообще возможно? Звучит нормально? любые предложения / идеи приветствуются.

Ответы [ 5 ]

5 голосов
/ 10 июня 2011

Я хотел бы начать, скажем, 10 разных экземпляров Amazon EC2, каждый из которых будет читать подмножество файла и выполнять некоторую обработку (каждый экземпляр будет обрабатывать свое подмножество файла SQLite размером 500 [МБ))

Вы не можете сделать это с SQLite; на инфраструктуре Амазонки или иным образом. sqlite выполняет блокировку записи на уровне базы данных. если все десять узлов не выполняют исключительно чтение, вы не достигнете какого-либо параллелизма. Даже веб-сайт SQLite так говорит.

Ситуации, когда другая СУБД может работать лучше

  • Клиент / серверные приложения
  • Сайты большого объема
  • Очень большие наборы данных
  • Высокий параллелизм

Рассматривали ли вы PostgreSQL?

2 голосов
/ 10 июня 2011

Если ваша структура БД проста, почему бы просто не использовать AWS simpledb ? Или запустите mysql (или другую БД) на одном из ваших экземпляров.

2 голосов
/ 10 июня 2011

Поскольку S3 нельзя подключить напрямую, лучше всего создать том EBS, содержащий файл SQLite, и работать непосредственно с томом EBS из другого (контроллера) экземпляра. Затем вы можете создать снимки тома и заархивировать его в S3. Используя такой инструмент, как boto (Python API), вы можете автоматизировать создание снимков и процесс перемещения резервных копий в S3.

1 голос
/ 10 июня 2011

Вы можете смонтировать S3 Bucket на вашем Linux-компьютере.Смотрите ниже:

s3fs - http://code.google.com/p/s3fs/wiki/InstallationNotes - это сработало для меня.Он использует FUSE file-system + rsync для синхронизации файлов в S3.Он сохраняет копию всех имен файлов в локальной системе и делает его похожим на ФАЙЛ / ПАПКУ.

Это хорошо, если система уже установлена ​​и работает с огромным набором данных.Но если вы создаете это с нуля, я бы предложил вам создать том EBS для SQLite и использовать этот сценарий для создания снимка вашего тома EBS:

https://github.com/rakesh-sankar/Tools/blob/master/AmazonAWS/EBS/ebs-snapshot.sh

0 голосов
/ 01 августа 2016

Amazon EFS может совместно использоваться экземплярами ec2. Это управляемый ресурс NFS. SQLITE по-прежнему блокирует всю БД при записи.

Сайт SQLITE не рекомендует использовать общие ресурсы NFS. Но в зависимости от приложения вы можете разделить базу данных только для чтения между несколькими экземплярами ec2 и сохранить результаты своей обработки где-то еще, а затем объединить результаты на следующем шаге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...