asp.net-mvc - 在生产 MVC/SQL 应用程序中记录大量操作

标签 asp.net-mvc sql-server-2008 model-view-controller bigdata

我们是 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/

    相关文章:

    javascript - 如何将上传的 excel 文件从 javascript 发送到 MVC 4 中的 Controller

    c# - 如何修复传入字典的模型项类型错误?

    xml - 将 Sql 表转换为 XML

    node.js - 避免 Node.js 中的单例?

    javascript - AngularJs - 在准备好之前访问 $scope 变量的代码

    javascript - 将 sendAsBinary 与 ASP.Net MVC 结合使用

    c# - DropDownList 未按预期运行

    sql - 连接列而不包括具有空值的列?

    sql-server - 克隆带有所有新主键的 SQL Server 数据库

    javascript - 为什么我们需要 backbone js 或任何 JS MVC 框架?