0

Il existe un concept d'espace de travail dans notre application. Un utilisateur peut être membre de pratiquement n'importe quel nombre d'espaces de travail et un espace de travail peut avoir pratiquement n'importe quel nombre d'utilisateurs. Je souhaite implémenter un flux d'activités pour aider les utilisateurs à découvrir ce qui se passe dans chaque espace de travail auquel ils appartiennent: lorsque quelqu'un télécharge un fichier ou crée une tâche dans un espace de travail, cette activité apparaît dans le flux d'activité de cet espace de travail. ses flux d'activité utilisateurs. Le problème est que je ne peux pas trouver une structure de données appropriée pour les opérations rapides de lecture et d'écriture des activités. Ce que j'ai trouvé est de stocker chaque activité avec une propriété Targets qui est une chaîne de tous les ID utilisateur de l'espace de travail, puis les activités de filtrage où ce champ contient un ID d'un utilisateur pour lequel je veux récupérer des activités, mais cette approche et les limitations d'évolutivité, car nous utilisons SharePoint comme stockage. Nous pouvons également utiliser Azure Table ou Blob Storage et je pensais juste à créer une entité d'activité séparée pour chaque utilisateur d'un espace de travail afin que je puisse facilement filtrer les activités par identifiant de l'utilisateur, mais cela pourrait entraîner des centaines de copies activité si un espace de travail a des centaines de membres et qu'écrire toutes ces copies devient problématique car Azure ne prend en charge que 100 entités dans une seule opération par lots (corrigez-moi si je me trompe), et SharePoint n'est pas du tout une option. J'ai donc besoin d'aide pour déterminer quelle structure de données je pourrais utiliser pour stocker les activités de chaque espace de travail de sorte qu'elles soient facilement récupérables pour n'importe quel membre probablement par son identifiant et aussi pour n'importe quel espace de travail.Structure de données pour le flux d'activité

Répondre

1

Nous pouvons également utiliser Azure table ou Blob Storage et je pensais simplement créer une entité d'activité distincte pour chaque utilisateur d'un espace de travail de sorte que je peux facilement filtrer les activités par l'identifiant de l'utilisateur

Azure Storage Table peut être un choix pour stocker vos entités d'activité, et Stockage de la table est relativement peu coûteux, vous pouvez envisager de stocker la même entité plusieurs fois (avec une stratégie de partitionnement différente) dans des partitions séparées ou dans des tables distinctes.

Et stocker l'entité d'activité de l'utilisateur avec workspaceid_userid comme une clé composée peut également être une approche possible. Pour plus de détails et des modèles de conception de table, s'il vous plaît se référer à this article.

Azure prend en charge que 100 entités dans une opération de lot unique (corrigez-moi si je me trompe)

Oui, un seul batch operation peut inclure jusqu'à 100 entités.

+0

Mais si un espace de travail peut avoir pratiquement n'importe quel nombre de membres, soit 1000 (bien que je doute que cela arrivera, mais toujours), n'est-il pas stupide d'insérer 1000 entités identiques avec des 'RowKey's différents, ce qui exigent également de faire 10 demandes par lots distincts? Je ne dis pas que c'est le cas, mais je demande, parce que je n'ai qu'une expérience avec les bases de données relationnelles (principalement SQL) où cette approche serait considérée comme insensée. – Salivan

+0

Chaque fois qu'une entité d'activité d'utilisateur doit être sauvegardée, si vous utilisez la première approche, vous devrez stocker l'entité activité deux fois (en la stockant avec '' userid'' comme PartitionKey et stocker la même entité d'activité avec '' workspaceid' 'en tant que PartitionKey). –

+0

Et puis comment puis-je obtenir des activités de tous les espaces de travail dont l'utilisateur est membre avec une seule requête? Je veux dire qu'un utilisateur peut être membre, disons, de 10 espaces de travail. Les autres utilisateurs de ces espaces de travail publient certaines activités. Je stocke chaque activité deux fois avec 'userId' et' workspaceId' comme 'PartitionKey's. Alors, comment puis-je récupérer toutes ces activités à partir de ces 10 espaces de travail avec une seule requête? – Salivan