Skip to content

Commit

Permalink
1.0.8.1
Browse files Browse the repository at this point in the history
  • Loading branch information
brucexx committed Aug 2, 2018
1 parent 3e162d5 commit bafbf56
Show file tree
Hide file tree
Showing 55 changed files with 2,128 additions and 1,450 deletions.
57 changes: 57 additions & 0 deletions README.md
Expand Up @@ -40,3 +40,60 @@ Heisenberg服务器通过管理命令可以查看,如连接数,线程池,
1.修复killChannel的问题
2.修复读取数据递归问题

1.0.8.1 2018.8.2
1.使用expression完美支持分片替换问题
2.支持insert批量以及select in的分片替换,以及支持嵌套问题
mysql> explain insert into `test` (id,name) values (1,'brucexx'),('2','brucexx');
No connection. Trying to reconnect...
Connection id: 1
Current database: *** NONE ***

+------------+----------------------------------------------------------+
| DATA_NODE | SQL |
+------------+----------------------------------------------------------+
| local_node | INSERT INTO `test_01` (id, name) VALUES (1, 'brucexx') |
| local_node | INSERT INTO `test_02` (id, name) VALUES ('2', 'brucexx') |
+------------+----------------------------------------------------------+
2 rows in set (0.31 sec)
mysql> explain select * from test where id in ('1',2,3,4,5,6);
+------------+----------------------------------------------+
| DATA_NODE | SQL |
+------------+----------------------------------------------+
| local_node | SELECT * FROM `test_00` WHERE id IN (4) |
| local_node | SELECT * FROM `test_01` WHERE id IN ('1', 5) |
| local_node | SELECT * FROM `test_02` WHERE id IN (2, 6) |
| local_node | SELECT * FROM `test_03` WHERE id IN (3) |
+------------+----------------------------------------------+
4 rows in set (0.08 sec)


mysql> explain select * from (select * from test union select * from test where id =1) as t where t.id in ('1',2,3,4,5,6);
+------------+--------------------------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+------------+--------------------------------------------------------------------------------------------------------------------+
| local_node | SELECT * FROM ((SELECT * FROM `test_00`) UNION (SELECT * FROM `test_00` WHERE id = 1)) AS T WHERE t.id IN (4) |
| local_node | SELECT * FROM ((SELECT * FROM `test_01`) UNION (SELECT * FROM `test_01` WHERE id = 1)) AS T WHERE t.id IN ('1', 5) |
| local_node | SELECT * FROM ((SELECT * FROM `test_02`) UNION (SELECT * FROM `test_02` WHERE id = 1)) AS T WHERE t.id IN (2, 6) |
| local_node | SELECT * FROM ((SELECT * FROM `test_03`) UNION (SELECT * FROM `test_03` WHERE id = 1)) AS T WHERE t.id IN (3) |
+------------+--------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.02 sec)

mysql> explain select t.name from (select * from test ) as t left join test on t.id=test.id where t.id in ('1',2,3,4,5,6);
+------------+----------------------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+------------+----------------------------------------------------------------------------------------------------------------+
| local_node | SELECT t.name FROM (SELECT * FROM `test_00`) AS T LEFT JOIN `test_00` ON t.id = test.id WHERE t.id IN (4) |
| local_node | SELECT t.name FROM (SELECT * FROM `test_01`) AS T LEFT JOIN `test_01` ON t.id = test.id WHERE t.id IN ('1', 5) |
| local_node | SELECT t.name FROM (SELECT * FROM `test_02`) AS T LEFT JOIN `test_02` ON t.id = test.id WHERE t.id IN (2, 6) |
| local_node | SELECT t.name FROM (SELECT * FROM `test_03`) AS T LEFT JOIN `test_03` ON t.id = test.id WHERE t.id IN (3) |
+------------+----------------------------------------------------------------------------------------------------------------+
4 rows in set (0.01 sec)

mysql> explain select t.name from (select * from test ) as t left join test on t.id = test.id where t.id =1 ;
+------------+--------------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+------------+--------------------------------------------------------------------------------------------------------+
| local_node | SELECT t.name FROM (SELECT * FROM `test_01`) AS T LEFT JOIN `test_01` ON t.id = test.id WHERE t.id = 1 |
+------------+--------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

126 changes: 39 additions & 87 deletions assembly/conf/rule.xml
@@ -1,111 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>

<rule>

