2015-02-25 3 views
0

У меня есть приложение, которое собирает данные с датчика. Эти данные должны храниться в mysql db на удаленном хосте. Я хочу как-то кэшировать эти данные, прежде чем отправлять их на удаленный db, чтобы быть уверенным, что нет данных, потерянных при временной остановке сети.Как кэшировать данные перед отправкой на удаленный db?

Моя первая идея состояла в том, чтобы хранить данные в локальном текстовом файле и загружать его один раз в минуту на удаленный db, используя данные загрузки mysqls infile local '. Проблема здесь в том, что я хочу удалить загруженные записи из текстового файла после того, как они были успешно загружены. Но это иногда искажает текстовый файл, потому что процесс датчика все еще пишет ему.

Вторая идея заключалась в использовании именованных каналов. Но там у меня ограниченная емкость, а также были проблемы с блокировкой ...

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

+0

считается ли вы с помощью вращающегося файла журнала? Вы можете заставить его вращаться в новый файл каждую минуту. Если у вас есть процесс, который пытается отправить все файлы журнала в каталог, вы можете удалить те, которые успешно отправлены. Или, если вам нужны логические куски, вы можете использовать регулярный вращающийся обработчик журналов, который будет вращаться в определенном файле. Таким образом, вы можете просто проверить, когда файл попадает, например ... 256 КБ или что-то еще, а затем отправить его. Удалите весь файл с успехом. https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler – Tadgh

+0

Как насчет велосипедного движения через имена файлов? Вы никогда не отправляете файл, который в настоящее время записывается, поэтому вы можете удалить его после факта. – caveman

ответ

2

Вы думали использовать sqlite? Это позволит вам использовать (примерно) тот же уровень данных, что и на удаленном сервере MySQL, но вы можете кэшировать локально, а затем вставлять свои вставки, когда будете готовы.

Он использует плоские файлы в качестве бэкэнд, но вам не о чем беспокоиться, и у него есть некоторые инструменты командной строки (похожие на MySQL-клиент) для администрирования файлов данных, создаваемых вашим приложением.

Эта ссылка не выглядит безобразно:

http://zetcode.com/db/sqlitepythontutorial/

+0

Спасибо за идею с sqlite - это отлично работает для меня – hugohabicht