我试图了解如何在服务器之间真正处理和发送数据,但我无法找到一步一步的详细解释。用一个例子来解释:
假设您有100M大小为10GB的记录,并且您需要使用单独的台式计算机通过LAN在2个数据库服务器之间传输数据以执行该脚本。总共有三台电脑:
SQL看起来像这样:
Insert Into ServerBDatabase.MyTable (MyFields)
Select MyFields
From ServerADatabase.MyTable
有人可以解释数据的处理位置和发送方式吗?或者甚至指出一个很好的资源来阅读这个主题。
例如,我试图了解它是否是这样的:
桌面C上的客户端工具将查询命令发送到服务器A上的DBMS。此时,通过LAN发送的所有内容都是命令的文本。
服务器A上的DBMS接收查询命令,解释它,然后 处理服务器A上的数据。此时,完整的10GB数据被加载到内存中进行处理,并且没有任何内容通过LAN发送。
在服务器A上处理完整的100M记录后,服务器A上的DBMS将查询命令的文本和LAN上的完整100M数据记录一起发送到服务器B上的DBMS。在带宽限制方面,这些数据被分解并通过LAN以每秒一定的比特数发送到块中,并以这些数据块数量加载到服务器B的内存中。
当服务器B上的DBMS收到LAN上的数据块时,它会将其重新组合在服务器B上的内存中,以便将其重新恢复为完整的100M记录状态。
一旦100M记录由服务器B上的DBMS完全拼凑回来,服务器B上的DBMS就会执行查询命令,将目标表中记录的记录插入目标表中的一行。一段时间并将其写入磁盘。
所有这些都是假设,所以我知道我可以把它全部弄错,这就是我寻求帮助的原因。请帮助纠正我的错误和/或填写空白。
答案 0 :(得分:1)
这是您的查询:
Insert Into ServerBDatabase.MyTable (MyFields)
Select MyFields
From ServerADatabase.MyTable;
据推测,您是在连接到服务器A的客户端工具上执行此操作(尽管相同的推理适用于服务器B)。整个查询将发送到服务器,服务器A需要与服务器B建立远程连接。
换句话说,一旦发送了查询,客户端就与它无关 - 除了等待查询被发送。
关于从一个数据库插入另一个数据库的细节,这些数据库取决于数据库。我希望数据能够在一个事务中流式传输到服务器B上的表中。具体细节可能取决于特定的数据库软件及其配置。