【发布时间】:2009-11-26 00:19:19
【问题描述】:
我正在构建可容纳 50,000 到 150,000 家公司的商业应用程序。每个公司(db 行)由 4-5 个属性/列(标题、位置、...)表示。 ORM 是 LINQ2SQL。
我必须做一些计算,为此我对特定公司有很多查询。现在,每当我需要某些东西时,我都会去 db,它会产生 50-200 个查询,具体取决于计算复杂度。我试图将所有公司都缓存起来,对于 db 中的 10,000 行(公司),它需要大约 5.5MB 的缓存。在这种情况下,我只有一个查询。
这个应用程序将在共享主机服务器上,所以我的资源是有限的。我很感兴趣,如果我尝试加载,比如说 100,000 个公司(行、对象)会发生什么?还是把它放在缓存中?
一般托管公司对 ASP.NET 应用程序是否有任何 RAM 限制?它是否依赖于专用的应用程序池(我可以将应用程序放到专用池中)?
选项是:
- 将整个表加载到 c# 对象。 Id 做了一些内存分析,10,000 个对象需要 5MB RAM
- 在需要时查询 db 以获取引用的对象。
任务是:对于给定的公司 A,建立关联公司树。
表格和列:
公司:IdCompany、标题、地址、联系人
CompanyConnection:IdParentCompany、IdChildCompany p>
【问题讨论】:
-
为什么需要 50-200 次查询呢?如果你懒加载大量数据,你应该预加载子行。
-
每个公司都有一个或多个其他公司的引用(多对多关系)。我在 c# 中有递归函数,它遍历公司树(从父母到每个孩子,等等)并寻找一些东西。当我想获得子公司时,我需要查询 db。也许这一切都可以在存储过程中完成,但我的 SQL 不太好,我正在尝试将我的业务逻辑保留在 c#(DDD 风格的应用程序)中
标签: asp.net performance iis memory hosting