Поскольку вас заинтересовал этот вариант, я решил расширить комментарий до ответа.Я возьму SQL Server и C # compoment - sqltabledependency .Вы можете проверить его, если он соответствует вашим потребностям.
Вы бы создали временную таблицу, в которую вы положили бы любые изменения из таблицы sales
, например, sales_data_watch
(вы могли бы иметь тамтакже агрегации предварительного расчета, как в вашем примере).
Вы создадите почасовую работу, которая будет отслеживать изменения в таблице sales
и выполнять вставку / обновление для sales_data_watch
Вы бы подключили зависимость C # sqltable, связанную с sales_data_watch
(примечание: взят из примера, чтобы соответствовать вашей таблице)
public class SaleData
{
public int revenue{ get; set; }
}
public class Program
{
private static string _con = "data source=.; initial catalog=MyDB; integrated security=True";
public static void Main()
{
// The mapper object is used to map model properties
// that do not have a corresponding table column name.
// In case all properties of your model have same name
// of table columns, you can avoid to use the mapper.
var mapper = new ModelToTableMapper<SaleData>();
mapper.AddMapping(s => s.revenue, "Aggregated revenue");
// Here - as second parameter - we pass table name:
// this is necessary only if the model name is different from table name
// (in our case we have Sale vs Sales).
// If needed, you can also specifiy schema name.
using (var dep = new SqlTableDependency<SaleData>(_con, "sales_data_watch", mapper: mapper));
{
dep.OnChanged += Changed;
dep.Start();
Console.WriteLine("Press a key to exit");
Console.ReadKey();
dep.Stop();
}
}
public static void Changed(object sender, RecordChangedEventArgs<SaleData> e)
{
var changedEntity = e.Entity;
Console.WriteLine("DML operation: " + e.ChangeType);
Console.WriteLine("Revenue: " + changedEntity.Revenue);
}
}
После того, как все уведомления были распределены, вы можете сделать truncate table sales_data_watch
после (если вы не хотите, чтобы таблица стала слишком большой, что в конечном итоге замедлило бы весь процесс.
Этоиспользуя только сервер SQL и компонент C #. Существуют и другие, возможно, лучшие варианты, например: Определить изменение таблицы записей с помощью MVC, SignalR, jQuery и SqlTableDependency , чтобы сделать это по-другому. Это будет зависеть от вашегопредпочтения.
Редактировать полный пример ссылки для Создание диаграмм в реальном времени с Angular 5, Google Charts, SignalR Core, .NET Core 2, Entity Framework Core 2 иSqlTable зависимость (эта ссылка является первой страницей из трех).В верхней части страницы вы можете увидеть график в реальном времени Google.Все кредиты идут на anthonygiretti .Вы можете загрузить пример проекта по адресу github .
Используемые технологии
База данных
Sql Server, localDb с Visual Studio 2017 корректно, чтобы он работал
Front End-технологии
Angular 5
Google Charts
Visual Studio Code
SignalR Client
BackEnd-технологии
.NET Core 2
SignalR Core
EntityFramework Core
EntityFramework Core for Sql Server
SqlTableDependency
Сначала необходимо установить необходимые компоненты - сервисный брокер, SQL Table, Angular-CLI, проект Angular 5,Клиент SignalR (VS 2017, установлен .Net Core 2 SDK) - ссылка та же part1
Далее идет настройка бэкэнда - part2
Чтобы заставить его работать, этот проект содержит:
- A DbContext (GaugesContext.cs) для EntityFramework Core
- Концентратор (GaugeHub.cs) для SignalR, передающий данные
- Модель, содержащая строго типизированные данные для отправки (Gauge.cs)
- Репозиторий, предоставляемый Entity Framework и его интерфейсом (GaugeRepository.cs и IGaugeRepository.cs)
- Подписка на Gauge sqlтаблица с SqlTableDependency и ее Interface (GaugeDatabaseSubscription.cs и IDatabaseSubscription)
- Два метода расширения, расширяющих IServiceCollection (AddDbContextFactory.cs) и IApplicationBuilder (UseSqlTableDependency.cs) и Startup.cs и Program.cs
1085
1085часть заключается в настройке внешнего интерфейса - part3
У нас есть:
- Папка, содержащая компонент диаграммы датчиков (gaugeschart.component.html и gaugeschart.component.ts)
- Папка, которая содержит службу диаграмм и базовую службу Google Charts (google-gauges-chart.service.ts и google-charts.base.service.ts)
- Папка, содержащая файлы окружений
- Папка, содержащая строго типизированную модель для калибровочной диаграммы (gauge.ts)
- Наконец, в корне папки src компоненты файлов по умолчанию и модуль (приложение)файлы компонентов и файл модуля приложения)
На следующем шаге вы должны проверить его, чтобы убедиться, что данные проецируются в правильные графики.у, когда вы изменили данные.