Converting variable name to variable ID (with separate lookup table)
was one of my first ideas, but turns out that the lookup itself was a
bigger hit in performance than the indexing.  I'll revisit that and
see if I failed to tweak something properly.

-Ian

On Wed, Apr 11, 2012 at 1:22 PM, Pavel Ivanov <paiva...@gmail.com> wrote:
>> Am I missing any features of SQLite that would solve this problem in a
>> different/better way?
>
> If you didn't try it I would suggest to try a single table (timestamp,
> variable id, value). Index on integer variable id will work faster
> than text variable name.
> Other than that I'd say your design of one table per database is well
> justified. Especially if you won't attach all databases together while
> inserting data, but will connect to necessary database directly.
>
>
> Pavel
>
>
> On Wed, Apr 11, 2012 at 1:11 PM, Ian Katz <ifreeca...@gmail.com> wrote:
>> These are all good points, and introduce some features of sqlite that
>> I didn't know existed!
>>
>> The database system that I'm designing is for an autonomous vehicle;
>> it collects a lot of (data which is currently getting stored as a flat
>> text file).  So, it's going to write a LOT of data into many tables
>> independently, occasionally do single-table reads, and at the end of
>> the day create a report that joins all the tables together.  So, my
>> main goal is to give maximum speed to writes by compartmentalizing the
>> locks that the incoming reads will cause.  It sounds like this use
>> case won't hit any of the disadvantages mentioned above.
>>
>> In the past, I've tried to do this in SQLite and MySQL by putting all
>> the data in a single table (timestamp, variable name, value).  But, if
>> you index the variable name then writes become too slow (by the end of
>> a day's worth of data collection, the next round of data comes in
>> before the previous round is written); if you don't index then the
>> table is impossible to select from in any reasonable amount of time.
>> So, the solution seems to be splitting every variable into its own
>> table -- not very good normalization, but retaining good read
>> performance without having write performance degrade over time.  The
>> join-all-tables-together query would be used for generating a logfile
>> in the old format, just in case we need it.
>>
>> Am I missing any features of SQLite that would solve this problem in a
>> different/better way?
>>
>> -Ian
>>
>> On Wed, Apr 11, 2012 at 12:20 PM, Pavel Ivanov <paiva...@gmail.com> wrote:
>>> On Wed, Apr 11, 2012 at 12:01 PM, Ian Katz <ifreeca...@gmail.com> wrote:
>>>> The Sqlite3 manual says that any locking operations affect the entire
>>>> database, not individual tables.
>>>> http://www.sqlite.org/lockingv3.html
>>>>
>>>> I was wondering if this effect could be compensated for by splitting
>>>> tables into separate databases and using the "attach database" option
>>>> outlined here:
>>>> http://stackoverflow.com/questions/6671678/objective-c-sqlite-join-tables-from-multiple-database
>>>>
>>>> I would assume that the databases will not become locked until the
>>>> statement is executed (i.e., preparing the statement won't lock it).
>>>> Is that correct?
>>>
>>> Yes, that's correct, although I don't see a link between this
>>> statement and "attache database" discussion above.
>>>
>>>> If so, is there a significant disadvantage or
>>>> performance hit to using this workaround?
>>>
>>> The first performance hit that comes to mind is either you won't be
>>> able to use WAL mode (which is a significant performance hit) or you
>>> lose overall atomicity of transactions (see disadvantage point 3 here
>>> http://www.sqlite.org/wal.html).
>>>
>>> So I wouldn't do that if I were you.
>>>
>>>
>>> Pavel
>>> _______________________________________________
>>> sqlite-users mailing list
>>> sqlite-users@sqlite.org
>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
>>
>>
>> --
>> Ian Katz
>> Research Software Engineer, MIT LAMSS
>> i...@mit.edu
>> _______________________________________________
>> 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



-- 
Ian Katz
Research Software Engineer, MIT LAMSS
i...@mit.edu
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to