Je dois trouver une solution d'adhésion pour un très grand site web. Le site sera construit à l'aide de ASP.NET MVC 2 et d'une base de données MS SQL2008.
Le fournisseur d'adhésion actuel semble être un grand surkill, il y a beaucoup trop de fonctionnalités. P>
Tout ce que je veux stocker est un email / Mot de passe et informations de base du profil telles que le premier / Nom, le numéro de téléphone. Je n'aurai jamais besoin de 2 rôles, administrateurs et utilisateurs. P>
Quelles sont vos recommandations sur ce type de scénario, compte tenu des millions d'utilisateurs enregistrés? Qu'on utilise Stackoverflow? P>
J'ai beaucoup utilisé l'API d'adhésion existant dans le passé et je l'ai étendue pour stocker des informations supplémentaires, etc. Mais il y a des tables telles que P>
aspnet_Applications aspnet_Paths aspnet_SchemaVersions aspnet_WebEvent_Events aspnet_PersonalizationAllUsers aspnet_PersonalizationPerUser
3 Réponses :
Le fournisseur d'adhésion actuel semble être un grand surkill, il y a trop de fonctionnalité. p>
Tout ce que je veux stocker, c'est d'envoyer des informations par courrier électronique / mot de passe et des informations de profil de base telles que le premier / lastname, le numéro de téléphone. Je n'aurai jamais besoin de 2 rôles, administrateurs et utilisateurs. P> blockQuote>
Ensuite, utilisez simplement cette partie. Cela n'utilisera pas les pièces que vous n'utilisez pas, et vous constaterez peut-être que vous avez besoin de ces autres parties sur la route. Les classes sont déjà présentes dans la structure .NET pour ne pas avoir à fournir une licence ou quoi que ce soit. P>
La taille de la base de données est assez petite, et si vous le faites comme si vous le faites, et laissez ASPnetdb à lui-même, alors vous n'en prenez pas vraiment de vos autres bases de données. P>
Avez-vous une raison convaincante d'utiliser un composant tiers sur ce qui est déjà dans le cadre? P>
Modifier strong>: p> Il y a aussi des colonnes supplémentaires que je ne pas utiliser pour dans le Table de membre / utilisateur, mais qui ajouterait à la charge utile de chaque Sélectionner / insérer des déclarations. P>
MobilePin PasswordQuestion / PasswordSwer (je vais Faire la récupération de mot de passe par e-mail) Est approuvé (l'utilisateur sera toujours approuvé) Commentaire Mobilealias Nom d'utilisateur / BaisseDusName (ou Email / BaisseDemail) [e-mail est le Nom d'utilisateur, alors besoin que de 1 de ces] p> blockQuote>
Cela ressemble à vous essayer de microoptimisation . Le passage des chaînes vides est pratiquement sans frais (OK, c'est là, mais vous devez profiler pour savoir à quel point cela vous coûte. Ce ne sera pas aussi grand par utilisateur). Nous n'utilisons pas déjà tous ces champs dans nos applications non plus, mais nous utilisons le système d'adhésion sans impact préjudiciable mesurable. p>
En outre, j'ai entendu dire que GUID n'est pas tout ce qui est rapide et préférerait avoir des entiers à la place (comme Facebook) qui serait également publiquement exposé. P> blockQuote>
J'ai entendu dire que la cookiemonster aime les cookies. Encore une fois, sans profilage, vous ne savez pas si cela est préjudiciable. Habituellement, les gens utilisent des GUDS parce qu'ils veulent que cela soit absolument (bien à un degré d'absolu) unique, peu importe quand il est créé. Le coût de la génération une fois par utilisateur n'est pas tout ce lourd. Pas quand vous les créez déjà un nouveau compte. P>
Puisque vous êtes absolument défini sur la création d'un fournisseur de griffe à partir de zéro, voici quelques références: p>
http://msdn.microsoft.com /en-us/library/system.web.security.MembershipProvider.aspx P>
http://www.4guysfromrolla.com/articles/120705-1.aspx p>
http://msdn.microsoft.com/en-us/library /f1kyba5e.aspx p>
http://www.amazon.com/asp -Net-3-5-Unleashed-Stephen-Walther / DP / 0672330113 P>
Stephen Walther passe en détail sur celui-ci dans son livre et c'est une bonne référence pour que vous puissiez avoir tel quel. P>
@Marko j'ai également mis à jour la mienne. Je pense que vous êtes à la microoptimisation de quelque chose que vous avez juste besoin de consommer et de passer au-delà, à moins que vous ne soyez dans l'entreprise de créer des contrôles d'adhésion.
Merci pour votre mise à jour @Drachenstern, mais je suis toujours en désaccord. Pourquoi avoir une charge utile supplémentaire si je peux supprimer tout ensemble? Lorsque nous parlons d'interroger une liste d'utilisateurs, même si chaque utilisateur contenait <1kb de supplémentaire code> utile, une liste de 1000 utilisateurs signifierait 1 Mo de données supplémentaires, non? Aussi en ce qui concerne Guids vs Ints, voir ces questions Stackoverflow.com/questions/829284/Guid-vs-Isidité et Stackoverflow.com/Questtions/404040/...
@ Barko Eh bien, je suis allé de l'avant et je vous ai donné plusieurs liens en bas que je pense que vous devriez examiner. Ils discutent de quelles sont les choses nécessaires pour être considérées et les hérités que vous devez faire. Je recommande le livre peu importe. ~ Quant à la <1kb de données, je ne sais pas à quel point vos disques de la base de données de votre serveur sont, mais mes disques sont de taille Terrabytes, donc un mégabyte supplémentaire ou des mégaoctets de données n'est pas quelque chose que je vais manquer. Et au moment où je reçois un million d'utilisateurs, j'ai décidé exactement quelles informations que je dois stocker dans la base de données. À ce moment-là, vous allez devenir une réécriture de toute façon.
@Marko - Je partage votre douleur avec le fournisseur d'adhésion, mais gardez à l'esprit lorsque vous en écrivez un nouveau, vous perdez toute la fonctionnalité de l'API de fournisseur d'adhésion intégrée (sécurité la plus importante). Stack utilise OpenID - qui est une option si vous faites un nouveau site Web, mais vous ne pouvez pas migrer les utilisateurs existants. Je suis d'accord avec @Drachenstern - utilisez simplement les pièces que vous voulez. Prenez en compte les préoccupations de sécurité de votre site Web - si c'est une application critique simple et non mission, alors bien - par tous les moyens écrivez votre propre.
Ma recommandation serait pour vous de de référence forte>. Ajoutez autant de documents que vous le pensez que vous aurez dans la production et soumettez un nombre similaire de demandes que vous obtiendrez en production et voyez comment elle fonctionne pour votre environnement. P>
Je suppose que ce serait bien, la surcharge dont vous parlez serait insignifiante. p>
Vous êtes donc d'accord avec moi qu'il a besoin de profiler sous charge? ;) ... Considérez également qu'il s'agit d'une charge d'accès par utilisateur par page, vous devez donc non seulement générer la connexion à la connexion utilisateur, mais également une charge d'utilisation du site utilisateur avec des connexions authentifiées sur des sessions. Et il va devoir maintenir des cookies "utilisateur".
Yup ... Je suppose que si les millions d'utilisateurs s'attendent, un bon environnement de test est disponible pour ce genre de choses.
@marko, je peux certainement comprendre que le système d'adhésion standard peut contenir plus de fonctionnalités que nécessaire, mais la vérité est que cela ne va vraiment pas importer. Il existe des parties du système d'adhésion que vous n'allez pas utiliser comme il y a des parties de .NET que vous n'allez pas utiliser. Il y a beaucoup de choses que .NET peut faire que vous n'allez jamais utiliser, mais vous n'allez pas passer à travers .net et stiper cette fonctionnalité êtes-vous? Bien sûr que non. Vous devez vous concentrer sur les choses qui sont importantes pour ce que vous essayez d'accomplir et de travailler à partir de là. Ne vous laissez pas prendre dans la paralysie de l'analyse. Vous perdrez votre temps, faites tourner vos roues et ne vous retrouverez pas mieux que ce qui a déjà été créé pour vous. Maintenant, Microsoft vous trompe parfois, mais ils obtiennent beaucoup de choses correctement. Vous n'avez pas à embrasser tout ce qu'ils font pour atteindre vos objectifs - il vous suffit de comprendre ce qui est important pour vos besoins. p>
Quant aux GUID et Ints en tant que touches primaires, laissez-moi vous expliquer quelque chose. Il y a une différence cruciale entre une clé primaire et un indice en cluster. Vous pouvez ajouter une clé primaire et un index en cluster sur des colonnes qui ne font pas partie de la clé primaire! Cela signifie que s'il est plus important d'avoir vos données disposées par un nom (ou autre), vous pouvez personnaliser votre index en cluster pour refléter exactement ce dont vous avez besoin sans cela affectant votre clé principale. Permettez-moi de le dire une autre manière - une clé primaire et un indice en cluster ne sont pas un de même. J'ai écrit un article de blog sur la façon d'ajouter un index en cluster, puis une clé primaire à vos tables. L'indice en regroupement commandera physiquement les rangées de table comme vous en avez besoin et la clé principale appliquera l'intégrité dont vous avez besoin. Regardez mon message de blog pour voir exactement comment vous pouvez le faire. p>
Voici le lien - http://iamdotnetcrazy.blogspot.com/2010/09/primary-keys-do-not-or-should-not-equal.html . p>
C'est vraiment simple, vous devez d'abord ajouter l'index en cluster, puis ajoutez la clé primaire en second lieu. Cela doit être fait dans cet ordre ou vous ne pourrez pas le faire. Cela suppose, bien sûr, que vous utilisez SQL Server. La plupart des gens ne réalisent pas cela car SQL Server créera un index en cluster sur votre clé principale par défaut, mais tout ce que vous avez à faire est d'ajouter l'index en cluster, puis ajoutez la clé primaire et vous serez prêt à partir. L'utilisation d'INTS comme clé primaire peut devenir très problématique car votre base de données et votre système de serveur échoue. Je suggérerais d'utiliser des GUID et d'ajouter l'index en cluster pour refléter la façon dont vous avez réellement besoin de vos données stockées. p>
Maintenant, en résumé, je veux juste vous dire d'aller créer quelque chose de génial et ne vous enlisez pas avec des détails superficiels qui ne vous donneront pas assez d'un gain de performance. La vie est trop courte. En outre, rappelez-vous que votre système ne peut être que aussi rapide que son code le plus lent. Alors assurez-vous de regarder les choses qui prennent beaucoup de temps et prennent soin de ceux-ci. P>
Et une autre chose supplémentaire. Vous ne pouvez pas prendre tout ce que vous voyez sur le Web à la valeur faciale. La technologie change au fil du temps. Parfois, vous pouvez consulter une réponse à une question que quelqu'un a écrit il y a longtemps qui n'est plus pertinent aujourd'hui. En outre, les gens vont répondre aux questions et vous donner des informations sans avoir réellement testé ce qu'ils disent de voir s'il est vrai ou non. La meilleure chose à faire pour votre application est de souligner le test vraiment bien. Si vous utilisez ASP.NET MVC, vous pouvez le faire dans vos tests. Une chose que vous pouvez faire est d'ajouter une boucle qui ajoute des utilisateurs à votre application dans votre test, puis de tester les choses. C'est une idée. Il y a d'autres façons. Vous devez juste donner un peu d'effort pour concevoir vos tests bien ou au moins bien pour vos besoins. P>
bonne chance à vous! p>
C'est une très bonne réponse et une très bonne idée des index / clés primaires. Je i> doit stocker une carte d'identité à 8 chiffres pour chaque utilisateur, alors devrais-je simplement ajouter une colonne supplémentaire avec AutoIncrement? Souhaitez-vous indexer cette colonne à la place?
@Marko est cette colonne quelque chose que vous allez chercher et rejoindre? Si c'est le cas, j'appliquerais un index à cela. Puisque vous ne pouvez appliquer qu'un index clustered à votre table, je penserais à la colonne qui va être utilisée le plus pour les recherches / jointures et appliquer l'indice en clustere en conséquence. N'oubliez pas que l'indice en cluster change effectivement l'ordre physique de vos données de table. Les index non clusters ne le font pas. Ne vous inquiétez pas de cela trop au début. Vous pouvez utiliser des outils pour atteindre votre point de repère car vous allez et déterminez quels indices peuvent fonctionner mieux pour vous et les changer en conséquence.
Avez-vous déjà reçu cela résolu avec succès? Avez-vous toujours besoin d'aide avec cela?
@Drachenstern - Le projet que je mettez en œuvre cela a été reporté pour février et je vais probablement aller de l'avant avec la réponse de @ Kila.
Alors peut-être devriez-vous faire un commentaire à cet effet ou la marquer comme la réponse acceptée;)