Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在sql server中管理大数据_.net_Sql Server_Database_Bigdata - Fatal编程技术网

.net 在sql server中管理大数据

.net 在sql server中管理大数据,.net,sql-server,database,bigdata,.net,Sql Server,Database,Bigdata,我们的团队面临一个问题,即查询插入到表中的sql server块上的大量数据 我们正在进行一个.NET项目,该项目涉及保存和查询大量数据。该项目包含两个数据库,一个是实时数据库,另一个是历史数据库,都是SQL Server数据库,它们位于不同的计算机上。这两个数据库具有完全相同的表结构,只有四个表 实时数据库包含少量实时数据,其中的数据不断更新。历史数据库包含所有更新历史。当项目运行时,它将向实时数据库发送更新查询,并将查询插入历史数据库。每天将在历史数据库上执行大约200万次插入。查询是异步执

我们的团队面临一个问题,即查询插入到表中的sql server块上的大量数据

我们正在进行一个.NET项目,该项目涉及保存和查询大量数据。该项目包含两个数据库,一个是实时数据库,另一个是历史数据库,都是SQL Server数据库,它们位于不同的计算机上。这两个数据库具有完全相同的表结构,只有四个表

实时数据库包含少量实时数据,其中的数据不断更新。历史数据库包含所有更新历史。当项目运行时,它将向实时数据库发送更新查询,并将查询插入历史数据库。每天将在历史数据库上执行大约200万次插入。查询是异步执行的

历史数据库也将用于数据检索和报告目的。人们将在服务器上运行查询,他们将运行的查询超出了我们的控制范围。我们现在面临的问题是,当一个返回大量行的查询正在运行时,连接池将在很短的时间内充满,因此会发生连接超时,数据将丢失

我们已经尝试过调整表上的索引,增加连接池的最大大小并增加超时时间,但没有一个能从根本上解决问题。在生产中,该项目将运行5年,届时数据库中将有40亿行


我猜我真正的问题是,人们通常如何处理SQL Server中的大数据,如何在一个有几百万或数十亿行的表上同时管理插入和选择。

你的体系结构有一个基本的错误,即它不认为历史数据库是实时的。它实际上是,尽管它的名字,因为数据是实时插入的。你可以随意调用它,分割插入和更新,但是你仍然需要为你当前的架构进行修复

为了解决这个问题,您可以在概念上为第三个db添加/重新配置,这将暂时解耦插入。您可以创建一个作业(例如SSIS包),在非高峰时间将行批量插入数据库,而不是实时输入历史数据库。这可能是一天一次,比如凌晨2点,或者一天中多次。这取决于你的生意。假设非高峰传输和查询发生在不同的时间,周期性批量加载将允许快速批量传输,同时不会减慢对历史数据执行的查询。权衡的结果是,您的历史数据不符合第二个标准,但这可能已经足够好了。当然,您需要在传输之间的某个位置存储实时插入。这就是为什么我提到了第三个db,但您可以简单地将临时存储折叠到实时db中,而不影响后端用户

这就是在野外经常做的事情,直接回答你的最后一个问题。您可以通过某个周期传输过程将事务处理数据库(实时数据库)与分析处理(历史、OLAP、数据仓库等)分开,该过程试图避开事务处理和查询,通常是通过某个计划任务。您还可以使用排队系统(例如MSMQ、RabbitMQ等)作为实时数据库和历史数据库之间的中间存储。这将使两个数据库解耦,同时还允许查询历史数据的更接近实时的可用性

如果计划的批量传输或队列不是一个可行的选项,您可以取消规范化。弄清楚收集的是什么数据,以及如何聚合这些数据,并专门为这些查询创建非规范化的表


祝你好运

如果您只是在历史数据库的表中插入数据,并且使用单语句查询,请尝试将事务隔离级别设置为“读取未提交”。@JohnLBevan谢谢您的回复。请看我对保罗的评论。谢谢你的回复。你说的很有道理。上周,管理db服务器的家伙们将RAM从4GB升级到了8GB。在那之后,我们的团队花了一整天的时间试图重现这个问题,但不幸的是我们没有得到它。我们认为这可能是由于内存不足。我们决定将其保留几天,让数据量增长,看看会发生什么。如果同样的问题再次发生,第三个概念上的db将是我们的下一步。Cheers@BboyJeans:从短期来看,更多的RAM将解决很多问题,但从长远来看,单机的功能是有限的。虽然您的痛苦暂时缓解了,但我建议您积极主动地进行架构更改。如果您的团队在采取行动之前再次等待减速,痛苦可能会变得更严重。