the process runs on a board with Atmel AT91SAM9260 (Clocks: CPU 198 MHz,
...), Memory: 16MB, yaffs on NAND 256MB.

the time of writing one row is more than 20mS, and the time of reading one
row is more than 3mS.

Is it the ceiling of the SQLite3? If no, how to improve it? espically
improving the routine of writing.

Thanks in advance. :)

________________________________code_______________________________________

// 测试sqlite3 写入、读取、修改数据库的时间 (一个进程只包含一个打开、关闭数据库), 20091223
//
// arm-linux-gcc -Wall -g -lpthread -lsqlite3    sqlite3speed.c   -o
sqlite3speed

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>     // for system(*)
#include <sys/time.h>   // for gettimeofday(*)

void test_sqlite3_time_write (void);
void test_sqlite3_time_read (void);

sqlite3             *g_db = NULL;
struct timeval      g_tv1;
struct timeval      g_tv2;
struct timezone     g_tz;

int main (void)
{
    int ret = -1;
    int c = 0;
    char *ct = "CREATE TABLE testspeed (id INTEGER PRIMARY KEY, type
INTEGER, content TEXT)";

    ret = sqlite3_open ("testspeed.db", &g_db);
    ret = sqlite3_exec (g_db, ct, NULL, NULL, NULL);

    printf ("test sqlite3's writing、reading time\n");
    printf ("1、 writing\n");
    printf ("2、 reading\n");
    while ((c = getchar()) != 'q')
    {
        switch (c)
        {
            case '1':
                test_sqlite3_time_write ();
                break;
            case '2':
                test_sqlite3_time_read ();
                break;
            default:
                break;
        }
    }

    ret = sqlite3_close (g_db);

    return 0;
}

void test_sqlite3_time_write (void)
{
    int  ret  = -1;
    char *i_f = "INSERT OR REPLACE INTO testspeed VALUES (%d, %d, %Q)";
    char *i_s = NULL;

    /*
    gettimeofday (&g_tv1, &g_tz);
    i_s = sqlite3_mprintf (i_f, 1, 22, "reliable测试");
    ret = sqlite3_exec (g_db, i_s, NULL, NULL, NULL);
    gettimeofday (&g_tv2, &g_tz);
    ret = system ("sqlite3 testspeed.db \"SELECT * FROM testspeed\"");
    if (0 == ret)
    {
        printf ("using sqlite3_exec() writing one row spends: %d us\n\n",
                (int) ((g_tv2.tv_sec - g_tv1.tv_sec)*1000000 + g_tv2.tv_usec
- g_tv1.tv_usec));
        system ("sqlite3 testspeed.db \"DELETE FROM testspeed\"");
    }
    */


    sqlite3_stmt *stmt = NULL;


    gettimeofday (&g_tv1, &g_tz);

    i_s = sqlite3_mprintf (i_f, 1, 22, "test可靠吗?");
    ret = sqlite3_prepare_v2 (g_db, i_s, -1, &stmt, NULL);
    if (SQLITE_OK == ret)
    {
        ret = sqlite3_step (stmt);
        if (SQLITE_DONE == ret)
        {
            sqlite3_finalize (stmt);

            gettimeofday (&g_tv2, &g_tz);

            ret = system ("sqlite3 testspeed.db \"SELECT * FROM
testspeed\"");
            if (0 == ret)
            {
                printf ("using sqlite3_prepare_v2() + sqlite3_step() writing
one row spends: %d uS\n\n",
                    (int) ((g_tv2.tv_sec - g_tv1.tv_sec)*1000000 +
g_tv2.tv_usec - g_tv1.tv_usec));
                system ("sqlite3 testspeed.db \"DELETE FROM testspeed\"");
            }
        }
        else
                sqlite3_finalize (stmt);
    }
}

void test_sqlite3_time_read (void)
{
    int  ret  = -1;
    char *i_f = "SELECT * FROM testspeed WHERE id=%d";
    char *i_s = NULL;


    sqlite3_exec (g_db, "INSERT OR REPLACE INTO testspeed VALUES (1, 22,
\"测试, yes\")", NULL,NULL,NULL);

    /*
    char **sgt_medi = NULL;
    char **sgt_resu = NULL;
    int column = 0;
    int row = 0;

    gettimeofday (&g_tv1, &g_tz);
    i_s = sqlite3_mprintf (i_f, 1);
    ret = sqlite3_get_table (g_db, i_s, &sgt_medi, &row, &column, NULL);
    if (SQLITE_OK == ret)
    {
        sgt_resu = sgt_medi + column;
        printf ("%d, %d, %d, %s\n", row, atoi (sgt_resu[0]), atoi
(sgt_resu[1]), sgt_resu[2]);

        gettimeofday (&g_tv2, &g_tz);
        printf ("using sqlite3_get_table() reading one row spends: %d
uS\n\n",
                (int) ((g_tv2.tv_sec - g_tv1.tv_sec)*1000000 + g_tv2.tv_usec
- g_tv1.tv_usec));

        system ("sqlite3 testspeed.db \"DELETE FROM testspeed\"");
    }
    */


    sqlite3_stmt *stmt = NULL;

    gettimeofday (&g_tv1, &g_tz);

    i_s = sqlite3_mprintf (i_f, 1);
    ret = sqlite3_prepare_v2 (g_db, i_s, -1, &stmt, NULL);
    if (SQLITE_OK == ret)
    {
        ret = sqlite3_step (stmt);
        if (SQLITE_ROW == ret)
        {
            printf ("%d, %d, %s\n",
            sqlite3_column_int (stmt, 0), sqlite3_column_int (stmt, 1),
sqlite3_column_text (stmt, 2));

            sqlite3_finalize (stmt);

            gettimeofday (&g_tv2, &g_tz);
            printf ("using sqlite3_prepare_v2() + sqlite3_step() reading one
row spends: %d uS\n\n",
            (int) ((g_tv2.tv_sec - g_tv1.tv_sec)*1000000 + g_tv2.tv_usec -
g_tv1.tv_usec));

            system ("sqlite3 testspeed.db \"DELETE FROM testspeed\"");
        }
        else
            sqlite3_finalize (stmt);
    }
}


-- 
View this message in context: 
http://old.nabble.com/speed%2C-writing-spends-30ms%2C-reading-spends-2ms%2C-still-slow-tp26909939p26909939.html
Sent from the SQLite mailing list archive at Nabble.com.

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to