aboutsummaryrefslogtreecommitdiff
path: root/src/datastore
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-08-02 21:31:20 +0000
committerChristian Grothoff <christian@grothoff.org>2011-08-02 21:31:20 +0000
commit1aacd1bf70f89ede0bd351f4f346a68dd3b6ad1d (patch)
tree69575bddb3b7b6340f4eee1f2f1137e8e940a6a1 /src/datastore
parentfe04c757e0cd3620b1e914d52c36a28930652956 (diff)
downloadgnunet-1aacd1bf70f89ede0bd351f4f346a68dd3b6ad1d.tar.gz
gnunet-1aacd1bf70f89ede0bd351f4f346a68dd3b6ad1d.zip
significantly improving mysql performance - as planned a while ago
Diffstat (limited to 'src/datastore')
-rw-r--r--src/datastore/plugin_datastore_mysql.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/datastore/plugin_datastore_mysql.c b/src/datastore/plugin_datastore_mysql.c
index 0041be378..a5f8f2a3e 100644
--- a/src/datastore/plugin_datastore_mysql.c
+++ b/src/datastore/plugin_datastore_mysql.c
@@ -194,7 +194,7 @@ struct Plugin
194 /** 194 /**
195 * Prepared statements. 195 * Prepared statements.
196 */ 196 */
197#define INSERT_ENTRY "INSERT INTO gn090 (repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES (?,?,?,?,?,?,?,?,?)" 197#define INSERT_ENTRY "INSERT INTO gn090 (repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES (?,?,?,?,?,RAND(),?,?,?)"
198 struct GNUNET_MysqlStatementHandle *insert_entry; 198 struct GNUNET_MysqlStatementHandle *insert_entry;
199 199
200#define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?" 200#define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?"
@@ -242,7 +242,16 @@ struct Plugin
242 "ORDER BY expire ASC LIMIT 1" 242 "ORDER BY expire ASC LIMIT 1"
243 struct GNUNET_MysqlStatementHandle *select_expiration; 243 struct GNUNET_MysqlStatementHandle *select_expiration;
244 244
245#define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 ORDER BY repl DESC,RAND() LIMIT 1" 245 // select type from (select rand() as v) AS t1 INNER JOIN gn090 ON expire>=t1.v limit 1;
246
247#define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM "\
248 "(SELECT RAND() AS v) AS t1 INNER JOIN "\
249 "(SELECT MAX(repl) AS m FROM gn090) AS t2 INNER JOIN "\
250 "gn090 ON repl=t2.m AND"\
251 " (rvalue>=t1.v OR"\
252 " NOT EXISTS (SELECT 1 FROM gn090 WHERE repl=t2.m AND rvalue>=t1.v))"\
253 "ORDER BY rvalue ASC "\
254 "LIMIT 1"
246 struct GNUNET_MysqlStatementHandle *select_replication; 255 struct GNUNET_MysqlStatementHandle *select_replication;
247 256
248}; 257};
@@ -848,7 +857,6 @@ mysql_plugin_put (void *cls,
848 unsigned long hashSize; 857 unsigned long hashSize;
849 unsigned long hashSize2; 858 unsigned long hashSize2;
850 unsigned long lsize; 859 unsigned long lsize;
851 unsigned long rvalue;
852 GNUNET_HashCode vhash; 860 GNUNET_HashCode vhash;
853 861
854 if (size > MAX_DATUM_SIZE) 862 if (size > MAX_DATUM_SIZE)
@@ -860,7 +868,6 @@ mysql_plugin_put (void *cls,
860 hashSize2 = sizeof (GNUNET_HashCode); 868 hashSize2 = sizeof (GNUNET_HashCode);
861 lsize = size; 869 lsize = size;
862 GNUNET_CRYPTO_hash (data, size, &vhash); 870 GNUNET_CRYPTO_hash (data, size, &vhash);
863 rvalue = (unsigned long) GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX);
864 if (GNUNET_OK != 871 if (GNUNET_OK !=
865 prepared_statement_run (plugin, 872 prepared_statement_run (plugin,
866 plugin->insert_entry, 873 plugin->insert_entry,
@@ -870,7 +877,6 @@ mysql_plugin_put (void *cls,
870 MYSQL_TYPE_LONG, &ipriority, GNUNET_YES, 877 MYSQL_TYPE_LONG, &ipriority, GNUNET_YES,
871 MYSQL_TYPE_LONG, &ianonymity, GNUNET_YES, 878 MYSQL_TYPE_LONG, &ianonymity, GNUNET_YES,
872 MYSQL_TYPE_LONGLONG, &lexpiration, GNUNET_YES, 879 MYSQL_TYPE_LONGLONG, &lexpiration, GNUNET_YES,
873 MYSQL_TYPE_LONGLONG, &rvalue, GNUNET_YES,
874 MYSQL_TYPE_BLOB, key, hashSize, &hashSize, 880 MYSQL_TYPE_BLOB, key, hashSize, &hashSize,
875 MYSQL_TYPE_BLOB, &vhash, hashSize2, &hashSize2, 881 MYSQL_TYPE_BLOB, &vhash, hashSize2, &hashSize2,
876 MYSQL_TYPE_BLOB, data, lsize, &lsize, 882 MYSQL_TYPE_BLOB, data, lsize, &lsize,
@@ -1427,7 +1433,7 @@ libgnunet_plugin_datastore_mysql_init (void *cls)
1427 " prio INT(11) UNSIGNED NOT NULL DEFAULT 0," 1433 " prio INT(11) UNSIGNED NOT NULL DEFAULT 0,"
1428 " anonLevel INT(11) UNSIGNED NOT NULL DEFAULT 0," 1434 " anonLevel INT(11) UNSIGNED NOT NULL DEFAULT 0,"
1429 " expire BIGINT UNSIGNED NOT NULL DEFAULT 0," 1435 " expire BIGINT UNSIGNED NOT NULL DEFAULT 0,"
1430 " rvalue BIGINT UNSIGNED NOT NULL," 1436 " rvalue DOUBLE UNSIGNED NOT NULL,"
1431 " hash BINARY(64) NOT NULL DEFAULT ''," 1437 " hash BINARY(64) NOT NULL DEFAULT '',"
1432 " vhash BINARY(64) NOT NULL DEFAULT ''," 1438 " vhash BINARY(64) NOT NULL DEFAULT '',"
1433 " value BLOB NOT NULL DEFAULT ''," 1439 " value BLOB NOT NULL DEFAULT '',"