Bonjour,

Je me pose quelques questions sur la façon de procéder afin d'optimiser les appels à la base de données.

Une table In Memory est utilisée pour gérer des données de sessions d'usagers, et afin d'afficher par exemple dans la "navbar" :
- UserName, le nom d'usager
- TotalBal, le solde de cet usager
- hasMsg, si il vient de recevoir un message privé
- hasChat, si il y a nouveau message dans le chatbox
- ActivityDate, un timestamp qui se met à jour dès qu'il est connecté
- AutoLogoff, me permet de le déconnecter si je le mets à true.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE TABLE [dbo].[T_USER_SESSION]
(
	[UserName] [nvarchar](256) COLLATE French_CI_AS NOT NULL,
	[TotalBal] [decimal](10, 2) NOT NULL,
	[hasMsg] [bit] NOT NULL,
	[hasChat] [bit] NULL,
	[ActivityDate] [bigint] NULL,
	[AutoLogoff] [bit] NOT NULL,
 
 CONSTRAINT [PK_SESSIONS_UserName]  PRIMARY KEY NONCLUSTERED HASH 
(
	[UserName]
)WITH ( BUCKET_COUNT = 131072)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
Dans Angular, lorsque l'usager est connecté, j'ai donc une fonction setInterval qui va vérifier toutes les 5 secondes dans la table T_USER_SESSION.

Le nombre d'usagers connectés simultanément pourrait dépasser les 1000-2000 à terme.
Je me dis que pour alléger le travail, je pourrai faire une page, afin d'avoir un appel uniquement que sur l'ouverture de cette page par l'usager.
Mais je perdrais de cette façon l'intérêt de la notification des alertes de messages en quasi temps réel et aussi l'intérêt des données ActivityDate et AutoLogoff.

Peut-être n'y a t-il aucun souci à faire des appels à cette fréquence sur ce type de table in memory pour un nombre d'usagers supérieurs à 1000 et < à 5000, mais je n'ai jamais eu l'occasion de voir à l'usage avec un nombre aussi élevé de connectés.

Selon vous, est-ce la bonne façon de procéder dans ce cas de figure, ou dois-je diminuer la fréquence probablement avec + de 1000 connectés (*) !?
Ou y-a-t'il une autre méthode possible pour faire un "push" par exemple des notifications vers le client et ne pas avoir à checker toutes les 5 secondes la table !?

(*) le serveur (dédié à SQL SERVER) aura à peu près cette config: Disques SSD, 4 cores, entre 32 et 64 GB RAM.

SQL Server 2016 --> Web API C# --> Angular 7