I'll take a stab at this.

Each connection would have its own private memory database. 

Create an additional temp table id_list , Insert the user id set values into 
this table.

Then 
INSERT INTO temptab tt SELECT mt.* FROM maintab mt, id_list 
                                 WHERE mt.id = idl.id ;

Then delete the id_list table or drop it.

HTH,
Ken


--- On Wed, 9/10/08, Mohit Sindhwani <[EMAIL PROTECTED]> wrote:
From: Mohit Sindhwani <[EMAIL PROTECTED]>
Subject: Re: [sqlite] Considerations with in-memory SQLite3
To: "General Discussion of SQLite Database" <sqlite-users@sqlite.org>
Date: Wednesday, September 10, 2008, 2:26 PM

Hi Richard

Thanks for the quick response!

D. Richard Hipp wrote:
> On Sep 10, 2008, at 2:09 PM, Mohit Sindhwani wrote:
>   
>>
>> I've been using SQLite3 for a while though to be honest, it's
been  
>> more
>> of a data store rather than a dynamic database in my applications this
>> far.  I'm now starting on something where my needs are as such:
>> * Store 70,000 records in one table in the database
>> * Based on a list from the user, extract up to 3,000 records from the
>> table (1 common field)
>> * Use the 3,000 records for calculations, etc.
>> * Support concurrency of up to 10 such operations
>>     
>
>
> Your description implies that database is read-only.  Is this  
> correct?  If so, then concurrency will not be a problem since SQLite  
> supports as many simultaneous readers as you like.  Only writers need  
> to be serialized.
>
> If you create a TEMP table to hold the 3000 selected records then do:
>
>      INSERT INTO temptab SELECT * FROM maintab WHERE ...;
>
> You can then do your computations on the temporary table without even  
> interfering with writers on the main table.
>   

The main table is read-only - there will be no writes to the main table.

The TEMP tables (one for each concurrent access) would involve writing 
since I will somehow need to insert the 3000 records from the user into 
the TEMP table and also the joined results.  If I use temp tables, 
wouldn't the creation of one block the rest from writing at the same time?

Finally, on a related but different note, what is the limit for a SQL 
statement?  I'm receiving 3000 IDs from the user and what I really need 
to do is:
INSERT INTO temptab SELECT * FROM maintab WHERE id IN (1, 3, 89, 22, 
324, ..);

With 3000 records (actually each ID is 6 digits), this would lead to a 
SQL query that runs into 24KBytes or so!  I'm sure I'm missing
something.

(By the way, this would all be in a Windows application using SQLite 
embedded into the application).

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

Reply via email to