2010-05-26 3 views
1

У меня есть код, который создает много данных, которые должны храниться в базе данных. Проблема в том, что база данных не может хранить данные, которые она получает. Поэтому мне интересно, поможет ли какой-то механизм очередей в этой ситуации - я думаю, в частности, в RabiitMQ, и можно ли хранить данные в своих очередях, пока какой-то потребитель не вытащит из него данные и не подтолкнет их к базе данных , Кроме того, меня не интересует, попали ли эти данные в базу данных или нет, потому что довольно скоро те же данные будут обновлены.RabbitMQ как прокси-сервер между хранилищем данных и производителем?

ответ

1

@hyperboreean Это может показаться немного проблематичным, но, возможно, вам действительно нужен кеш, такой как Redis или MemcacheD?

Технически вы можете использовать RabbitMQ с потребителями, обновляющими БД, но вам нужно будет реализовать механизм очистки очереди, или ваши очереди будут расти все больше, пока ваш уровень ввода еще превышает то, что может обрабатывать база данных. По мере роста очередей данные в них становятся устаревшими - это означает, что обновление, которое только что было отправлено, все еще находится в очереди. Подумайте об этом, как о магазине, в котором есть одна проверка. Конечно, вы можете создавать отдельные строки, но это означает, что у вас есть несколько длинных строк и все еще есть одна проверка. Вы по-прежнему связаны тем, что контролер может обрабатывать ваших клиентов.

Из всего слишком краткого описания кажется, что ваши данные являются действительно временными данными, и система кэширования (или другое расположение, отличное от NoSQL) может быть лучше подходит. Если вам нужно в дальнейшем сохранить данные, у вас может быть отдельный процесс, который вытаскивает текущие данные из механизма кеша и загружает его в вашу БД. Тогда вы будете ограничены тем, сколько времени потребовалось, чтобы извлечь его из-за того, как часто вы можете фактически загружать данные в БД.

1

Базы данных должны обрабатывать вставки данных очень быстро, без механизмов блокировки с Вставки - это данные, которые еще не существуют в магазине. Если вы имеете дело с вставками данных, и ваша сериализация в базу данных является узким местом, то какая бы проблема у вас ни была, то все еще существует с RabbitMQ, потому что вставки базы данных должны выполнять быстрее, чем исходящие сообщения для RabbitMQ. В этом случае RabbitMQ не решит вашу проблему. С другой стороны, обновления данных блокируют строку обновления (в общем), и у вас возникнут проблемы с параллелизмом с блокировками и ожиданиями. Поэтому в целом попытайтесь понять, почему упорство в вашей базе данных является узким местом.

В конце концов, если ваше хранилище данных NOSQL, то это может быть не выполнение записи, в этом случае вы можете анализировать, что получает данные быстрее (NoSQL vs RabbitMQ).

Если у вас есть производители данных по нескольким потокам, у вас возникает проблема параллелизма для записи в хранилище персистентности. В этом случае RAbbitMQ лучше обрабатывает параллелизм, чем ваш хранилище персистентности, поскольку предназначен для высокой параллелизма. Это зависит от того, какой хранилище данных вы используете.

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