2015-04-15 3 views
10

Я работаю над облачным приложением Python/MySQL с довольно сложной архитектурой. Работа с этой системой (в настоящее время) создает временные файлы (обычный текст, YAML) и файлы журналов, и я решил сохранить их в файловой системе.Как хранить/хранить временные файлы и журналы для облачного приложения?

Однако наш потенциальный оператор облака предоставляет только временную, непостоянную файловую систему для приложений. Это означает, что первоначальный подход с сохранением временных файлов и журналов не будет работать.

Должен быть стандартный подход к решению этой проблемы, о котором я не знаю. Я не хочу использовать хранилище объектов, такое как S3, потому что оно расширяет текущий стек и увеличивает сложность. Но у меня есть возможность установить дополнительное специализированное приложение (если оно сделано для этой цели) на другом сервере с одним и тем же провайдером. Единственное ограничение заключается в том, что это должно быть в PHP, Python, MySQL.

Общий вопрос: Каков стандартный подход к хранению файлов, когда нет постоянной файловой системы?

И для моего конкретного случая: Есть ли решение с использованием Python и/или MySQL, которое просто и быстро реализовать? Неужели это для Редиса?

+0

Это слишком расплывчато для ответа. Можете ли вы указать, какое облачное решение вы хотите использовать? Вы хотите сохранить их в одном облаке или на другом сервере? Можете ли вы использовать что-либо еще помимо Python/MySQL? Можете ли вы установить что-нибудь еще? –

+0

Добавлена ​​дополнительная информация. Думал, что вопрос был общим ... стандартным подходом к хранению файлов, когда нет постоянной файловой системы ... – boadescriptor

ответ

2

Как вы задаете два вопроса, позвольте мне ответить на них один за другим:

Общий вопрос: Что такое стандартный подход к хранению файлов при нет постоянной файловой системы?

Если содержимое файла не подходят для регулярного хранения базы данных, но вы действительно хотите сохранить сам файл (например, изображения, исполняемые файлы и т.д.) постоянно, Amazon S3 и подобные услуги, как правило, ваш путь , Существуют также бесплатные альтернативы, доступные как Riak, Aerospike или более тяжелые Cassandra.

Хотя все эти услуги бесплатны (или доступны бесплатные версии), они потребуют установки и текущего обслуживания. Кроме того, вы вряд ли достигнете того же уровня доступности и масштабируемости, что и размещенные облачные сервисы, такие как S3. Если вы учтете это, экономия за счет использования облачного сервиса, такого как S3, по крайней мере сомнительна. Но, как всегда, YMMV.

И для моего конкретного случая: есть ли какое-либо решение с использованием Python и/или MySQL, которое просто и быстро реализовать? Неужели это для Редиса?

Ваш вопрос немного противоречив.Вы упомянули, что ваше приложение генерирует временных файлов, но вы не хотите их потерять?

Если ваши файлы являются временными, решение, как Redis или memcached бы отлично подходит для работы, до тех пор, пока у вас есть понимание того, что оба они кэши и данные будут потеряны при перезагрузке, или (если позволяет Redis снимки), по крайней мере, не гарантируют, что записи сохраняются на диске.

Если вы не хотите расширять свой стек, а Redis не дает вам уровней гарантий, которые вы ищете, MySQL поддерживает хранение blobs, который может использоваться для хранения файлов (двоичных данных) в MySQL. Это, как правило, не очень хорошо масштабируется, но опять же, решение о том, приемлемо для вас, зависит от вашей ситуации. (См. Также this отличный ответ относительно файлов pro и con для хранения файлов в MySQL.)

0

Сохраните ваши журналы в MySQL. Просто сделайте таблицу, как это:

 
x***time*****source*****action 
---------------------------- 
****unixtime*somemodule*error/event 

Ваше временное хранение должно быть достаточно для временных файлов :)

+0

Хорошо для журналов, но где я помещаю временные текстовые файлы? Они должны упорствовать в течение некоторого времени, пока я не удалю их вручную. – boadescriptor

+0

Вы не предоставили никаких других решений, кроме MySQL. Так что, наверное, MySQL. Другого варианта нет ... – hoschiCZ

+0

Конечно, но не в структуре таблицы, которую вы показали. Я предполагаю, что должна быть какая-то оптимизация. Я также сказал Python, так что, может быть, Redis будет другим вариантом? – boadescriptor

0

Redis является плохим выбором для этой задачи. Он хранит все данные в памяти, поэтому это дорого и нецелесообразно для длительного хранения файлов журнала.

MySql в порядке, однако MongoDB является более гибким и быстрым решением. На самом деле это одна из его основных случаев использования: https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/

Смежные вопросы