The environment is:
Linux at91sam9260nand 2.6.25.10
SQLite 3.6.5
liubin liu wrote:
>
> 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-tp26909939p26910009.html
Sent from the SQLite mailing list archive at Nabble.com.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users