Возможно ли иметь «движущееся окно» в кэше запросов MYSQL?

#mysql #sql #database #caching

#mysql #sql #База данных #кэширование

Вопрос:

У меня есть локальная база данных с объемом данных около 1 ГБ, которую я использую с программным обеспечением, которое я создал для анализа финансовых рынков. Я неоднократно вызываю хранимую процедуру из внешнего приложения. Эта хранимая процедура извлекает строки из MEMORY таблицы, выполняет вычисления и отправляет результат обратно в приложение.

Каждый запрос вызывает данные из таблицы, которая находится внутри «окна» установленного размера (например, 100 000 rows ). Каждый последующий запрос сдвигает окно на 1 строку и вычисляет результаты.

Возможно ли использовать MySQL кэш полезным образом в этом сценарии?

В настоящее время я всего лишь MEMORY движок, а не MYISAM or InnoDB ради скорости.

Ответ №1:

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

Затем клиент может (заменить 1000 на ваш размер окна):

  1. Прочитайте первые 1000 результатов и вычислите текущие значения.
  2. Вычтите первый результат из вычисления.
  3. Прочитайте следующий результат и добавьте к вычислению.
  4. Повторяйте 2 и 3, пока не будут обработаны все результаты.

Таким образом, вам не нужно перечислять все 1000 результатов каждый раз, когда вы читаете следующее значение, изменяя алгоритм с O (n ^ 2) на O (n).

Чтобы повысить эффективность при чтении, вы могли бы использовать очередь, подкрепленную циклическим буфером фиксированной длины для хранения текущего окна результатов. Это позволит вам обрабатывать буфер как стандартную очередь, но без необходимости повторно перетасовывать элементы в резервном массиве при добавлении / удалении элементов.