Is the mmap option part of sqlite or do we need to change the sqlite code ?


If so, has somebody here already tried it ? Any source available ?


What 's the order of improvement ?





Renaud

> Date: Thu, 8 Nov 2007 15:54:35 +0500
> From: [EMAIL PROTECTED]
> To: sqlite-users@sqlite.org
> Subject: Re: [sqlite] Disk caching impacts performance.
>
> Try this, use mmap
> (i assume u'r db is readonly)this is much faster and
> better than ifstream read. Also ifstream read can keep the data in cache as 
> long as no other serious
> i/o occurs.
>
> U need to accept it as we work with Virtual Mem or
> write your own FileSystem which is mem based and short circuits os calls. 
> Sqlite 3.5x has good support for such ext.
>
> regrads
> ragha
>
> ******************************************************************************************
> This email and its attachments contain confidential information from HUAWEI, 
> which is intended only for the person or entity whose address is listed 
> above. Any use of the information contained herein in any way (including, but 
> not limited to, total or partial disclosure, reproduction, or dissemination) 
> by persons other than the intended recipient(s) is prohibited. If you receive 
> this e-mail in error, please notify the sender by phone or email immediately 
> and delete it!
> *****************************************************************************************
>
> ----- Original Message -----
> From: Julien Renggli 
> Date: Thursday, November 8, 2007 4:15 pm
> Subject: [sqlite] Disk caching impacts performance.
>
>> Hello,
>>
>>
>>
>> I'm currently working on a project which is very likely to use
>> SQLite as
>> data storage. Since performance is important for us, I already
>> found on
>> the SQLite website many ways to optimise the code (always working in
>> transactions where possible, using a page size of 4096 since it's
>> running on the Windows platform, using integers primary keys, ...).
>> ButI have one problem that I "solved" in an unorthodox way; it
>> works, but
>> maybe you have a better solution than mine?
>>
>>
>>
>> I've been doing some test with a ~100 MB database, in which I have
>> three
>> tables: one for structured data (Objects, 2000 entries), one for the
>> blobs we have to store (ObjectBlobs ID INTEGER PRIMARY KEY, Data BLOB)
>> (8000 entries), and one which binds the structured data and the blobs
>> (8000 entries). As you can imagine, each Object has 4 blobs linked to
>> it; the blobs can be quite large (let's say up to 1 MB).
>>
>> My (C++) application just has to read the table "Objects", and one of
>> the Blobs for each Object.
>>
>>
>>
>> Now the first time I run my application, it takes quite a long time
>>
>> (30s) to load the blobs. But if I re-run the app, it only takes 1s to
>> load them. It's clearly a disk caching issue: if I copy huge files to
>> the disk between two runs, it takes again 30s to load the blobs (i.e.
>>
>> the DB is no more in the disk cache). Profiling the application
>> indicates sqlite::winRead() is the bottleneck.
>>
>>
>>
>> I then had the following idea: SQLite is probably reading the file
>> randomly, depending on where the data lies. If I can force the DB
>> to be
>> cached, everything should be fine. So before connecting the
>> database, I
>> first read it sequentially (using a C++ ifstream) until the end of
>> file.
>> It perfectly solves the database problem, even though I still
>> notice a
>> difference (3s to read the file on 1st run, 0.2s later). But 3s is OK
>> where 30s was worrying me.
>>
>>
>>
>> I hope I explain the situation clear enough, and ask you now: is it
>> theonly way to do it? I find the trick a bit nasty and don't like
>> it; maybe
>> I missed something? Before you ask: I tried to VACUUM the DB, it only
>> reduced the timings to 16s, which was still bad for our requirements.
>>
>> Tests with a larger DB (it can get much bigger than my example) and on
>> different machines tend to confirm my theory.
>>
>>
>>
>> Thanks in advance (and a big thank for SQLite which is really nice and
>> easy to use !),
>>
>>
>>
>> Julien Renggli
>>
>>
>>
>> P.S.: Some technical informations:
>>
>> - sqlite v.3.3.16 (we will upgrade to the latest version later), C API
>>
>> - Windows XP SP2
>>
>> - Timings on Pentium 4 3.4GHz, 2GB RAM
>>
>>
>>
>>
>
> -----------------------------------------------------------------------------
> To unsubscribe, send email to [EMAIL PROTECTED]
> -----------------------------------------------------------------------------
>

_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to