我正在开发一种需要在Windows平台上扩展的服务。
最初它将接收大约50个连接(每个连接将发送大约5kb数据),但它需要可扩展以接收超过500个未来。
将接收的数据保存到Microsoft SQL Server等公共数据库是不切实际的(我猜)。
是否有其他解决方案来保存数据?考虑到它每天将收到超过600万条“记录”。
共有5个步骤:
我的解决方案是:
答案 0 :(得分:9)
我不会亲自使用消息队列 - 我之前被不稳定和一般困难所困扰。我可能只是直接写入磁盘。在内存中,使用生成器/使用者队列,并将单个线程写入磁盘。生产者只会转储要写入队列的记录。
有一个单独的批处理任务,一次将一堆记录插入数据库。
一次对最佳(或至少“好”数量的记录进行批量上传)进行基准测试。您可能希望从磁盘读取一个线程,另一个写入数据库(如果数据库线程有大量积压,则文件线程阻塞),这样您就不会等待文件访问和数据库同一时间。
我建议您尽早做好一些测试,看看数据库可以处理什么(并让您测试各种不同的配置)。弄清楚瓶颈在哪里,以及它们会伤害你多少。
答案 1 :(得分:3)
我认为你过早地进行了优化。如果您需要将所有内容发送到数据库,那么在假定数据库是瓶颈之前,请查看数据库是否可以处理它。
如果数据库无法处理它,那么可能会转向Jon Skeet描述的基于磁盘的队列。
答案 2 :(得分:1)
为什么不这样做:
1。)接收数据
2.)过程数据
3.)立即保存原始数据和处理数据
如果您已经拥有它,那将为您省去再次请求它的麻烦。我会更担心你的表结构和你的数据库机器然后实际流程。我一定要确保你的插页尽可能便宜。如果这是不可能的,那么排队工作是有道理的。我不会自己使用消息队列。假设你有一台不错的SQL Server机器,假设你没有在每条记录中写入大量数据,那么每天600万条记录应该没问题。