This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new b092bbf  Reduce overhead of Mod/HashMod sharding algorithm (#15292)
b092bbf is described below

commit b092bbf67d7872060e5bb146e128a1b3a31387ef
Author: 吴伟杰 <[email protected]>
AuthorDate: Tue Feb 8 19:22:05 2022 +0800

    Reduce overhead of Mod/HashMod sharding algorithm (#15292)
    
    * Return longValue of Number directly
    
    * Avoid calculate suffix in loop
    
    * Avoid calculate suffix in loop in HashModShardingAlgorithm
---
 .../sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java    | 3 ++-
 .../sharding/algorithm/sharding/mod/ModShardingAlgorithm.java        | 5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
index 6162928..372ac28 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
@@ -54,8 +54,9 @@ public final class HashModShardingAlgorithm implements 
StandardShardingAlgorithm
     
     @Override
     public String doSharding(final Collection<String> availableTargetNames, 
final PreciseShardingValue<Comparable<?>> shardingValue) {
+        String suffix = 
String.valueOf(hashShardingValue(shardingValue.getValue()) % shardingCount);
         for (String each : availableTargetNames) {
-            if 
(each.endsWith(String.valueOf(hashShardingValue(shardingValue.getValue()) % 
shardingCount))) {
+            if (each.endsWith(suffix)) {
                 return each;
             }
         }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
index c181c9a..2d78d39 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
@@ -55,8 +55,9 @@ public final class ModShardingAlgorithm implements 
StandardShardingAlgorithm<Com
     
     @Override
     public String doSharding(final Collection<String> availableTargetNames, 
final PreciseShardingValue<Comparable<?>> shardingValue) {
+        String suffix = String.valueOf(getLongValue(shardingValue.getValue()) 
% shardingCount);
         for (String each : availableTargetNames) {
-            if 
(each.endsWith(String.valueOf(getLongValue(shardingValue.getValue()) % 
shardingCount))) {
+            if (each.endsWith(suffix)) {
                 return each;
             }
         }
@@ -86,7 +87,7 @@ public final class ModShardingAlgorithm implements 
StandardShardingAlgorithm<Com
     }
     
     private long getLongValue(final Comparable<?> value) {
-        return Long.parseLong(value.toString());
+        return value instanceof Number ? ((Number) value).longValue() : 
Long.parseLong(value.toString());
     }
     
     @Override

Reply via email to