asp.net个人资料提供者

时间:2009-09-02 05:36:53

标签: asp.net profile-provider

我知道网站上已有关于此主题的一些问题......

我只是想了解将ASP.NET Profile Provider用于拥有大量流量的网站是否安全?

我看到它的方式,它的布局效率低下。您存储属性名称(这是一个字符串)和属性值(也是一个字符串)。如果您只是想在配置文件中存储甚至年龄,则不必要地将字符串“age”一遍又一遍地存储在数据库中,而使用自创建的表,您只需添加一个标题为age的列,而不是冗余?

(我只是想确保我不会错过任何关于它的东西,因为我对它很新。)

3 个答案:

答案 0 :(得分:8)

配置文件提供程序故意使用EAV(Entity-Attribute-Value)设计,因为配置文件通常通常具有稀疏填充的架构 - 也就是说,有许多潜在的属性,但只有少数将用于给定单个实体,从实体到下一个实体使用的少数实体差异很大。

让我们使用一个完全随意的例子 - 假设只有十分之一的用户希望提供他们的年龄。现在把这个列变成废话,不是吗?

但是,如果您的申请强制要求年龄,该怎么办?好的,该列填充了每个人。但是如果你需要在配置文件中做一个注释“用户不想再看到这个模糊的对话框”了。对于应用程序中的每个对话框,您是否真的想要一个列,用户是否想要查看它?可能不是。当你进入任何重要范围的应用的一次性细节时,EAV实际上变成了更经济的选择。

在一般情况下,它可以很好地扩展(远比你想象的要好得多)。具体而言,一如既往地使用可行的方法并解决出现时的性能问题。无论配置文件提供程序的可伸缩性限制是什么,您都会知道何时访问它们。我保证两件事 - (1)在你必须解决之前,你必须解决许多你没想到的其他性能问题; (2)如果您的网站获得足够的流量来破坏配置文件提供商,那么这是一个很好的问题。

答案 1 :(得分:0)

我同意Rex M,除非您需要按年龄对所有用户进行排序或使用聚合配置文件数据执行其他操作。然后你可以考虑自己滚动。但是,对于仅存储您在此处和那里访问的属性,Rex M是正确的。

答案 2 :(得分:0)

我知道你的意思。使用具有必填字段的列的另一个表来补充配置文件提供程序的表是否有意义?或者你认为加入的开销不会使它不值得吗?