本文手把手教你,使用 ORM 面向对象的方式,进行 Mongodb Sharding 分片查询。
1、在 bee.properties 里添加配置。
bee.db.dbName=MongoDB
bee.dosql.multiDS.enable=true
bee.dosql.multiDS.differentDbType=false
bee.dosql.multiDS.sharding=true
bee.dosql.multiDS.defalutDS=ds0
2、分片配置:
以下为对 Orders 实体分片的配置,简单易用。
表示有两个分片 ds0,ds1; 基本表名是:orders, ds0 中有 orders0,orders1,orders2; ds1 中有 orders3,orders4,orders5;
Bee 会解析得到 orders 所有表的分布情况。fullNodes: {orders={ds0=[0, 1, 2], ds1=[3, 4, 5]}}
publicclassShardingDoConfig {
publicstaticvoidinit() {
ShardingConfig.addShardingBean(Orders.class,newShardingBean("ds[0..1].orders[0..5]", "userid"));
}
}
3、分片数据源设置
package org.teasoft.exam.bee.mongodb.sharding;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.teasoft.beex.mongodb.ds.MongodbSimpleDataSource;
import org.teasoft.honey.osql.core.BeeFactory;
publicclassInitDsAndMongoDsUtil {
publicstaticvoidinitDS() {
try {
MongodbSimpleDataSource dataSource0=newMongodbSimpleDataSource("mongodb://localhost:27017/ds0","","");//没有设置用户名和密码,仅用于测试
MongodbSimpleDataSource dataSource1=newMongodbSimpleDataSource("mongodb://localhost:28018/ds1","","");
Map<String, DataSource> dataSourceMap = newLinkedHashMap<>();
dataSourceMap.put("ds0", dataSource0);
dataSourceMap.put("ds1", dataSource1);
BeeFactory.getInstance().setDataSourceMap(dataSourceMap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、查询(分页查询)
userid 为分片键,需要设置。在 main 方法,调用以下方法即可。
publicstaticvoidtest() {
Suid suid=BF.getSuid();
Orders orders1=newOrders();
Condition condition=BF.getCondition();
condition
.lParentheses()
.op(Orders_F.userid, Op.eq, 1) //userid为分片键
.or()
.op(Orders_F.userid, Op.eq, 3)
.or()
.op(Orders_F.userid, Op.eq, 2)
.rParentheses()
;
condition
.start(0) //从首页开始
.size(2);
//条件全在condition
List<Orders> list=suid.select(orders1,condition);
Printer.printList(list);
}
5、生成的日志
说明:根据条件,会查询到三条数据(分别在三个不同的分片),然后一页只返回 2 条记录。


本文详细介绍了如何使用ORM以面向对象的方式进行MongoDB的分片查询。首先,在bee.properties中配置数据库信息,启用多数据源和分片。接着,展示了对Orders实体的分片配置,定义了数据在ds0和ds1两个分片的分布。然后,设置了分片数据源,连接到MongoDB的不同实例。最后,演示了一个分页查询的例子,根据分片键进行查询并返回结果。
787

被折叠的 条评论
为什么被折叠?



