gpt4 book ai didi

java - 用于与不同类型的数据库交互的数据层设计

转载 作者:行者123 更新时间:2023-12-03 18:19:10 25 4
gpt4 key购买 nike

问题:我们的模块之一是与 3 种不同的 redis [不同的 redis 将具有不同的 redis-KEYS]、mongo DB 和 mySQL 进行交互。我们应该如何设计数据层,以便将来如果我们改变数据库,我们不需要改变业务层。

设计思路:

每种数据库将有 3 个不同的接口(interface)。对于redis,bussiness 层会告诉哪个redis 去寻找key。但问题是,如果我们更换 Redis 机器,则需要更改业务层。

有没有标准的方法来处理这种情况?任何帮助将不胜感激。

最佳答案

我认为针对特定键使用哪个redis的逻辑与数据访问层有关而不是业务层,因此业务层只告诉DAO层检索键,DAO层将决定必须使用哪个redis实例用过。

更新:

这似乎是一种分片情况:看看 hibernate 分片(我的意思是 hibernate 用来产生更好想法的模式)(http://www.ibm.com/developerworks/library/j-javadev2-11/)

总而言之,您可以使用某种"ShardSelectionStrategy"(定义此类接口(interface)),它具有返回ShardId 的"selectShardIdForNewObject(Object obj)" 基于输入对象参数。

所以每次你想在数据库中插入一个新对象时,你必须将一个 ShardSelectionStrategy 对象传递给你的 DAO 类,该类具有为对象选择正确分片的知识,上面文章中的示例是:

if (obj instanceof Race) {
Race rce = (Race) obj;
return this.determineShardId(rce.getDistance());
} else if (obj instanceof Runner) {
//Do Something
}

因此该策略根据比赛距离确定分片 ID。

Hibernate 在通过其键搜索对象时也使用“ShardResolutionStrategy”,并在每次需要查询数据库时将其传递给 DAO 层的查询方法。

希望这些信息对您有所帮助。

关于java - 用于与不同类型的数据库交互的数据层设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com