Оптимизация БД для использования в качестве очереди - PullRequest
0 голосов
/ 09 июня 2010

У нас есть таблица с именем worktable, в которой есть несколько столбцов (key (первичный ключ), ptime, aname, status, content).

У нас есть нечто, называемое производителемкоторый помещает строки в эту таблицу, и у нас есть потребитель, который выполняет упорядочение по столбцу key и выбирает первую строку, которая имеет статус «в ожидании».Потребитель выполняет некоторую обработку в этой строке:

  1. обновляет статус до «обработка»
  2. выполняет некоторую обработку с использованием содержимого
  3. удаляет строку

Мы сталкиваемся с проблемами конкуренции, когда пытаемся запустить несколько потребителей (возможно, из-за порядка, который выполняет полное сканирование таблицы).

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

Какую оптимизацию мы можем сделать, чтобы получить наилучшие возможные цифры?Можем ли мы выполнить обработку в памяти, когда потребитель извлекает 1000 строк за раз, обрабатывает и удаляет?это улучшится?Каковы другие возможности?разбиение таблицы?распараллеливание?Индекс организованных таблиц? ...

1 Ответ

1 голос
/ 09 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...