Як отримати сповіщення в режимі реального часу, коли відбувається зміна бази даних (вставлення, оновлення, видалення)?


13

Я створюю інформаційну панель, яка повинна контролювати таблицю бази даних. У мене є лише доступ до бази даних (немає додаткового рівня). Таблиця досить велика (10 мільйонів рядків), проте не швидко змінюється (100 вставок / оновлень в хвилину)

Як я можу дізнатися, чи змінилась таблиця? Я б намагався щосекундно вдарятись по базі даних, але це здається брутальним підходом ...

Бази даних: MySQL / Postgres


Це може бути корисним . Ми використовуємо це для моніторингу ферми серверів. Я впевнений, що це буде мати можливість відстежувати зміни таблиці в БД. На жаль, ми не налаштували до рівня таблиці. Отже, мені не відомо про налаштування до рівня таблиці.
Джуд Нірошан

Дякуємо за коментар Але як нагіоси можуть допомогти? У мене є лише доступ до бази даних. Я не можу нічого встановити на віддалені машини.
Кирило

3
Ви дійсно хочете отримувати повідомлення в режимі реального часу - кожного разу, коли рядок вставляється чи оновлюється? Подумати ще раз.
Tulains Córdova

Чи є якась вагома причина, чому у вас немає рівня програми? Мені здається, найкращий спосіб робити речі, тобто мати прикладний шар, який здійснює моніторинг. Наприклад, надсилання електронної пошти з сервера баз даних не схоже на чисту архітектуру.
juhist

У мене є невеликий плагін mysql, який робить це: github.com/Cyclonecode/mysql-notification
Cyclonecode

Відповіді:


9

Можна використовувати тригери.

CREATE TRIGGER notifyMe
ON table1
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'DB AutoMailer',
        @recipients = 'user@example.com',
        @body = 'The DB has changed',
        @subject = 'DB Change';
GO

Я не впевнений, що це було б краще, ніж натискання на базу даних щосекунди, або ви надсилаєте цілі зміни в пошті, і нехай програмне забезпечення панелі інструментів розбирає електронну пошту?
Кирило

1
Ви можете отримати конкретні змінені значення, вибравши таблиці "вставлені", "оновлені" та "видалені", і ви можете додати ідентифікатори до тіла.
stechray

2
Замість надсилання електронної пошти ви також можете зателефонувати на збережену процедуру, яка підключається до веб-api, який підтримує інформаційна панель. Детальніше дивіться тут: forums.asp.net/t/…
stechray

3
Або введіть дані в додаткову таблицю, яку ви запитуєте (і порожні) через потрібні інтервали. Технічно не в режимі реального часу, але можна зробити так, щоб це було схоже.
Ян Догген

1
Запустити тригер натиснути інформацію про оновлення на чергу (або тему) брокера обміну повідомленнями. Це завжди був моїм улюбленим підходом. Таким чином, ви не маєте жодної складної логіки в тригері, і у вас є велика гнучкість щодо того, що ви робите з повідомленням, коли отримуєте його. А якщо ви перейдете до паб / підтеми, ви можете навіть отримувати декілька споживачів і робити різні речі з нею.
розум злочину

3

Для PostgreSQL я знаю спосіб отримувати повідомлення з бази даних, коли змінюється рядок.

  1. використовувати тригер, коли відбувається вставлення / оновлення / видалення.
  2. у разі події надсилає сповіщення клієнтському сокету.
  3. будьте впевнені, що у вас є клієнт на сервері.
  4. то ваш додаток отримає сповіщення.

Ви можете побачити мій код або документацію PostgreSQL .

Здається, сповіщення не є надійним сповіщенням, але принаймні воно працює для мене.


Гарний підхід. Це в основному власний тригер?
Кирило
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.