我正在运行一个 Java 应用程序,它以给定的格式读取一些数据并在临时目录中写入一个 CSV 文件。在这个文件被完全写入后,数据被批量加载到数据库中。加载完成后,文件会立即删除。不应共享此文件。
现在,我想在 docker 容器中运行此应用程序的 jar。
从文档中,我读到:
写入容器的可写层需要存储驱动程序来管理文件系统。存储驱动程序使用 Linux 内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象会降低性能。
据我了解,如果我创建一个卷来映射主机 /tmp 文件夹会更好,这样我就可以获得更好的 I/O 操作性能。另一方面,虽然我的用例包含临时文件,但似乎出于持久性原因使用卷。
管理临时文件时是否推荐使用卷?如果没有,是否有一种有效的方法来处理 docker 中的临时文件?
我面临以下情况:
我必须将Cloud SQL PostgreSQL实例逻辑复制到外部PostgreSQL数据库,反之亦然。更具体地说,CloudSQL和外部实例将包含一些必须在每个数据库之间复制的主表和从表。但是,GCP当前不支持PostgreSQL逻辑复制和外部复制。
由于不支持它,因此我在寻找替代方法,并且注意到Debezium + Kafka可与CloudSQL MySQL一起使用,以捕获数据库更改并进行逻辑复制。我在Debezium谷歌论坛上询问了相同的问题(下面的链接) https://groups.google.com/forum/#!topic/debezium/yS61un46x8k
他们回答了我:
“ Debezium需要在源Postgres中安装特定的逻辑解码插件(ProtoBufs或wal2json),我不确定您的云SQL提供程序是否具有这种灵活性(例如在Amazon上) RDS,默认情况下已安装wal2json。”
如果这些插件之一可用或可以在Cloud SQL PostgreSQL中安装,有人可以回答我吗?如果没有,平台还不支持逻辑复制吗?提前致谢。
目前,我的 Google 帐户中有一个 Cloud SQL 实例 (PostgreSQL),但我想创建一个临时数据库,以便可以在对产品 Cloud SQL 数据库进行架构更改之前执行一些测试。
prod 数据库通过一些简单的 ETL 过程自动接收来自不同数据源的数据,我不想在临时数据库上复制这些数据加载。这些自动化流程不应在暂存中运行,因为大多数时候它们对于测试目的来说是不必要的。我也不想创建与产品一样大的临时数据库。
考虑到我上面所说的以及我不使用不同的项目来设置暂存/生产环境,我有几个问题要问:
我意识到 GCP 中有一个克隆数据库的功能。我从未使用过它,但我想知道时不时克隆我的产品数据库来创建我的临时数据库是否是一个好习惯,因为进行备份和恢复可能很痛苦。
我可以以逻辑方式使用克隆功能(仅选择一些表进行克隆等)吗?还是完全依赖物理备份?
我想克隆一个巨大的数据库可能需要几个小时,所以我想知道是否有一种方法可以仅应用两个数据库之间的差异,这样我就不必每次都克隆整个数据库,类似于复制方法?
如果我对开发/测试/生产使用单独的项目。同步不同数据库环境的可用方法有哪些?
我在 Athena 中有一个外部表链接到 S3 中的文件夹。Presto 中有一些伪列,允许我获取有关该文件夹中文件的一些元数据信息(例如 $path 伪列)。
我想知道是否有一个伪列,我可以通过使用 AWS Athena 中的查询来获取 S3 中文件的最后修改时间戳。