2016-02-12 7 views
7

Buduję aplikację internetową, która w skrócie zajmuje dość słabo uporządkowane dane w SQL Server i poprzez Node.JS przeniesienie go do MongoDB. Powodem, dla którego tego potrzebuję, jest to, że potrzebuję dostępu do danych z dość kiepsko napisanej aplikacji, która jest kluczowa dla organizacji, która Nie mam możliwości zmiany kodu na, z którego wprowadzane są dane początkowe. Po przetłumaczeniu mogę sprawić, że moja aplikacja zrobi to, czego szuka firma.SQL Server Realtime Push Notifications to Node.JS

W tej chwili moja aplikacja odpytuje SQL Server co 30 minut w przypadku zmian, a następnie aktualizuje moje MongoDB za pośrednictwem Node.JS, a ze względu na ilość danych nie jest pożądane częstsze przeprowadzanie ankiet.

Co muszę zdarzyć jest mieć prawdziwe powiadomienia o czasie z SQL Server popychane do mojego wniosku node.js w jakiś sposób czy aktywne lub pasywne końcowe Brak node.js jest tak, że można go zaktualizować mojego bazy danych Mongo.

Biblioteka węzeł używam, aby uzyskać dane to: https://github.com/patriksimek/node-mssql

kilka możliwych pomysłów miałem były:

  • Have SQL Server wysyła powiadomienie o jakimś moim NodeJS HTTP usługi Punkt końcowy
  • Niech NodeJS uruchomi zapytanie strumieniowe, które będzie uruchamiane po każdym wprowadzeniu zmian
  • Napisz aplikację w języku C#, która obserwuje te zmiany i przesyła je do mojego punktu końcowego HTTP NodeJS.

Jest kilka osób, które wydają się mówić o tym, ale większość z nich mówi o zmianach w punkcie początkowym źródła danych (których nie mogę zmienić), a nie z samego SQL Server.

+0

Dzięki za edycję @JamesZ, dzięki czemu brzmię mądrzej niż naprawdę XD – Nitroware

+1

To naprawdę ważne pytanie. Szkoda, że ​​nie otrzymał więcej uwagi. –

Odpowiedz

0

Muszę to przedłożyć, mówiąc, że nie mam rozwiązania w czasie rzeczywistym. Jeśli istnieje rozwiązanie w czasie rzeczywistym, nie wiem. Porozmawiam tylko o zmniejszeniu obciążenia sondy.

Zakładam, że masz kontrolę nad samym serwerem SQL. Możesz skonfigurować coś w SQL Server, aby śledzić zmiany i uzyskać polling, aby przyjrzeć się tylko zmianom, które nie zostały jeszcze pobrane przez Węzeł.

Czy masz kontrolę nad procesem aktualizacji/wstawiania? Jeśli to zrobisz, prześlij kod śledzenia zmian obok kodu wstawiania/aktualizacji. Zakładam, że tak nie jest, w takim przypadku, polecam * zaglądanie do triggers. Są to po prostu detektory zdarzeń dołączone do tabel, które umożliwiają wykonanie SQL przed, w trakcie lub po wstawieniu/aktualizacji tabeli i dają dostęp do danych zmienianych/wstawianych przy użyciu tabel deleted i inserted.

* Wyzwalacze są nie lubiane przez społeczność SQL Server z powodu gniewu, z których niektóre są omawiane on this SQLServerCentral article. Jist rzeczy: są one trudne do debugowania, spowalniają wydajność, gdy stają się częścią operacji zapisu, i uważaj, aby nie tworzyć okrągłych wyzwoleń (tabela 1 jest aktualizowana, co wyzwala trig1, która aktualizuje tabelę 1, która wyzwala trig1, itp.). W związku z tym, jeśli wykonujesz śledzenie zmian za pomocą wyzwalaczy w tabeli, utwórz oddzielną tabelę, w której śledzone są te zmiany, a następnie zezwól tylko na aktualizację wyzwalacza/wstaw tę tabelę.

Teraz możesz ustawić tabelę zmian ścieżki, którą wyzwalacz zapełni wprowadzonymi zmianami, a kiedy zostały utworzone, a być może nawet polem bit, aby powiedzieć, czy węzeł jeszcze wyciągnął te zmiany. Teraz wystarczy, że Node przyjrzy się temu stolikowi i pobierze tylko te zmiany, które nie zostały jeszcze wprowadzone. Stół ten prawdopodobnie szybko stanie się ogromny, a co za tym idzie powolny dla sondażu, więc zalecam umieszczenie na flagach lub polu określającym datę wprowadzenia zmiany index. Teraz, ponieważ sonda jest szybka, powinieneś być w stanie zmniejszyć interwał.

Nie jest to idealne rozwiązanie i może wymagać wiele pracy, więc najlepiej poczekać chwilę i sprawdzić, czy ktoś nie zaproponuje lepszego rozwiązania.