MongoDB通过airByte同步数据到clickhouse 可行性分析

 

  • 需求: 

 

MongDB 要对CUSTOMER_LABEL中的100多个字段,的任意组合做查询条件、并按照年龄、性别,消费能力做统计分析。  数据大小600万条,后续每年增长300万条。

  • 问题

MogoDB是文档数据类型,项目需要100多个字段类型,其中有String, Double, Int, Array, Document等数据类型。 要对其中100多个字段做统计分析,分析维度不固定。

所以无法对每一个字段设置索引,导致600万数据统计时间近15-30秒。

  • 方案目标

将mongoDB同步给clickhouse, 发挥clickhouse在统计情况下的性能优势。

clickhouse版本: 

     *     21.12.3.32 最新版本8 :

 

  • 0.39.41-alpha. airybte

  方案问题点:

1:   UAT环境验证,发现同步后clickhouse字段只有15个左右,与真实的全量字段有较大差别。

原因解析: MogoDB数据是变动的,很不幸运的是 airbyte在同步前需要分析mongoDB的schema结构,用来生成对应的clickhouse数据结构。统计的是10000条,这10000条尽然是早期生成数据,分析出来的schema字段只有10-15个字段。

解决方案: MogoDB环境为一主二从的部署。

 MogonDB的objectId可以由四个部分组成, 也就是时间,机器码,线程, 随机数。但这并不意味着ObjectId中时间最小的,就是自然存储顺序。

 还存在objectId被人为指定, 数据恢复,数据迁移等原因。导致第一条数据并非在业务上,最早生成的第一条数据。 但总体上可以说,MongoDB第一存储是按照

时间插入顺序逐条插入,并顺序存储。

2:    为保证在任意目标的可执行性,可以做如下操作,前替条件mongoDB 中的objectID不参与任务业务。

  2.1:  先查询第一条数据, 如果第一条数据为customerId=-99 表示,可以对customerId全量字字段更新。

  2.2:  如果第一条数据,不等于-99 ,者需要对其数据迁移,并删除原来为-99的数据,并对第一条数据执行全量字段更新。

3:  全量同步&还是增量同步

 全量同步方案,每次需要30-50分钟, 如果是覆盖模式为有段时间功能不可用的情况,

 增量同步,核心是对于修改的同步能力,实时性问题?  末验证

 

1:  遇到的问题

同步数据时,应该clickhouse将raw表转成normalization table时,一次性将所有数据将成table数据,导致过大。 600万数据50个字段, 无法在14G(服务器内存16G)的服务器上成功

Database Error in model customer_label_scd (models/generated/airbyte_incremental/scd/uat4_admin/customer_label_scd.sql)

2022-08-04 08:44:42 normalization > 08:44:39.975379 [error] [MainThread]: Code: 241.
2022-08-04 08:44:42 normalization > 08:44:39.975529 [error] [MainThread]: DB::Exception: Memory limit (for query) exceeded: would use 13.04 GiB (attempt to allocate chunk of 4278176 bytes), maximum: 13.04 GiB: while executing 'FUNCTION JSONExtractRaw(assumeNotNull(_airbyte_data) : 0, 'etthKdDgAAFvs008pXrKi3LOSe7i_Wsw' :: 127) -> JSONExtractRaw(assumeNotNull(_airbyte_data), 'etthKdDgAAFvs008pXrKi3LOSe7i_Wsw') String : 126'. Stack trace:
2022-08-04 08:44:42 normalization > 08:44:39.975722 [error] [MainThread]:
 
已经调过。max_memory_usage=14G,好像不管用。
 

 

 

 

  

posted @ 2022-08-03 16:57  风云快客  阅读(796)  评论(0编辑  收藏  举报