From f2143e1f2639c4e27d1794427dc441ee68c8130f Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 30 Jul 2017 07:58:01 +0800 Subject: [PATCH] use fnv1a_64 replace murmurhash. --- .../java/com/alibaba/druid/sql/SQLUtils.java | 2 +- .../com/alibaba/druid/stat/JdbcSqlStat.java | 2 +- .../java/com/alibaba/druid/util/Utils.java | 31 ++++++++++--------- .../com/alibaba/druid/wall/WallProvider.java | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/SQLUtils.java b/src/main/java/com/alibaba/druid/sql/SQLUtils.java index d65b3b3281..fa68407eba 100644 --- a/src/main/java/com/alibaba/druid/sql/SQLUtils.java +++ b/src/main/java/com/alibaba/druid/sql/SQLUtils.java @@ -703,7 +703,7 @@ public class SQLUtils { } if (token == Token.ERROR) { - return Utils.murmurhash2_64(sql); + return Utils.fnv_64(sql); } if (buf.length() != 0) { diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index b8bf03820f..5f6eccdb58 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -592,7 +592,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean, Comparable= 'A' && c <= 'Z') { - c += 32; + public static long fnv_64_lower(String key) { + long hashCode = 0xcbf29ce484222325L; + for (int i = 0; i < key.length(); ++i) { + char ch = key.charAt(i); + if (ch == '_' || ch == '-') { + continue; } - hash ^= c; - hash *= 0x1000193; + + if (ch >= 'A' && ch <= 'Z') { + ch = (char) (ch + 32); + } + + hashCode ^= ch; + hashCode *= 0x100000001b3L; } - return hash; + return hashCode; } public static void loadFromFile(String path, Set set) { diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index bbb454a26e..cd4d8b920b 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -926,7 +926,7 @@ public abstract class WallProvider { long sqlHash = sqlStat.getSqlHash(); if (sqlHash == 0) { - sqlHash = Utils.murmurhash2_64(sql); + sqlHash = Utils.fnv_64(sql); sqlStat.setSqlHash(sqlHash); } sqlStatValue.setSqlHash(sqlHash);