多源数据同步和中间件方式

举报
码乐 发表于 2025/03/12 20:11:47 2025/03/12
52 0 0
【摘要】 1 简介如果您打算在应用程序中保留数据以供将来检索,那么将后端应用程序连接到数据库是必要的步骤。有不同类型的数据库,每种数据库都有不同的权衡或优缺点,更像是,不同类型的数据库具有更出色的用例,而其他选项可能更好或更高效。最终,由开发人员选择在您的特定用例中使用什么数据库。而常见的数据库可以分为两大类,RDMS:通常称为关系数据库管理系统 (RDMS)。他们将数据存储在具有预定义架构的表中,...

1 简介

如果您打算在应用程序中保留数据以供将来检索,那么将后端应用程序连接到数据库是必要的步骤。

有不同类型的数据库,每种数据库都有不同的权衡或优缺点,更像是,不同类型的数据库具有更出色的用例,而其他选项可能更好或更高效。最终,由开发人员选择在您的特定用例中使用什么数据库。

而常见的数据库可以分为两大类,

RDMS:

通常称为关系数据库管理系统 (RDMS)。他们将数据存储在具有预定义架构的表中,并使用 SQL(结构化查询语言)来定义和作数据。

示例:MySQL、PostgreSQL、Oracle Database、Microsoft SQL Server 等。

NOSQL:

NoSQL 数据库是不需要 SQL 来定义和作数据的数据库。它们旨在实现灵活性、可扩展性和性能。它们不需要固定的架构,并且可以很好地处理大量数据和高用户负载。

示例:文档存储(如 MongoDB)和键值存储(如 Redis 和 DynamoDB)

2 数据同步或中间件方式

使用数据同步工具或中间件,集成多个数据库的读写操作,实现异构数据库的联合使用。

实现方式

实时同步:通过工具将数据在不同数据库之间同步。
如使用 Debezium 或 Canal 将 MySQL 数据实时同步到 MongoDB 或 Redis。
中间件方式:通过统一的中间件屏蔽底层数据库差异,例如使用 GraphQL 或 REST API 提供数据访问服务。

  • 优点

简化了开发:减少了对每种数据库驱动的直接操作。
数据同步方便:适合需要频繁在数据库间共享数据的场景。
可扩展性强:增加新数据库时,只需扩展同步规则或中间件。

  • 缺点

配置复杂:数据同步工具或中间件的配置需要一定技术成本。
延迟问题:同步方式可能引入一定的延迟。
可能增加资源占用:数据冗余和中间件处理可能增加系统资源消耗。

2 数据虚拟化(Data Virtualization)

通过数据虚拟化技术,将多个异构数据库整合成一个统一的逻辑数据视图,应用程序直接对虚拟化的接口进行操作。

实现方式

使用数据虚拟化平台,如 Denodo、PrestoDB。
定义统一的逻辑视图,隐藏具体数据库的实现细节。
查询操作通过虚拟化平台分发到相应的数据库。

优点

数据库无缝集成:应用程序只需访问逻辑视图,不需要关心底层实现。
数据查询优化:虚拟化工具可以对跨数据库的查询进行优化。

缺点

依赖第三方工具:需要引入额外的工具和平台。
性能可能受限:查询效率依赖于虚拟化平台的优化能力。

对比 ORM 和 SQL 查询生成工具

特性		直接数据库驱动					ORM	 					查询SQL生成工具 
开发效率	低(手动处理)		高(自动化映射和简化操作)	中高(减少手写 SQL,但灵活性高)
灵活性		高(完全控制)		低(受限于 ORM 设计)			高(接近手写 SQL 的自由度)
性能		高(无额外开销)	中(ORM 有性能损耗)			高(接近直接驱动的性能)
维护成本	高(需要人工管理逻辑)	低(统一对象操作)		中(生成逻辑稍复杂)
适配复杂查询	高(直接编写 SQL)	低(ORM 对复杂查询支持较差)	高(链式调用生成复杂 SQL)
一致性维护	低(开发者人工处理事务)	中(部分ORM事务封装)	高(生成工具可辅助事务管理)

3 场景示例

		MongoDB、MySQL、Redis 数据集成场景 
		MongoDB:存储用户的文档数据(如用户个人资料)。
		MySQL:存储关系型数据(如用户订单和交易)。
		Redis:作为缓存层,加速读取频繁访问的数据。

CRUD 实现统一接口设计

			type DataService interface {
			    CreateUser(ctx context.Context, user User) error
			    GetUser(ctx context.Context, userID string) (*User, error)
			    CreateOrder(ctx context.Context, order Order) error
			    GetOrder(ctx context.Context, orderID string) (*Order, error)
			    CacheUser(ctx context.Context, userID string, user User) error
			    GetCachedUser(ctx context.Context, userID string) (*User, error)
			}

不同数据库适配器实现

MongoDBAdapter:实现用户文档存储。
MySQLAdapter:实现订单的关系型存储。
RedisAdapter:实现用户缓存。

优点
数据访问层屏蔽了异构数据库差异。
业务逻辑统一调用接口,简化了开发和维护。

一致性维护

使用分布式事务(如两阶段提交)保证一致性。
或通过最终一致性策略,异步更新 Redis 缓存。

4 总结

直接数据库驱动:适合性能敏感和特性利用要求高的场景。
ORM:适合快速开发和 CRUD 占主导的业务场景。
SQL 查询生成工具:适合复杂查询且需要较高灵活性的场景。
数据虚拟化/中间件:适合大规模数据集成的异构系统。

根据业务需求和技术选型,合理结合多种方式实现异构数据库的 CRUD 操作,是系统设计的关键。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。