Есть сторонний push data сервис, который отправляет сообщения в формате csv или xml. Нужно их принимать и записывать в базу данных на другом, моем сервере. Как организовать архитектуру? Это может просто питон скрип на моем сервере, который работает 24/7 и просто записывает их в базу. Все? Это надежно?
Решил использовать RabbitMQ, теперь снова передумал. Вернее, меня осенило. А если сделать что-то промежуточное: скрипт принимает сообщения и, для надежности, пишет их в файл сначала, каждое сообщение в отдельный файл. А потом другой скрипт просто читает эти файлы и пишет уже в базу.
Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).
Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?
Re: Как принимать push сообщения на сервере и сохранять в базу - 2?
Здравствуйте, _VW_, Вы писали:
_VW>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).
Во-первых, можно протестировать производительность, а во-вторых не быстрее-- пока создастся файл, пока откроется и запишется. Можно выбрать промежуточный вариант -- sqlite.
_VW>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?
Ну почему нельзя сразу писать в базу ?
Кодом людям нужно помогать!
Re[2]: Как принимать push сообщения на сервере и сохранять в базу - 2?
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, _VW_, Вы писали:
_VW>>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).
S>Во-первых, можно протестировать производительность, а во-вторых не быстрее-- пока создастся файл, пока откроется и запишется. Можно выбрать промежуточный вариант -- sqlite.
протестировать — да. а как протестировать в моем случае, я даже не представляю?
_VW>>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?
S>Ну почему нельзя сразу писать в базу ?
ненадежно. вдруг где-то вылетит ошибка у скрипта.
возможно, данных будет много потом, даже если сейчас мало и он не будет успевать и принимать их, и писать в базу.
возможно, что-то случится с mysql, например, зависнет или еще что-то. да, другой скрипт ее перезапустит, но это займет время, включая время, чтобы понять, это она зависла, а куда будут деваться принимаемые данные в это время?
Re[3]: Как принимать push сообщения на сервере и сохранять в базу - 2?
Здравствуйте, _VW_, Вы писали:
_VW>протестировать — да. а как протестировать в моем случае, я даже не представляю?
Да просто бери и пиши в цикле тестовую строку, между итерациями можно поставить задержку, хоть рэндомную если уж совсем заморачиваться.
Re: Как принимать push сообщения на сервере и сохранять в базу - 2?
Здравствуйте, _VW_, Вы писали:
_VW>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).
1. Это сложнее, чем просто писать в базу. Вместо одного скрипта, который работает синхронно, теперь у вас два скрипта, один из которых работает по таймеру.
2. Это менее надёжно, чем писать в базу. Потому, что теперь у вас в два раза больше сущностей, которые могут выйти из строя.
3. По скорости запись файла немного медленнее, чем в нормальную базу. Поясняю: вам нужна durability, поэтому нужно делать commit. В базе commit — это сброс на диск журнала транзакций; одна IO операция. Создание файла — это запись в MFT, в файл, и в лог файлухи. Итого — три IO операции.
Это не говоря о том, что запись в базу вам всё равно понадобится — т.е. нагрузка на файлуху идёт не вместо, а в дополнение к нагрузке варианта "сразу в базу".
_VW>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?
Думаю что вы занимаетесь ерундой. Пишите напрямую в базу. Раз в несколько секунд — это ни о чём, любая СУБД на любом железе даже не вздохнёт. Проблемы начинаются при выходе за пределы IOPS используемого диска.
Надёжность у вас будет падать с ростом числа задействованных компонент.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.