簡體   English   中英

適用於非常大的應用程序的ASP.NET自定義成員

[英]ASP.NET Custom Membership Provider for very large application

我必須為一個非常大的網站提供會員解決方案。 該站點將使用ASP.NET MVC 2和MS SQL2008數據庫構建。

目前的會員提供商看起來似乎有點過分,功能太多了。

我要存儲的只是電子郵件/密碼和基本個人資料信息,例如First / LastName,電話號碼。 我只需要2個角色,管理員和用戶。

考慮到可能有數百萬用戶注冊,您對此類情景有何建議? StackOverflow使用什么?

我過去經常使用現有的會員API,並將其擴展到存儲其他信息等。但是有表格如

aspnet_Applications
aspnet_Paths
aspnet_SchemaVersions
aspnet_WebEvent_Events
aspnet_PersonalizationAllUsers
aspnet_PersonalizationPerUser

這是非常多余的,我從來沒有找到用途。

編輯
為了澄清@drachenstern回答后的一些其他冗余,還有一些額外的列,我在Membership / Users表中沒有用,但是會添加到每個select / insert語句的有效負載中。

  1. MobilePIN
  2. PasswordQuestion / PasswordAnswer (我會做基於電子郵件的密碼恢復)
  3. 已批准(用戶將始終獲得批准)
  4. 評論
  5. MobileAlias
  6. 用戶名/ LoweredUsername (或Email / LoweredEmail) [email是用戶名,因此只需要其中的1個]

此外,我聽說GUID並不是那么快,而且更願意使用整數(就像Facebook那樣),這也是公開曝光的。

我如何創建自己的成員資格提供程序 ,重新使用一些成員資格API (驗證,密碼加密,登錄cookie等),但只能使用符合我要求的表格?

我們非常歡迎鏈接到文章和現有實施,我的谷歌搜索返回了一些非常基本的例子。

提前致謝
馬爾科

@Marko我當然可以理解標准會員制可能包含比你需要的功能更多的功能,但事實是它確實不重要。 您不會使用會員系統的某些部分,就像您將不會使用的部分.Net一樣。 有很多東西可以做.Net可以做你永遠不會使用的東西,但你不會通過.Net並刪除你的功能嗎? 當然不是。 你必須把注意力集中在那些對你要完成的事情很重要的事情上。 不要陷入分析的癱瘓狀態。 你將浪費你的時間,旋轉你的車輪,而不是最終為你創造的東西。 現在微軟有時會弄錯,但他們確實做了很多事情。 您不必擁抱他們為實現目標所做的一切 - 您只需要了解對您的需求有何重要意義。

至於Guids和ints作為主鍵,讓我解釋一下。 主鍵和聚簇索引之間存在重要差異。 您可以在不屬於主鍵的列上添加主鍵和聚簇索引! 這意味着,如果通過名稱(或其他)排列數據更為重要,則可以自定義聚簇索引以准確反映所需內容而不會影響主鍵。 讓我用另一種方式說 - 主鍵和聚簇索引不是同一個。 我寫了一篇關於如何添加聚簇索引然后將主鍵添加到表中的博客文章。 聚簇索引將按照您需要的方式對表行進行物理排序,主鍵將強制執行您需要的完整性。 看看我的博客文章,看看你究竟如何做到這一點。

這是鏈接 - http://iamdotnetcrazy.blogspot.com/2010/09/primary-keys-do-not-or-should-not-equal.html

這很簡單,只需添加聚簇索引FIRST,然后添加主鍵SECOND。 必須按順序完成,否則您將無法執行此操作。 當然,這假定您使用的是Sql Server。 大多數人都沒有意識到這一點,因為SQL Server默認會在主鍵上創建聚簇索引,但您只需先添加聚簇索引,然后添加主鍵,就可以了。 當您的數據庫和服務器系統向外擴展時,使用int作為主鍵可能會成為非常棘手的問題。 我建議使用Guids並添加聚集索引以反映實際需要存儲數據的方式。

現在,總而言之,我只想告訴你要創造一些偉大的東西,不要陷入表面細節的困擾,這些細節不會給你足夠的性能提升。 生命太短暫。 此外,請記住,您的系統只能與最慢的代碼一樣快。 因此,請務必查看實際上需要花費大量時間並處理這些事情的事情。

還有一件事。 你不能把你在網上看到的所有東西都拿到面值。 技術隨時間而變化。 有時你可能會查看很久以前有人寫過的問題的答案,這個問題今天已經不再適用了。 此外,人們將回答問題並向您提供信息,而無需實際測試他們所說的內容,看是否真實。 您可以為您的應用程序做的最好的事情是對它進行壓力測試。 如果您使用的是ASP.Net MVC,則可以在測試中執行此操作。 您可以做的一件事是添加一個for循環,在測試中將用戶添加到您的應用程序,然后進行測試。 這是一個想法。 還有其他方法。 您只需要花一點力氣來設計好您的測試,或者至少為您的目的做好。

祝你好運!

目前的會員提供商看起來似乎有點過分,功能太多了。

我要存儲的只是電子郵件/密碼和基本個人資料信息,例如First / LastName,電話號碼。 我只需要2個角色,管理員和用戶。

然后只使用那部分。 它不會使用您不使用的部件,並且您可能會發現您需要其他部件。 這些類已經存在於.NET框架中,因此您無需提供任何許可或任何內容。

數據庫的大小非常小,如果你喜歡我,並將aspnetdb保留給自己,那么你實際上並沒有從你的其他數據庫中獲取任何東西。

您是否有令人信服的理由使用第三方組件已超出框架中的內容?


編輯

還有一些額外的列,我在Membership / Users表中沒有用,但是會添加到每個select / insert語句的有效負載中。

MobilePIN PasswordQuestion / PasswordAnswer(我將進行基於電子郵件的密碼恢復)IsApproved(用戶將始終被批准)評論MobileAlias用戶名/ LoweredUsername(或Email / LoweredEmail)[email是用戶名,因此只需要其中1個]

這聽起來像你想microoptimize 傳遞空字符串幾乎沒有成本(好吧,它就在那里,但是你必須要知道它花了多少錢。每個用戶不會那么多)。 我們通常也不會在我們的應用程序中使用所有這些字段,但我們使用會員系統而沒有可測量的不利影響。

此外,我聽說Guid並不是那么快,而且更願意使用整數(就像Facebook那樣)也會公開曝光。

我聽說過cookiemonster喜歡cookies。 同樣,如果沒有剖析,你不知道這是否有害。 通常人們使用GUID,因為他們希望它絕對(絕對程度)絕對唯一,無論何時創建。 每個用戶生成ONCE的成本並不是那么重。 不是在你已經為他們創建一個新帳戶時。


由於您完全從頭開始創建MembershipProvider,因此以下是一些參考:

http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.aspx

http://www.4guysfromrolla.com/articles/120705-1.aspx

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

http://www.amazon.com/ASP-NET-3-5-Unleashed-Stephen-Walther/dp/0672330113

Stephen Walther在他的書中對此進行了詳細介紹,這對你來說是一個很好的參考。

我的建議是讓你對它進行基准測試 添加您認為在生產中將擁有的記錄數量,並提交與生產中相同數量的請求,並查看它對您的環境的性能。

我的猜測是沒關系,你所談論的開銷是微不足道的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM