技术内幕|使用 Debezium 和 RisingWave 对 MongoDB 进行持续分析

1. MongoDB 和流式 Join 的挑战

作为一种操作型数据库,MongoDB 在提供快速数据操作和查询性能方面表现十分出色。然而,在维护实时视图或执行流处理任务的内置支持方面,它确实存在一些局限性。例如,MongoDB 不支持连接两个集合并实时刷新结果(尤其是高频率按秒刷新)。

在 MongoDB 中,Join 使用的是 $lookup 聚合算子,而非传统的 SQL 式 Join:

php 复制代码
db.users.aggregate([{
  $lookup: {
    from: "products",
    localField: "product_id",
    foreignField: "_id",
    as: "products"
  }
}])

当前的方法虽然有效,但在连接两个以上的集合时会比较繁琐和不便。

MongoDB 提倡去规范化,如果有最佳的 Schema,很多情况下就可以避免使用 Join。但是,实际情况可能会比较混乱,因此有时需要使用 Join。与其依赖复杂的 MongoDB 聚合,不如将此任务委托给 RisingWave 这样的专用流处理系统。

2. RisingWave 解决方案

一个实用的解决方案是通过 Kafka 将 MongoDB 变更流导入到 RisingWave,从而实现灵活的实时连接。

RisingWave 可充当实时数据源的中心枢纽。来自 MongoDB 和 Kafka 的数据可以导入到 RisingWave 并进行连接。RisingWave 的状态后端 Hummock 利用云对象存储,提供了弹性和充足的容量。这能够支持在多个 Source 上执行大型 Join,处理 10 个以上的多路 Join。

在这个数据栈中,Debezium 起着至关重要的作用。它提取 MongoDB oplog 条目并将其导出到 Kafka Topic,然后由 RisingWave 消费。例如:

ini 复制代码
CREATE TABLE source_name (
   _id jsonb PRIMARY KEY,
   payload jsonb
)
WITH (
   connector='kafka',
   topic='debezium_mongo_json_customers',
   properties.bootstrap.server='172.10.1.1:9090,172.10.1.2:9090',
   scan.startup.mode = 'earliest'
) FORMAT DEBEZIUM_MONGO ENCODE JSON;

创建了 MongoDB Source 之后,我们就可以创建物化视图,实时连接来自 MongoDB 和其他 Source 的数据。

有关此过程的详细步骤,请参阅 RisingWave 文档

3. 处理 MongoDB 的 JSON 数据

RisingWave 可以利用从 PostgreSQL 继承的 JSONB 支持,分析 MongoDB 中的 JSON(BSON)数据。这样,即使在非关系型的 Schema 中也能直接进行摄取和查询。虽然 MongoDB 的原生 API 在数据操作方面表现十分出色,在 Node.js 网络应用程序中尤其如此,但进行分析性工作负载需要不同的专长。SQL 仍是最流行的数据分析语言。目前,RisingWave 提供了超过 30 个 JSON 函数,包括对 JSONPath 的支持。这使得用户在转换 MongoDB 数据时无需编写 UDF。

以下是在 RisingWave 中处理 JSONB 数据的一些示例:

查找年龄在 25 至 30 岁之间的用户:

sql 复制代码
SELECT *
FROM users
WHERE (payload->>'age')::int BETWEEN 25 AND 30;

通过姓名和电子邮件查找用户:

sql 复制代码
SELECT *
FROM users
WHERE payload @> '{"name": "Bob"}'
AND payload->>'email' LIKE 'bob@example.com';

4. 结论

RisingWave 能够很好地解析由 Debezium 提取的 MongoDB 变更流。它的云原生存储使其可连接多个 MongoDB 集合,并创建可被其他服务使用的统一流。同时,RisingWave 支持 JSONB,可轻松处理 MongoDB 文档,为实时数据处理挑战提供了强大的解决方案。

关于 RisingWave

RisingWave 是一款分布式 SQL 流处理数据库,旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统,RisingWave 为用户提供了与 PostgreSQL 类似的使用体验,并且具备比 Flink 高出 10 倍的性能以及更低的成本。

🔧如果你还不知道如何上手 RisingWave,请体验中文入门教程:www.risingwavetutorial.com/

💻想要更深入地理解并使用 RisingWave,请阅读中文用户文档:zh-cn.risingwave.com/docs

相关推荐
四七伵8 分钟前
Spring Boot项目中varchar字段为什么不用NULL?告别空指针从建表开始
数据库·后端
Mr.456711 分钟前
JDK17+Druid+SpringBoot3+ShardingSphere5 多表分库分表完整实践(MySQL+PostgreSQL)
java·数据库·spring boot·mysql·postgresql
Elastic 中国社区官方博客16 分钟前
使用 ES|QL 变量控件将仪表板转变为调查工具
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
feng68_19 分钟前
Ansible还原数据库节点
linux·运维·数据库·ansible
乐hh23 分钟前
清理MySQL数据
数据库·mysql
EasyCVR26 分钟前
国标GB28181/RTSP/ONVIF/RTMP视频监控平台EasyCVR视频质量诊断花屏/蓝屏/画面模糊/冻结检测
网络·数据库·音视频
C^h29 分钟前
RTthread中的内存池理解
linux·数据库·c++·算法·嵌入式
fobwebs31 分钟前
wordpress 网站安装了Yoast SEO,并且做了内容的优化后,如果想重置Yoast SEO,并且删除所有的优化内容,应该如何操作?
数据库·yoast seo·重置yoast seo·清空yoast seo内容
路由侠内网穿透1 小时前
本地部署开源 LLM 应用观测与调试平台 Langfuse 并实现外部访问
运维·服务器·数据库·物联网·开源
SPC的存折1 小时前
1、Ansible之Ansible安装与入门
linux·数据库·ansible