Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database 行处理数据从红移到红移_Database_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Database 行处理数据从红移到红移

Database 行处理数据从红移到红移,database,amazon-web-services,amazon-redshift,Database,Amazon Web Services,Amazon Redshift,我们正在处理需求,我们希望从一个红移集群逐行获取增量数据,根据需求对其进行处理,并将其插入另一个红移集群。我们希望按行操作,而不是批处理操作。为此,我们正在编写一个通用服务,它将从Redshift->Redshift执行行处理。所以,它就像红移->服务->红移。 对于插入数据,我们将使用插入查询来插入。我们将在特定批处理后提交,而不是按行提交,以提高性能。 但我有点担心多个插入查询的性能。或者是否有其他工具可以实现这一点。有许多ETL工具可用,但都进行批处理。我们希望按行处理。有人能提出建议吗?

我们正在处理需求,我们希望从一个红移集群逐行获取增量数据,根据需求对其进行处理,并将其插入另一个红移集群。我们希望按行操作,而不是批处理操作。为此,我们正在编写一个通用服务,它将从Redshift->Redshift执行行处理。所以,它就像红移->服务->红移。 对于插入数据,我们将使用插入查询来插入。我们将在特定批处理后提交,而不是按行提交,以提高性能。
但我有点担心多个插入查询的性能。或者是否有其他工具可以实现这一点。有许多ETL工具可用,但都进行批处理。我们希望按行处理。有人能提出建议吗?

我可以保证,根据经验,你的方法不会很有效。有关详细的最佳做法,请参阅此链接:

但是,我建议您按照以下步骤操作:

编写一个python脚本,根据查询条件将数据从源红移卸载到S3,该查询条件根据您的要求过滤数据,即基于一些阈值,如时间、日期等。此操作应该很快,您可以安排此脚本每分钟或几分钟执行一次,生成多个文件

现在,S3中基本上有一个连续的文件流,其中每个文件的大小或批大小可以根据上一个脚本的频率进行控制

现在,您所要做的就是设置一个服务,在对象/文件创建时不断轮询S3,然后根据需要对其进行处理,并将处理后的文件放入另一个bucket中。我们称之为B2

设置另一个python脚本/ETL步骤,远程执行来自bucket B2的复制命令


不过,这只是一个初步想法。您必须改进这种方法并优化它。祝你好运

除非音量非常低,否则您不希望这样做。表现会很差。必须有更好的方法从另一个来源获取数据您所说的每批数据量是多少?使用红移,您希望进行批量加载,而不是插入。考虑让您的服务将行写入S3作为多个文件,然后执行大量的加载,每次都意味着数万到一百万行。如果一次只加载1000行或更少的行,则会出现红移问题。插入只是一个坏主意,因为这会阻止Redshift优化其表和列。在不知道处理行的要求的情况下,我无法接受一次执行一行的想法,但是如果我们假设必须一次执行一行,那么我们就不想使用Redshift。将数据存储在OLTP数据库中,在那里处理行,然后将其加载到Redshift,或者对OLTP执行红移批量,在那里处理,然后批量返回到Redshift。谢谢您的回答。考虑到我的用例和redshift的功能,我决定改变我的项目架构设计。我很想知道你们最终是如何做到的。你能在这里分享你的最终方法吗?