是否有快速,可扩展的解决方案来保存数据?

Zan*_*oni 3 c# asp.net scalability

我正在开发一种需要在Windows平台上扩展的服务.

最初它将每秒接收大约50个连接(每个连接将发送大约5kb数据),但它需要可扩展以接收超过500个未来.

将接收的数据保存到像Microsoft SQL Server这样的公共数据库是不切实际的(我猜).

还有其他解决方案来保存数据吗?考虑到它每天将收到超过600万条"记录".

有5个步骤:

  1. 通过http处理程序(c#)接收数据;
  2. 保存收到的数据; < - 这里
  3. 请求处理保存的数据;
  4. 处理请求的数据;
  5. 保存已处理的数据.< - 这里

我的预解决方案是:

  1. 通过http处理程序(c#)接收数据;
  2. 将收到的数据保存到Message Queue ;
  3. MSQ请求使用Windows服务处理保存的数据;
  4. 处理请求的数据;
  5. 将处理后的数据保存到Microsoft SQL Server(这是瓶颈);

Jon*_*eet 9

每天600万条记录听起来不是特别大.特别是,每天24小时不是每秒500 - 你认为交通是"突发性的"吗?

我不会亲自使用消息队列 - 我之前被不稳定和一般困难所困扰.我可能只是直接写入磁盘.在内存中,使用生成器/使用者队列,并将单个线程写入磁盘.生产者只会转储要写入队列的记录.

有一个单独的批处理任务,一次将一堆记录插入数据库.

一次对最佳(或至少"好"数量的记录进行批量上传)进行基准测试.您可能希望从磁盘读取一个线程,另一个写入数据库(如果数据库线程有大量积压,则文件线程阻塞),这样您就不会等待文件访问和数据库同时.

我建议您尽早做一些测试,看看数据库可以处理什么(并让您测试各种不同的配置).弄清楚瓶颈在哪里,以及它们会伤害你多少.