分表原则:按照数据行的切分。就是将表中的某些有关联的字段分到一个数据库,而另外的某些字段又切分到其他数据库中。原理图如下:
主表
一、配置文件
vim /usr/local/mycal/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<table name="customer" dataNode="dn2"></table>
<table name="orders" dataNode="dn1,dn2" rule="mod_rule"></table>
</schema>
<dataNode name="dn1" dataHost="host1" database="orders" />
<dataNode name="dn2" dataHost="host2" database="orders" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.157.133:3306" user="root"
password="root">
</writeHost>
</dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.157.139:3306" user="root"
password="root">
</writeHost>
</dataHost>
</mycat:schema>
在rule配置文件里新增分片规则mod_rule,并指定customer_id。选择的分片算法是mod_long(对字段求模运算),customer_id对两个节点求模,根据结果分片。
vim /usr/local/mycal/conf/rule.xml
<tableRule name="mod_rule">
<rule>
<columns>customer_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
二、在数据节点dn2上建立orders表
三、重启mycat,让配置生效
mycat console
四、访问mycat实现分片
INSERT INTO orders(id,order_type,customer_id,amount) VALUES (1,101,100,100100);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(2,101,100,100300);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(3,101,101,120000);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(4,101,101,103000);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(5,102,101,100400);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(6,102,100,100020);
注:在mycat里向orders表插入数据时,insert字段不能省略
在mycat里查看是否分表成功
到此分表已经完成了,下面我们来介绍一下订单表【orders】如何与订单详情表【orders_detail】进行join查询。
注:子表的存储位置将依赖于主表,根据这一思路提出了E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。
ER表【子关联表】
一、配置orders的关系表
vim /usr/local/mycal/conf/schema.xml
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<table name="customer" dataNode="dn2"></table>
<table name="orders" dataNode="dn1,dn2" rule="mod_rule">
<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id"/>
</table>
</schema>
二、在数据节点dn2上建立orders_detail表
三、重启mycat,让配置生效
mycat console
四、访问mycat实现分片
INSERT INTO orders_detail(id,detail,order_id) values(1,'detail1',1);
INSERT INTO orders_detail(id,detail,order_id) VALUES(2,'detail1',2);
INSERT INTO orders_detail(id,detail,order_id) VALUES(3,'detail1',3);
INSERT INTO orders_detail(id,detail,order_id) VALUES(4,'detail1',4);
INSERT INTO orders_detail(id,detail,order_id) VALUES(5,'detail1',5);
INSERT INTO orders_detail(id,detail,order_id) VALUES(6,'detail1',6);
五、mycat里验证关联
Select o.*,od.detail from orders o inner join orders_detail od on o.id=od.order_id order by o.id;
到此了关联表就配置完成了,但是因为有的表两个数据分片都需要用到,而且数据量比较小,所以就有了全局表的引入。
全局表
特点如下:
1、全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
2、全局表的查询操作,只从一个节点获取
3、全局表可以跟任何一个表进行 JOIN 操作
一、配置全局表【dict_order_type】
vim /usr/local/mycal/conf/schema.xml
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<table name="customer" dataNode="dn2"></table>
<table name="orders" dataNode="dn1,dn2" rule="mod_rule">
<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id"/>
</table>
<table name="dict_order_type" dataNode="dn1,dn2" type="global"></table>
</schema>
二、在数据节点dn2上建立dict_order_type表
三、重启mycat,让配置生效
mycat console
四、访问mycat实现分片
INSERT INTO dict_order_type(id,order_type) VALUES(101,'type1');
INSERT INTO dict_order_type(id,order_type) VALUES(102,'type2');
五、mycat里验证
一、创新点1、anchor free,对每个feature map 上的每个像素点进行预测2、FPN 多尺度预测,预测不同尺度的目标框3、引入Center-ness 层,减少误检框二、网络输出1、分类分支特征图上的每个点(x,y) 通过下面的公式映射到input image上的接近中心的位置2、Center-ness 分支主要目的是为了减少误检框发现问题:部分误检框离真实框的中心点距离较大解决方法:将分类支路的输出乘以一个权重图得到最终的分类置信度,而这.
===用data,这种是通用的===function queryHealthCount(){ $.ajax({ url:'${ctx}/flex!flexHealth.json', async:false, type:'POST', dataType : 'json', success:function(data){ healthCou
不过重点在于如何让这个程序真正可以跑起来显示出来结果,着实费了一番功夫。 1 #include 2 #include "client/dbclient.h" 3 4 using namespace mongo; 5 using namespace std; 6 void run() { 7 DBClientConnection c; 8 c.conne
Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组1、数据准备:public Product(Long id, Integer num, BigDecimal price, String name, String category) { this.id = id; this.num = num; this.price = price; this.name = name; this.category = category;}...
虽然古人云“七月流火”,但是入秋后的北京,依旧让人感觉闷热不已。如果这时候能够驾着爱车一路沿海飞驰,听风吟唱,那该有多么惬意!这样令人遐想的场景,还真的就梦想成真了。8月...
异常机制概述:什么是异常,java提供异常处理机制有什么用int a = 10;int b = 0;// 实际上JVM在执行到此处的时候,会new异常对象:new ArithmeticException("/ by zero");// 并且JVM将new的异常对象抛出,打印输出信息到控制台了。int c = a / b;System.out.println(a + "/" + b + "=" + c);// 此处运行也会创建一个:ArithmeticException类型的异常对象。
方法一 ( 同一环境 )可以通过修改端口号来实现拷贝配置(原端口号8070),并修改其端口号8060启动以后,在nacos控制台查看实例实例详情,注册了两个实例,端口号分别为8070,8060方法二 ( 不同环境 )可以通过修改端口号\指定环境来实现在上面修改端口号的基础上,配置指定环境启动发现8070请求的是local环境配置,8060请求的是alpha环境配置8070启动日志截图8060启动日志截图...
全文共2971字,预计学习时长8分钟图源:unsplash最近几周,谷歌反复发送提醒,说笔者的谷歌硬盘容量已经接近极限。从前,笔者很少想到到谷歌会限制存储容量,该公司在数据收集方面的潜...
背景很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubuntu20.04)中支持systemd,也就可以使用systemctl命令来启停进程。相关知识能够支持使用systemctl命令,提供完整 systemd 的项目有很多:diddledani/...
i上厕所;i洗脸;…i做早餐;i终于出门了…i上公车…}getUpAndGotoWork();如果是老手,做法就是function getup(i){…}function fuckWC(i){…}function fuckTheJob(i){…}function Todo_Morning(){let i = 我;getup(i);//起床fuckWC(i);//上厕所fuckTheJob(i);//去上班}Todo_Morning();这一手漂亮的代码,是之
解决HBase版本高低差异造成表查询失败问题如果出现这样的报错就是你HBASE的jar包与你的HBase的版本不一致我的hbse是1.2.1的版本,我用idea对hbase操作时用的包是2.1.2的org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family tabl
http://hi.baidu.com/fgfd0/blog/item/a9ccaa1e76d85a0e41341700.htmlandroid.intent.category.LAUNCHER 具体有什么作用?我在xml里面加和不加 感觉没什么区别啊。谁能解释下!