Как принимать push сообщения на сервере и сохранять в базу - 2?
От: _VW_ Марс  
Дата: 16.02.16 16:07
Оценка:
Из этой темы http://rsdn.ru/forum/web/6313583.all
Автор: _VW_
Дата: 15.01.16


Есть сторонний push data сервис, который отправляет сообщения в формате csv или xml. Нужно их принимать и записывать в базу данных на другом, моем сервере. Как организовать архитектуру? Это может просто питон скрип на моем сервере, который работает 24/7 и просто записывает их в базу. Все? Это надежно?

Решил использовать RabbitMQ, теперь снова передумал. Вернее, меня осенило. А если сделать что-то промежуточное: скрипт принимает сообщения и, для надежности, пишет их в файл сначала, каждое сообщение в отдельный файл. А потом другой скрипт просто читает эти файлы и пишет уже в базу.

Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).

Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?
Re: Как принимать push сообщения на сервере и сохранять в базу - 2?
От: Sharov Россия  
Дата: 16.02.16 16:23
Оценка:
Здравствуйте, _VW_, Вы писали:

_VW>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).


Во-первых, можно протестировать производительность, а во-вторых не быстрее-- пока создастся файл, пока откроется и запишется. Можно выбрать промежуточный вариант -- sqlite.


_VW>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?


Ну почему нельзя сразу писать в базу ?
Кодом людям нужно помогать!
Re[2]: Как принимать push сообщения на сервере и сохранять в базу - 2?
От: _VW_ Марс  
Дата: 16.02.16 16:53
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, _VW_, Вы писали:


_VW>>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).


S>Во-первых, можно протестировать производительность, а во-вторых не быстрее-- пока создастся файл, пока откроется и запишется. Можно выбрать промежуточный вариант -- sqlite.


протестировать — да. а как протестировать в моем случае, я даже не представляю?


_VW>>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?


S>Ну почему нельзя сразу писать в базу ?

ненадежно. вдруг где-то вылетит ошибка у скрипта.
возможно, данных будет много потом, даже если сейчас мало и он не будет успевать и принимать их, и писать в базу.
возможно, что-то случится с mysql, например, зависнет или еще что-то. да, другой скрипт ее перезапустит, но это займет время, включая время, чтобы понять, это она зависла, а куда будут деваться принимаемые данные в это время?
Re[3]: Как принимать push сообщения на сервере и сохранять в базу - 2?
От: rFLY  
Дата: 18.02.16 19:56
Оценка:
Здравствуйте, _VW_, Вы писали:

_VW>протестировать — да. а как протестировать в моем случае, я даже не представляю?

Да просто бери и пиши в цикле тестовую строку, между итерациями можно поставить задержку, хоть рэндомную если уж совсем заморачиваться.
Re: Как принимать push сообщения на сервере и сохранять в базу - 2?
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.03.16 06:34
Оценка: 2 (2) +1
Здравствуйте, _VW_, Вы писали:

_VW>Чем это лучше? Проще, чем с помощью RabbitMQ, и надежнее, чем просто принимать и писать сразу в базу. И, возможно, файл можно создать быстрее, чем записать в базу (хотя, не знаю).

1. Это сложнее, чем просто писать в базу. Вместо одного скрипта, который работает синхронно, теперь у вас два скрипта, один из которых работает по таймеру.
2. Это менее надёжно, чем писать в базу. Потому, что теперь у вас в два раза больше сущностей, которые могут выйти из строя.
3. По скорости запись файла немного медленнее, чем в нормальную базу. Поясняю: вам нужна durability, поэтому нужно делать commit. В базе commit — это сброс на диск журнала транзакций; одна IO операция. Создание файла — это запись в MFT, в файл, и в лог файлухи. Итого — три IO операции.

Это не говоря о том, что запись в базу вам всё равно понадобится — т.е. нагрузка на файлуху идёт не вместо, а в дополнение к нагрузке варианта "сразу в базу".

_VW>Что думаете? Что быстрее: писать в файлы и читать из них или писать в RabbitMQ и читать из него? Постоянное создание файлов (раз в несколько секунд, максимум минута) — это нормально или не очень?

Думаю что вы занимаетесь ерундой. Пишите напрямую в базу. Раз в несколько секунд — это ни о чём, любая СУБД на любом железе даже не вздохнёт. Проблемы начинаются при выходе за пределы IOPS используемого диска.

Надёжность у вас будет падать с ростом числа задействованных компонент.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.