我们是 ASP.NET MVC 框架和 SQL Server 的快乐用户,目前正在使用 LINQ-to-SQL。它通过面向消费者的应用程序很好地满足了我们的需求,该应用程序每月有大约 140 万用户和 2+ 百万个活跃的唯一身份。
我们早就应该开始记录 全部 用户操作(文章的查看、我们网站上的搜索等),我们正在尝试确定正确的架构来实现这一点。
我们希望归档系统是它自己的实体,而不是存储生产文章和搜索引擎的主 SQL 集群的一部分。我们希望它成为自己的 SQL 集群,一开始只有一个盒子。
为简化问题,假设我们只想记录当月数百万用户进入我们网站的搜索词,并且我们希望以尽可能少的周期密集型方式进行。
我的问题:
(1) 是否有异步方式将搜索词转储到远程框? LINQ 是否支持异步?
(2) 您是否建议在 RAM 缓存中建立一个包含 1,000 个(userId、searchTerm、date)日志项的缓存,然后每隔一段时间将它们刷新到数据库中?我认为这种方法会减少打开/关闭连接。
还是我在想这完全错误?我们希望在易于实现和健壮性之间取得平衡。
最佳答案
1)当然可以,有不同的解决方案来实现它。 Linq 不是您需要的工具。
2)这样做应该不会有任何重大改进,只有在执行搜索时才会触发“日志记录”。您最终会收到两个电话而不是一个电话,这没什么大不了的。
一个建议是使用 AOP
您可以使用 Postsharp 创建一个干净且独立的日志记录层。 (虽然还有其他选择)。只有当您需要跟踪传递给操作的内容时,您才会使用所需的日志记录属性来修饰您的操作。
这种方法的主要优点是:
AOP 是一种常见的做法,特别是当涉及到可以添加到多个方法中的行为时,例如日志记录、身份验证等。是的,它可以以异步方式使用。
关于asp.net-mvc - 在生产 MVC/SQL 应用程序中记录大量操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685444/