2012-01-26 33 views
0

在我们公司,我们希望在我们的Web应用程序中记录用户历史记录,例如,当用户进入页面并保存某些内容(调用保存存储过程)时,我们将此操作记录在某处以及...... 第一种解决方案是在调用任何存储过程(SP),称之为“Insert_Log_Table”这种减少表现的SP, 二是在ORM使用多线程和另一个线程调用“Insert_Log_Table”和...什么是用户操作历史最佳实践?

我们不能使用第二种方案对于某些问题在我们的应用程序架构中,现在应该怎么做? 怎么可能有并发或多线程,因为我们不希望用户等待插入日志表和..?

回答

1

为什么你不能使用第二种解决方案?在另一个线程中运行方法是小菜一碟。您无需处理锁定,竞态条件或其他线程问题。这只是一个仅追加日志。如果方法以某种方式失败(这样没有任何东西可以解决失败),甚至不会发生任何事情,因为再次,它只是一个日志。

请参见本示例:

Thread t = new Thread(() => 
      { 
       Logger log = new logger(); 
       log.Log("..."); 
      }); 

    t.Start(); 

但作为一个方面说明,我会建议你 - 不要使用SQL这一点。使用其他可靠且经过验证的解决方案(如log4net),或者恢复基于快速内存(最终磁盘持久性)的NoSQL数据库,如Redis

+0

你愿意解释SQL为什么不健壮或没有被证实吗?如果他已经有一个数据库,那么他应该使用它。为什么要引入他可能不熟悉的另一种技术? – ChrisWue

+0

我没有说SQL不健壮;我说有更强大的日志记录解决方案。 log4net是一个配备了大量配置选项的工具,尤其是用于日志记录的工具,包括修剪,格式化,保存调用堆栈,使用各种选项持续使用(连续的,每日一次的,事件日志,基于文件的,基于数据库的等) –

+0

感谢重播,但我的项目是太大了,无法改变源,它更舒适和低成本来改变sql.after记录的历史我想把它展示给用户,所以我更喜欢日志数据在sqlDatabase.is有什么办法解决我的问题? – vesna