gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r16339 - gnunet/src/datastore


From: gnunet
Subject: [GNUnet-SVN] r16339 - gnunet/src/datastore
Date: Tue, 2 Aug 2011 23:31:20 +0200

Author: grothoff
Date: 2011-08-02 23:31:20 +0200 (Tue, 02 Aug 2011)
New Revision: 16339

Modified:
   gnunet/src/datastore/plugin_datastore_mysql.c
Log:
significantly improving mysql performance - as planned a while ago

Modified: gnunet/src/datastore/plugin_datastore_mysql.c
===================================================================
--- gnunet/src/datastore/plugin_datastore_mysql.c       2011-08-02 18:24:29 UTC 
(rev 16338)
+++ gnunet/src/datastore/plugin_datastore_mysql.c       2011-08-02 21:31:20 UTC 
(rev 16339)
@@ -194,7 +194,7 @@
   /**
    * Prepared statements.
    */
-#define INSERT_ENTRY "INSERT INTO gn090 
(repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES 
(?,?,?,?,?,?,?,?,?)"
+#define INSERT_ENTRY "INSERT INTO gn090 
(repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES 
(?,?,?,?,?,RAND(),?,?,?)"
   struct GNUNET_MysqlStatementHandle *insert_entry;
   
 #define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?"
@@ -242,7 +242,16 @@
   "ORDER BY expire ASC LIMIT 1"
   struct GNUNET_MysqlStatementHandle *select_expiration;
 
-#define SELECT_IT_REPLICATION "SELECT 
type,prio,anonLevel,expire,hash,value,uid FROM gn090 ORDER BY repl DESC,RAND() 
LIMIT 1"
+  // select type from (select rand() as v) AS t1 INNER JOIN gn090 ON 
expire>=t1.v limit 1;
+
+#define SELECT_IT_REPLICATION "SELECT 
type,prio,anonLevel,expire,hash,value,uid FROM "\
+  "(SELECT RAND() AS v) AS t1 INNER JOIN "\
+  "(SELECT MAX(repl) AS m FROM gn090) AS t2 INNER JOIN "\
+  "gn090 ON repl=t2.m AND"\
+  "       (rvalue>=t1.v OR"\
+  "        NOT EXISTS (SELECT 1 FROM gn090 WHERE repl=t2.m AND rvalue>=t1.v))"\
+  "ORDER BY rvalue ASC "\
+  "LIMIT 1"
   struct GNUNET_MysqlStatementHandle *select_replication;
 
 };
@@ -848,7 +857,6 @@
   unsigned long hashSize;
   unsigned long hashSize2;
   unsigned long lsize;
-  unsigned long rvalue;
   GNUNET_HashCode vhash;
 
   if (size > MAX_DATUM_SIZE)
@@ -860,7 +868,6 @@
   hashSize2 = sizeof (GNUNET_HashCode);
   lsize = size;
   GNUNET_CRYPTO_hash (data, size, &vhash);
-  rvalue = (unsigned long) GNUNET_CRYPTO_random_u64 
(GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX);
   if (GNUNET_OK !=
       prepared_statement_run (plugin,
                              plugin->insert_entry,
@@ -870,7 +877,6 @@
                              MYSQL_TYPE_LONG, &ipriority, GNUNET_YES,
                              MYSQL_TYPE_LONG, &ianonymity, GNUNET_YES,
                              MYSQL_TYPE_LONGLONG, &lexpiration, GNUNET_YES,
-                             MYSQL_TYPE_LONGLONG, &rvalue, GNUNET_YES,
                              MYSQL_TYPE_BLOB, key, hashSize, &hashSize,
                              MYSQL_TYPE_BLOB, &vhash, hashSize2, &hashSize2,
                              MYSQL_TYPE_BLOB, data, lsize, &lsize, 
@@ -1427,7 +1433,7 @@
              " prio INT(11) UNSIGNED NOT NULL DEFAULT 0,"
              " anonLevel INT(11) UNSIGNED NOT NULL DEFAULT 0,"
              " expire BIGINT UNSIGNED NOT NULL DEFAULT 0,"
-             " rvalue BIGINT UNSIGNED NOT NULL,"
+             " rvalue DOUBLE UNSIGNED NOT NULL,"
              " hash BINARY(64) NOT NULL DEFAULT '',"
              " vhash BINARY(64) NOT NULL DEFAULT '',"
              " value BLOB NOT NULL DEFAULT '',"




reply via email to

[Prev in Thread] Current Thread [Next in Thread]