Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
通过将两个表导入sql数据库或使用jdbc,比较它们是否更快? 背景_Sql_Database_Jdbc_Diff_System Design - Fatal编程技术网

通过将两个表导入sql数据库或使用jdbc,比较它们是否更快? 背景

通过将两个表导入sql数据库或使用jdbc,比较它们是否更快? 背景,sql,database,jdbc,diff,system-design,Sql,Database,Jdbc,Diff,System Design,我需要比较两个不同数据中心中的两个表,以确保它们是相同的。这些表格可能有数亿条,甚至10亿行 例如,生产数据管道和开发数据管道。我需要验证每个管道末端的表是否相同,但是,它们位于不同的数据中心 如果每行和每列的所有值和数据类型都匹配,则表是相同的。每个表都有主键 下面是一个输入和输出示例: 输入 输出: table1 missing rows (empty): Name | Age | | | table2 missing rows: Name | Age | Jim |

我需要比较两个不同数据中心中的两个表,以确保它们是相同的。这些表格可能有数亿条,甚至10亿行

例如,生产数据管道和开发数据管道。我需要验证每个管道末端的表是否相同,但是,它们位于不同的数据中心

如果每行和每列的所有值和数据类型都匹配,则表是相同的。每个表都有主键

下面是一个输入和输出示例:

输入

输出:

table1 missing rows (empty):
Name | Age |
     |     |

table2 missing rows:
Name | Age |
Jim  | 45  |

mismatching rows:
Name | Age | table |
Alice| 25.0| table1|
Alice| 25  | table2|
Cal  | 52  | table1|
Cal  | 42  | table2|
注意:输出不需要与上述格式完全相同,但需要包含相同的信息

问题: 将这些表导入到新的公共SQL环境中,然后使用SQL生成所需的输出是否更快

使用JDBC之类的东西,检索每个表的所有行,对每个表进行排序,然后逐行比较以生成所需的输出,是否更快

编辑:
上述解决方案将在承载其中一个表的数据中心执行。在第一种解决方案中,创建新数据库的唯一目的是使用SQL比较这些表,没有其他用途。

更快的解决方案是将两个表加载到编程语言中的变量(内存)中,然后与您喜欢的算法进行比较


首先将它们复制到新表是磁盘读/写操作时间的两倍以上,尤其是写操作。

您应该从数据库选项开始。特别是如果数据库通过数据库链接连接,则可以轻松设置数据传输

这样的比较通常会导致两个源的
完全外部连接
,经验告诉我们,DIY连接的性能明显低于本机数据库实现(例如,您可以部署并行选项)

无论如何,您可以尝试实现一些模拟算法,这样就可以进行比较,而无需传输整个表

例如,首先扫描两个源的位置,以识别哪些部分相同(可以忽略),然后仅传输和比较有差异的一方


因此,如果您希望表几乎相同,并且具有允许某种层次结构的键,那么这种方法可能比暴力完全比较更好。

您确实需要在您的环境中对数据进行测试。您需要定义“比较”的含义(例如,“1.00”是否与“1”相同?)。数据库还有其他用途吗?它在一个更强大的服务器上吗?我现在正在编辑这个问题。感谢您的输入,您将不得不进行艰苦的编码以击败数据库查询(例如,使用并行选项),并且不要忘记表不需要与您的内存匹配,因此您应该更加小心声明。
table1 missing rows (empty):
Name | Age |
     |     |

table2 missing rows:
Name | Age |
Jim  | 45  |

mismatching rows:
Name | Age | table |
Alice| 25.0| table1|
Alice| 25  | table2|
Cal  | 52  | table1|
Cal  | 42  | table2|