none
提高数据层的性能,请各位前辈看一下方案可行吗? RRS feed

  • 问题

  • 由于公司的业务逻辑需要,需要采用异步的方式对数据层进行操作。

    我目前设计的方案是:
    1、 在Web服务器的内存中维护一个DataSet对象,与数据库服务器中的数据表关系是一一对应的。
    2、 如果是select操作,则直接读取DataSet中DataTable的数据。
    3、 如果是Insert、Update、Delete操作,则先在DataSet中操作,然后通过MSMQ向数据库服务器发送消息,然后Web服务器就立刻返回操作到客户端。在数据服务器上有一个专门的线程,处理MSMQ队列中收到的消息,根据这些消息的先后顺序对数据库进行Insert、Update、Delete操作。

    我想的是通过这样操作,客户端访问Web服务器后就能立即获取操作结果,而具体的数据库操作交给MSMQ来异步执行。不知道我的这个思路是否正确,或有什么不妥。望前辈高手们指教!
    2009年9月5日 8:58

答案

  • 您好,个人观点请参考:

     技术因需要而使用,如何判断需要?是要通过对真实的使用场景模拟测试而得出的。为了公司业务逻辑的需要,并不是为了提高性能的需要,这和是否采用异步并无多大关系。上面的方案是否建立在测试的基础上?

    1、维护DataSet和数据库对应是很消耗资源的,又如何考虑内存使用的策略,以防止内存溢出命中等问题。因为DataSet是一直增长的。而且我相信数据库本身已做的很好了。Sql server本身就已经对常用数据做缓存了。这一点可以通过查看Sql server进程占用内存来验证。我想可以通过采用存储过程来提升性能。

    2、是否真的到了使用MSMQ的地步,真的数据量大到无法正常写入数据而导致错误。这个需要做性能测试才能得出。
         即使采用了这种方法来实现,那么如何保证在DataSet中写入的数据与真实的数据库的数据一致?对于数据库来说可以使用事务,那么对于DataSet和数据库两者共同使用来说如何保证事务?采用易失型事务处理?相信又要增加编程的技能和复杂度。

    3、解决上述问题后,我想如何划分好业务实体的边界也很重要。
    2009年9月5日 9:33
    版主
  • 楼上的同志说的很好。
    对于你想提高数据访问层的性能,我想你是想通过缓存来实现。
    使用DataSet的确是一种途径,但如果你使用的是.net framework2.0及以上版本的话,最好使用SqlDependency 。
    微软已经给我们准备了一套很好的解决方案。

    做最好的自己
    2009年9月6日 0:50

全部回复

  • 您好,个人观点请参考:

     技术因需要而使用,如何判断需要?是要通过对真实的使用场景模拟测试而得出的。为了公司业务逻辑的需要,并不是为了提高性能的需要,这和是否采用异步并无多大关系。上面的方案是否建立在测试的基础上?

    1、维护DataSet和数据库对应是很消耗资源的,又如何考虑内存使用的策略,以防止内存溢出命中等问题。因为DataSet是一直增长的。而且我相信数据库本身已做的很好了。Sql server本身就已经对常用数据做缓存了。这一点可以通过查看Sql server进程占用内存来验证。我想可以通过采用存储过程来提升性能。

    2、是否真的到了使用MSMQ的地步,真的数据量大到无法正常写入数据而导致错误。这个需要做性能测试才能得出。
         即使采用了这种方法来实现,那么如何保证在DataSet中写入的数据与真实的数据库的数据一致?对于数据库来说可以使用事务,那么对于DataSet和数据库两者共同使用来说如何保证事务?采用易失型事务处理?相信又要增加编程的技能和复杂度。

    3、解决上述问题后,我想如何划分好业务实体的边界也很重要。
    2009年9月5日 9:33
    版主
  • 楼上的同志说的很好。
    对于你想提高数据访问层的性能,我想你是想通过缓存来实现。
    使用DataSet的确是一种途径,但如果你使用的是.net framework2.0及以上版本的话,最好使用SqlDependency 。
    微软已经给我们准备了一套很好的解决方案。

    做最好的自己
    2009年9月6日 0:50