OSDN Git Service

インデックスハッシュを使用するようにした
authorkonekoneko <jbh03215@hotmail.co.jp>
Wed, 21 Nov 2012 20:44:12 +0000 (05:44 +0900)
committerkonekoneko <jbh03215@hotmail.co.jp>
Wed, 21 Nov 2012 20:44:12 +0000 (05:44 +0900)
init.sql
package.json
profile.js

index a7fc3c4..6befa87 100644 (file)
--- a/init.sql
+++ b/init.sql
@@ -6,20 +6,23 @@ flush privileges;
 CREATE DATABASE IF NOT EXISTS webchat DEFAULT CHARSET=utf8;
 use webchat;
 DROP TABLE IF EXISTS list;
-CREATE TABLE list(name VARCHAR(64) NOT NULL,
+CREATE TABLE list(
+       name_hash INT UNSIGNED NOT NULL,
+       name VARCHAR(64) NOT NULL,
        age SMALLINT  UNSIGNED DEFAULT 0,
+       lastmodified DATETIME,
        height SMALLINT  UNSIGNED DEFAULT 0,
        weight SMALLINT  UNSIGNED DEFAULT 0,
        gender VARCHAR(8),
        race VARCHAR(64),
        password VARCHAR(16),
-       lastmodified DATETIME,
        etc TEXT,
-       PRIMARY KEY(name));
-CREATE DATABASE IF NOT EXISTS configure;
+       PRIMARY KEY(name_hash));
+
 DROP TABLE IF EXISTS ipbanlist;
 CREATE TABLE ipbanlist(ip VARCHAR(64) NOT NULL,
        type CHAR(1));
+
 DROP TABLE IF EXISTS rooms;
 CREATE TABLE rooms(number SMALLINT UNSIGNED NOT NULL,
        password VARCHAR(16),
index 35994a7..824932a 100644 (file)
@@ -11,5 +11,6 @@
     , "date-utils" : "1.2.12"
     , "generic-pool" : "2.0.2"
     , "mysql" : "2.0.0-alpha4"
+    , "murmurhash" : "0.0.2"
   }
 }
index 3022f06..699d9f8 100644 (file)
@@ -265,6 +265,7 @@ function RenderMessage(res,msg,info)
 function ProfileCollection()\r
 {\r
        var MySQLPool = new require("./mysql_pool.js");\r
+       var murmurhash = require("murmurhash");\r
        var pool = new MySQLPool({\r
                                host     : config.db_host,\r
                                user     : config.db_user,\r
@@ -275,7 +276,7 @@ function ProfileCollection()
        this.AuthAsync = function(name,password,cb){\r
                async.waterfall([\r
                        function(next){\r
-                               pool.query("SELECT * FROM list WHERE name = ?",[name],next);\r
+                               pool.query("SELECT * FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],next);\r
                        },\r
                        function(result,next){\r
                                if(result[0].password == password)\r
@@ -286,10 +287,11 @@ function ProfileCollection()
                ],cb);\r
        }\r
        this.GetAsync = function(name,cb){\r
-               pool.query("SELECT * FROM list WHERE name = ?",[name],cb);\r
+               pool.query("SELECT * FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],cb);\r
        }\r
        this.AddAsync = function(data,cb){\r
                var item = {\r
+                       name_hash:murmurhash.v3(data.name),\r
                        name:data.name,\r
                        age:data.age,\r
                        gender:data.gender,\r
@@ -304,6 +306,7 @@ function ProfileCollection()
        }\r
        this.UpdatAsync = function(name,data,cb){\r
                var item = {\r
+                       name_hash:murmurhash.v3(data.name),\r
                        name:data.name,\r
                        age:data.age,\r
                        gender:data.gender,\r
@@ -323,7 +326,7 @@ function ProfileCollection()
                pool.query("DELETE FROM list WHERE name IN (?)",[names],cb);\r
        }\r
        this.RemoveAsync = function(name,cb){\r
-               pool.query("DELETE FROM list WHERE name = ?",[name],cb);\r
+               pool.query("DELETE FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],cb);\r
        }\r
        this.FindByNameAsync = function(pattern,start,count,cb){\r
                pool.query("SELECT * FROM list WHERE name LIKE ? LIMIT ?,?",[pattern+"%",start,count],cb);\r