Возможно ли иметь «движущееся окно» в кеше запросов MYSQL? - PullRequest
0 голосов
/ 25 мая 2011

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

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

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

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

1 Ответ

1 голос
/ 25 мая 2011

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

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

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

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

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

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