1

有一个具有以下要求的项目。

  • 数据读取密集型应用。
  • 一次最多 100 个并发用户。应用程序有非常高的流量
  • 虽然数据量很大,但每天只修改一次

决定使用亚音速的易于开发和在高流量环境中工作的潜力。

尽管尚未找到/解决与 SubSonic 3 一起使用的一些问题

  • 使用哪种类型的层 Active Records、Repository、Linq To SQL
  • 使用分页/排序存储过程(因为当显示 10000+ 行的分页和排序时,它们会比内置的分页机制提供更好的性能。对吧??)
  • 缓存,项目需求很清楚,需要大量使用缓存。但找不到适合亚音速的解决方案。我是否必须为其创建单独的图层,如果是,一个简短的示例会有所帮助。
4

3 回答 3

3

我为亚音速 2.x ActiveRecord 编写了一个 CacheUtil 类。它基于某人在旧亚音速论坛上发布的一些代码。(这来自一个在上一个论坛被删除之前被删除的论坛。这就是为什么软件论坛应该是永久的。)这里是一个缓存查找方法的例子。您可以将其调整为 ss3。还有inserts、fetchall、delete、clear等。Rob Connery当时说缓存有问题,故意把它排除在ss2之外。通过使用 HttpRuntime.Cache,我同时在 Web 应用程序和服务之间共享缓存。我相信我可以做到这一点,因为它是一个小型应用程序,始终在单个服务器上。

public static RecordBase<T> Find<T, ListType>(object primaryKeyValue)
    where T: RecordBase<T>, new()
    where ListType: AbstractList<T, ListType>, new()
{
    string key = typeof(T).ToString();
    if(HttpRuntime.Cache[key] == null)
        FetchAll<T, ListType>();
    if(HttpRuntime.Cache[key] != null)
    {
        ListType collection = (ListType)HttpRuntime.Cache[key];
        foreach(T item in collection)
        {
            if(item.GetPrimaryKeyValue().Equals(primaryKeyValue))
                return item;
        }
    }
    return null;
}
于 2009-07-11T04:54:12.563 回答
1

写了一篇关于我如何在 SubSonic 2.x 中使用缓存的帖子。它与 3.x 不是 100% 兼容,但概念是相同的。

于 2009-07-12T18:44:11.957 回答
1

我在这里类似地回答了这个问题.NET 的线程安全缓存库. 基本上你需要一个 CollectionCacheManager - 然后我在每个类型的顶部添加一个层,并通过这个单独的缓存控制器汇集所有请求,这些控制器又使用 1 个 collectioncachecontroller。在外层,我混合了纯亚音速、linq,以及当时符合要求的任何东西。SubSonic 的美妙之处在于它不应该妨碍您。至于存储过程的性能,我会在 CodingHorror 上指出 Jeff Atwoods 的文章并重新评估您的储蓄。硬件非常便宜,内存也是如此,数据库则不然。就我个人而言,我保持数据库超级简单和轻量级,并且更喜欢让我的网络服务器将所有内容缓存在内存中。数据库服务器做的工作很少,这是我喜欢的方式。添加一些额外的负载平衡 Web 服务器不是 几乎与增加数据库吞吐量、集群或分片数据库一样重要。SQL 和存储过程也很难编写和维护。把你花在做这件事上的预算拿出来,而不是加强你的硬件……记住硬件非常便宜,优秀的开发人员不是。祝你好运!

于 2011-01-31T23:01:57.880 回答