如何在c#中使用线程处理多个查询

时间:2014-08-06 19:52:53

标签: c# mysql sql .net multithreading

我在C#中使用多线程应用程序时遇到问题,我很感激一些帮助,因为我是多线程的新手。

这是一个场景:我将有一个移动应用程序,它将在我的数据库(Mysql)中执行大量查询/请求,我的目标是制作一个服务器端应用程序,在Linux机器上使用C#处理多个查询(单声道救援)。我的公司在做应用程序的数据库方面,还有另一家公司在制作移动应用程序。我会将数据发送到云端,云服务器会将其发送给客户端。

我正在通过C#和C#4.0简单地阅读CLR的线程章节,但直到现在我对我能做的事情只有一点线索,我相信异步方法会起作用,因为它不使用很多资源,但我对如何处理线程并发(优先级,状态)有点困惑。

所以这是我的问题:

  • 解决此问题的最佳方法是什么?
  • .NET框架中哪一个类适合这项工作?
  • 我应该如何处理查询队列?
  • 如何足够快地处理数千个线程/查询,以便我的移动应用用户可以在5分钟的时间内获得查询结果?

一些观察结果:

我知道完成查询的数据和时间将指数地等于我数据库中用户数据的大小,但我需要尽可能快地处理(少数和大数据)。

我将数据发送到云数据库(Amazon EC2),然后我将其发送到客户端。我不会处理这个,这将由另一家公司处理,所以我的工作是快速完成查询并使它们可用于云数据库。

我知道要将信息发送到我的客户端我依赖于我的IT基础架构,但重点是:我如何快速解决这个问题,我只需要担心我的应用程序基础架构。

我无法将查询放在大字符串上并将其丢弃在数据库上,因为我需要在将结果发送给用户之前单独处理每个查询结果。

存储引擎是MyISAM,因此不允许任何事务。

1 个答案:

答案 0 :(得分:3)

我会在顶级servicestack或WebAPI上创建一个REST Web服务,以通过服务抽象访问您的数据。这些服务中的任何一个都能够处理来自您的移动客户端的同时请求,因为它们是为此而设计的。另外,我将创建一个类,可以调解访问并为您的数据库(即存储库)提供工作单元。 MySQL的连接提供程序应该能够处理来自Web服务的同时请求,因此您不必担心线程和请求管理。如果单个实例不够,您可以添加更多运行相同代码的Web服务器,并使用负载平衡器将请求分发到每个实例,其中服务/数据代码相同。

基于单声道的web-api / servicestack的一些资源:

http://www.piotrwalat.net/running-asp-net-web-api-services-under-linux-and-os-x/

What is the best way to run ServiceStack on Linux / Mono?