Опрос базы данных MySQL через Qt / QSqlTableModel (C ++) - PullRequest
1 голос
/ 20 декабря 2010

Я использую Qt для подключения к базе данных MySQL (через QSqlTableModel / QSqlDatabase / etc), хотя этот вопрос носит более общий характер.

Какой лучший способ получить «живое обновление таблицы базы данных»? Одним из вариантов будет постоянный опрос всей таблицы (повторный вызов метода select () в QSqlTableModel). Это кажется неэффективным (передается ли вся таблица из MySQL в Qt каждый раз?)

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

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

Все эти подходы кажутся немного грязными ... что бы вы порекомендовали? Спасибо.

1 Ответ

0 голосов
/ 29 декабря 2010

Это действительно вопрос MySQL, но у меня есть ответ!:)

На самом деле вы хотите опрашивать базу данных каждые X секунд.Однако, что сделает это эффективным, если вы сделаете MySQL «триггером», так что если строка будет вставлена, обновлена ​​и / или удалена, она создаст индикатор.

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

  • заблокировать вторую таблицу «модификаций»
  • прочитать все содержимое второй таблицы «модификаций»
  • удалитьвсе содержимое второй таблицы «модификаций»
  • разблокировать вторую таблицу «модификаций»

Если вы не заблокируете таблицу, вы можете случайно удалить новую строку, вставленную между чтениеми удаление.Однако, если вы хотите / должны избегать блокировки, просто прочитайте все, а затем удалите извлеченные строки на основе уникального идентификатора, который создается при каждой вставке строки в таблицу «модификаций».

Часто задаваемые вопросы и документациядля триггеров MySQL здесь: http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html

Документация для блокировки / разблокировки таблиц здесь: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

...