<tableRule name="purRule" forceHit="true">
<columns>SETTLE_ORDER</columns>
<tableRule name="rule1" forceHit="true" unless="SELECT,INSERT,UPDATE,DELETE,CALL">
<columns>INQUIRY_ID</columns>
<dbRuleList>
<dbRule><![CDATA[
#set($dbfix="0")##
#if($stringUtil.isNumeric($stringUtil.substring($SETTLE_ORDER,-2)))
#set($dbfix=$stringUtil.substring($SETTLE_ORDER,-2,-1))##
#end
$!dbfix]]>
#set($sub_str="0")
#!substr
]]>
</dbRule>
</dbRuleList>
<tbRuleList>
<tbRule><![CDATA[
#set($subfix="_00")##
#if($stringUtil.isNumeric($stringUtil.substring($SETTLE_ORDER,-2)))
#set($subfix="_"+$stringUtil.substring($SETTLE_ORDER,-2))##
#end
$!subfix]]>
#set($sub_str=$INQUIRY_ID%4+"")
#set($prefix="_0"+$sub_str)
$!prefix
]]>
</tbRule>
</tbRuleList>
<!-- 00-99 100个表,每个表属于哪个结点 Map<Integer,Set<String>> -->
<tbPrefix>
<![CDATA[
def map = [:];
for (int i=0; i<10; i++) {
def list = [];
for (int j=0; j<10; j++) {
list.add("_"+i+""+j);
}
map.put(i,list);
};
return map;
]]>
<![CDATA[
def map = [:];
def list = [];
for(int j=0; j<2; j++) {
list.add("_0"+j);
}
map.put(0,list);
return map;
]]>
</tbPrefix>
</tableRule>
<tableRule name="refundRule" forceHit="true">
<columns>REFUND_ORDER</columns>
<tableRule name="rule2" forceHit="true" unless="SELECT,INSERT,UPDATE,DELETE,CALL">
<columns>ID</columns>
<dbRuleList>
<dbRule><![CDATA[
#set($dbfix="0")##
#if($stringUtil.isNumeric($stringUtil.substring($REFUND_ORDER,-2)))
#set($dbfix=$stringUtil.substring($REFUND_ORDER,-2,-1))##
#end
$!dbfix]]>
#set($sub_str="0")
#!substr
]]>
</dbRule>
</dbRuleList>
<tbRuleList>
<tbRule><![CDATA[
#set($subfix="_00")##
#if($stringUtil.isNumeric($stringUtil.substring($REFUND_ORDER,-2)))
#set($subfix="_"+$stringUtil.substring($REFUND_ORDER,-2))##
#end
$!subfix]]>
#set($mId=$ID+"")
#set($sub_str=$!numberUtil.toInt($mId)%4+"")
#set($prefix="_0"+$sub_str)
$!prefix
]]>
</tbRule>
</tbRuleList>
<!-- 00-99 100个表,每个表属于哪个结点 Map<Integer,Set<String>> -->
<tbPrefix>
<![CDATA[
def map = [:];
for (int i=0; i<10; i++) {
def list = [];
for (int j=0; j<10; j++) {
list.add("_"+i+""+j);
}
map.put(i,list);
};
return map;
]]>
<![CDATA[
def map = [:];
def list = [];
for(int j=0; j<4; j++) {
list.add("_0"+j);
}
map.put(0,list);
return map;
]]>
</tbPrefix>
</tableRule>
<tableRule name="userRule" forceHit="true">
<columns>USER_ID</columns>
<dbRuleList>
<dbRule><![CDATA[
#set($dbfix="0")##
#if($stringUtil.isNumeric($stringUtil.substring($USER_ID,-2)))
#set($dbfix=$stringUtil.substring($USER_ID,-2,-1))##
#end
$!dbfix]]>
</dbRule>
</dbRuleList>
<tbRuleList>
<tbRule><![CDATA[
#set($subfix="_00")##
#if($stringUtil.isNumeric($stringUtil.substring($USER_ID,-2)))
#set($subfix="_"+$stringUtil.substring($USER_ID,-2))##
#end
$!subfix]]>
</tbRule>
</tbRuleList>
<!-- 00-99 100个表,每个表属于哪个结点 Map<Integer,Set<String>> -->
<tbPrefix>
<![CDATA[
def map = [:];
for (int i=0; i<10; i++) {
def list = [];
for (int j=0; j<10; j++) {
list.add("_"+i+""+j);
}
map.put(i,list);
};
return map;
]]>
</tbPrefix>
</tableRule>

</rule>

</rule>
26 changes: 15 additions & 11 deletions assembly/conf/schema.xml
@@ -1,24 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>

