Hoyi 与数据库分区的读写 (hoyi入门系列文章五)

                                    Hoyi 与数据库分区的读写    (hoyi入门系列文章五)
1.分区的配置
hoyi支持数据库的分区,举例子,我们以orders表为例子,当orders表订单越来越多 。我们需要将orders配置
1.1需要配置redis 进行中间的调度。

1.2在config 文件夹下建立 文件夹 jdbc-dist-orders,表示数据库以orders进行分区。同时增加jdbc-c1.properties,jdbc-c2.properties。如果有多个区则需要配置多个jdbc-cX.properties。

每个jdbc-cX.properties的文件的配置方式和jdbc.properties的配置一样,每个区也可以配置成单机或者集群方式。

2.集成分库前置工作

在hoyi er tool里新建orders实体。如图所示,注意uxid是为了分区使用,该字段的值为"分区-uuid",例如:c1-xxxx。


按照前面教程,使用hoyi er tool 生成sql语句并在两个不同的数据库里导入。 并生成对应实体orders.java。

3.分库的测试

在项目WebRoot下新建/demo4/controller/ClusterDemo.java,拷贝orders.java到/demo4/entity。

增加调度方法,作用是为了设置中间调度器的参数并把这些缓存到redis里。disctrictType.BALANCE_LOAD 的方式是该表数据数据最少就插入哪台。
public void LOADDEF() {
int ret = DistrictCtrls.Load_DEF_ENTS("orders", orders.class, disctrictType.BALANCE_LOAD);
this.HandlerEx("load success!~", ret);

}

//增加订单
public void addOrder(){
IDatabase database = DistrictCtrls.get_Insert_DB("orders", orders.class);
orders _order = new orders(database.Get_Clust_UUID(), "1", "now", "note");
int result = _order.Insert(database);
this.HandlerEx("添加订单", result);

}

IDatabase database = DistrictCtrls.get_Insert_DB("orders", orders.class); 该方法会根据策略找到对应的写数据库。

先请求 http://localhost:8085/hoyidemo/demo4/controller/ClusterDemo.html?behavior=LOADDEF ,初始化调度器,

再调用http://localhost:8085/hoyidemo/demo4/controller/ClusterDemo.html?behavior=addOrder

可以看到数据库增加了一条订单,并且会根据订单的数据库的条数动态去插入不同数据库,做到均衡插入。

我们再增加一个查询订单的方法

//查找订单
public void findOrder(){
String uxid = this.getParams("uxid");
String cluster_key = DistrictCtrls.GetClustKey(uxid);
IDatabase databs = DataBaseCluster.Get_READ_SERVER("orders", cluster_key);
orders _orders = orders.E().Where(orders.uxid.Equals(uxid)).First(databs);
this.WriteUTF8JSONDATAMSG(1, "success", _orders);
}

访问接口可以看到该订单被查询出来。

http://localhost:8085/hoyidemo/demo4/controller/ClusterDemo.html?behavior=findOrder&uxid=c2_4a6cf0c3-533c-4be4-b8d5-7c62329219e9

IDatabase databs = DataBaseCluster.Get_READ_SERVER("orders", cluster_key);

注意这个方法里的参数是根据配置文件jdbc-dist-orders 以及 jdbc-c1.properties的  orders 以及 c1 找到对应的数据库。

数据库的跨库尽量不做事务,联合查询则需要根据具体的业务逻辑进行接口拆分。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值