IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 34919


Ignore:
Timestamp:
Jan 12, 2013, 2:24:56 PM (14 years ago)
Author:
eugene
Message:

add buffered inserts with multiple rows per insert

Location:
branches/eam_branches/ipp-20121219/Ohana/src/dvopsps
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/include/dvopsps.h

    r34916 r34919  
    4343int    insert_detections_dvopsps          PROTO(());
    4444int    insert_detections_dvopsps_parallel PROTO((SkyTable *sky));
    45 int    insert_detections_mysql             PROTO((Average *average, Measure *measure, MYSQL *mysql));
    46 int    insert_detections_dvopsps_catalog   PROTO((Catalog *catalog, MYSQL *mysql));
     45int    insert_detections_dvopsps_catalog  PROTO((Catalog *catalog, MYSQL *mysql));
    4746     
    4847MYSQL *mysql_dvopsps_connect              PROTO((MYSQL *mysqlBase));
     48
     49int    insert_detections_mysql            PROTO((Average *average, Measure *measure, MYSQL *mysql));
     50
     51int    insert_detections_mysql_commit     PROTO((IOBuffer *buffer, MYSQL *mysql));
     52int    insert_detections_mysql_value      PROTO((IOBuffer *buffer, Average *average, Measure *measure));
     53int    insert_detections_mysql_init       PROTO((IOBuffer *buffer));
  • branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps.c

    r34918 r34919  
    11# include "dvopsps.h"
    2 # define USE_MYSQL 0
     2# define USE_MYSQL 1
    33
    44// determine the relevant catalogs, launch parallel clients if desired
  • branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c

    r34918 r34919  
    11# include "dvopsps.h"
     2
     3# define MARKTIME(MSG,...) {                    \
     4    float dtime;                                \
     5    gettimeofday (&stop, (void *) NULL);        \
     6    dtime = DTIME (stop, start);                \
     7    fprintf (stderr, MSG, __VA_ARGS__); }
    28
    39int insert_detections_dvopsps_catalog (Catalog *catalog, MYSQL *mysql) {
     
    511  off_t i, j;
    612  int missingID = 0;
     13  struct timeval start, stop;
     14
     15  IOBuffer buffer;
     16  buffer.Nalloc = 0;
    717
    818  Average *average = catalog->average;
     
    1121  off_t found = 0;
    1222
     23  gettimeofday (&start, (void *) NULL);
     24
     25  insert_detections_mysql_init (&buffer);
     26
     27  if (!mysql) {
     28    catalog[0].Naverage = 5;
     29  }
    1330  for (i = 0; i < catalog[0].Naverage; i++) {
    1431
     
    2138
    2239      // XXX check return status
    23       insert_detections_mysql (&average[i], &measure[m+j], mysql);
     40      insert_detections_mysql_value (&buffer, &average[i], &measure[m+j]);
     41
     42      if (buffer.Nalloc > 0x100000) {
     43        insert_detections_mysql_commit (&buffer, mysql);
     44        if (0) {
     45          FlushIOBuffer (&buffer);
     46        } else {
     47          buffer.Nbuffer = 0;
     48          bzero (buffer.buffer, buffer.Nalloc);
     49        }
     50        insert_detections_mysql_init (&buffer);
     51      }
    2452
    2553      found ++;
    2654    }
    2755  }
     56  insert_detections_mysql_commit (&buffer, mysql);
    2857
    29   fprintf (stderr, "inserted "OFF_T_FMT" rows, skipped %d without IDs\n", found, missingID);
     58  MARKTIME("-- inserted "OFF_T_FMT" rows in %f sec, skipped %d without IDs\n", found, dtime, missingID);
    3059  return (TRUE);
    3160}
    3261
    33 int insert_detections_mysql (Average *average, Measure *measure, MYSQL *mysql) {
     62int insert_detections_mysql_init (IOBuffer *buffer) {
    3463
    35   // XXX length OK?
    36   char sql[1024];
     64  if (buffer->Nalloc == 0) {
     65    InitIOBuffer (buffer, 1024);
     66  }
    3767
     68  PrintIOBuffer (buffer, "INSERT INTO dvoDetection (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES \n");
     69
     70  return TRUE;
     71}
     72
     73int insert_detections_mysql_value (IOBuffer *buffer, Average *average, Measure *measure) {
     74
     75  // XXX I am changing the def of ippObjID if I use the code below
    3876  PhotCode *code = GetPhotcodebyCode(measure->photcode);
    39   sprintf(sql,
    40           "INSERT INTO dvoDetection (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES (%d, %u, %lu, %lu, %lu, %u, %f, %f, %f, %f, %lf, %lf, %f, %f)",
     77  PrintIOBuffer (buffer, "    (%d, %u, %lu, %lu, %lu, %u, %f, %f, %f, %f, %lf, %lf, %f, %f),\n",
    4178          measure->imageID,    // imageID
    4279          measure->detID,   // ippDetectID
    4380          measure->extID,   // detectID
    44           (uint64_t)average->catID*1000000000 + (uint64_t)average->objID, // ippObjID
     81          ((uint64_t)average->catID << 32) + (uint64_t)average->objID, // ippObjID
    4582          average->extID,   // objID
    4683          measure->dbFlags,  // flags
     
    5491          measure->dYccd * 0.01 * fabs(measure->pltscale) // estimate of decErr
    5592    );
    56  
     93  return TRUE;
     94}
     95
     96int insert_detections_mysql_commit (IOBuffer *buffer, MYSQL *mysql) {
     97
     98  // check that the last two chars are ,\n and replace with ;\n
     99  if (!strcmp(&buffer->buffer[buffer->Nbuffer-2], ",\n")) {
     100    fprintf (stderr, "valid sql\n");
     101    buffer->buffer[buffer->Nbuffer-2] = ';';
     102  } else {
     103    fprintf (stderr, "invalid sql?\n");
     104    return FALSE;
     105  }
     106
    57107  // XXX check return status
    58108  if (mysql) {
    59     mysql_query(mysql, sql);
     109    mysql_query(mysql, buffer->buffer);
    60110  } else {
    61     fprintf (stderr, "%s\n", sql);
     111    fprintf (stderr, "%s\n", buffer->buffer);
    62112  }
    63113
  • branches/eam_branches/ipp-20121219/Ohana/src/dvopsps/test/dbadmin.sh

    r34917 r34919  
    4747endif
    4848
     49if ("$1" == "delete") then
     50  if ($#argv != 4) goto usage;
     51  set dbhost = $2
     52  set dbname = $3
     53  set dbuser = $4
     54
     55  mysql -h $dbhost -u $dbuser -p <<EOF > /dev/null
     56   USE $dbname;
     57   describe dvoDetection;
     58EOF
     59
     60  if ($status) then
     61    echo "database does not contain dvoDetections, not deleting"
     62    exit 1;
     63  endif
     64
     65  echo "database is valid, deleting"
     66  mysql -h $dbhost -u $dbuser -p <<EOF
     67   drop database $dbname;
     68EOF
     69
     70   exit 0;
     71endif
     72
    4973usage:
    5074  echo "USAGE: dbadmin.sh (options)"
Note: See TracChangeset for help on using the changeset viewer.