<heisenberg:schema xmlns:heisenberg="https://github.com/brucexx/heisenberg">
<schema name="bank_data_master_shard">
<table name="user_pay_online" dataNode="bankDataMasterDN$0-9" rule="userRule" />
<table name="refund_online" dataNode="bankDataMasterDN$0-9" rule="refundRule" />
<table name="purchase_online" dataNode="bankDataMasterDN$0-9" rule="purRule" />
<schema name="test" dataNode="local_node">
<table name="test" dataNode="local_node" shardName="t" rule="rule2"/>
</schema>
<dataNode name="bankDataMasterDN">


<dataNode name="local_node">
<property name="dataSource">
<dataSourceRef>bankDataMasterDN$0-9</dataSourceRef>
<dataSourceRef>localDB</dataSourceRef>
<!-- slave,暂无 -->
<!-- dataSourceRef>ds_shard_slave$0-3</dataSourceRef -->
</property>
<property name="poolSize">20</property>
<property name="poolSize">5</property>
<property name="coreSize">5</property>
<property name="heartbeatSQL">select user()</property>
</dataNode>
<dataSource name="bankDataMasterDN" type="mysql">


<dataSource name="localDB" type="mysql">
<property name="location">
<location>localhost:3306/bank_data_db_$0-9</location>
<location>127.0.0.1:3306/test</location>
</property>
<property name="user">root</property>
<property name="password"></property>
</dataSource>

</heisenberg:schema>
</heisenberg:schema>
25 changes: 13 additions & 12 deletions assembly/conf/server.xml
Expand Up @@ -4,26 +4,27 @@

<!-- 系统参数定义,服务端口、管理端口,处理器个数、线程池等。 -->
<system>
<!-- 设置mysqlServer连接NIO -->
<property name="isBackNIO">false</property>
<property name="serverPort">8176</property>
<property name="managerPort">8177</property>
<property name="serverPort">8045</property>
<property name="managerPort">4321</property>
<property name="initExecutor">16</property>
<property name="timerExecutor">4</property>
<property name="managerExecutor">4</property>
<property name="processors">16</property>
<property name="processorHandler">32</property>
<property name="processorExecutor">32</property>
<property name="processors">8</property>
<property name="processorHandler">16</property>
<property name="processorExecutor">16</property>
<property name="clusterHeartbeatUser">_HEARTBEAT_USER_</property>
<property name="clusterHeartbeatPass">_HEARTBEAT_PASS_</property>
<property name="dataNodeHeartbeatPeriod">15000</property>
<property name="isBackNIO">false</property>
<property name="dataNodeHeartbeatPeriod">300000</property>
</system>

<!-- 用户访问定义,用户名、密码、schema等信息。 -->
<user name="root">
<property name="password">st0078</property>
<property name="schemas">bank_data_master_shard</property>
<!-- <user name="hsb">
<property name="password">hsb</property>
<property name="schemas">price_prod</property>
</user> -->
<user name="test">
<property name="password">test</property>
<property name="schemas">test</property>
</user>

</heisenberg:server>
6 changes: 3 additions & 3 deletions build.sh
Expand Up @@ -7,10 +7,10 @@ mkdir output
mvn clean package -Dmaven.test.skip=true

cd target
unzip -o heisenberg-server-1.0.7.zip
cd heisenberg-server-1.0.7
unzip -o heisenberg-server.zip
cd heisenberg-server
tar czf heisenberg-server.tgz *
cd ../../

cp target/heisenberg-server-1.0.7/heisenberg-server.tgz output/
mv target/heisenberg-server/heisenberg-server.tgz output/heisenberg-server-1.0.8.1.tgz
rm -rf ./target
14 changes: 10 additions & 4 deletions pom.xml
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.baidu.heisenberg</groupId>
<artifactId>heisenberg-server</artifactId>
<version>1.0.7</version>
<version>1.0.8.1</version>
<packaging>jar</packaging>
<name>${artifactId}</name>
<description>The project of heisenberg</description>
Expand Down Expand Up @@ -47,6 +47,11 @@
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
Expand Down Expand Up @@ -81,8 +86,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<source>1.8</source>
<target>1.8</target>
<encoding>${app.encoding}</encoding>
</configuration>
</plugin>
Expand Down Expand Up @@ -142,6 +147,7 @@
<configuration>
<sourceExcludes>
<sourceExclude>**/.svn/**</sourceExclude>
<sourceExclude>**/.git/**</sourceExclude>
</sourceExcludes>
<downloadSources>true</downloadSources>
<outputDirectory>classes</outputDirectory>
Expand All @@ -159,7 +165,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>heisenberg-server-1.0.7</finalName>
<finalName>heisenberg-server</finalName>
<descriptors>
<descriptor>assembly/assembly.xml</descriptor>
</descriptors>
Expand Down

0 comments on commit bafbf56

Please sign in to comment.