Hi Pavel, thanks a lot; I will reconsider this option and run some test cases to compare. But that will be tomorrow I guess... When doing so: Any idea of what would be the worst case column select strategy on the huge table to compare with?
Stefan Pavel Ivanov-2 wrote: > >> so normalization would lead to a doubling >> of the storage space (add a measurement_id to each measurement). > > My strong belief is that when you try this normalization you'll see > that such doubling of storage is a good enough trade-off for the speed > you'll achieve. I don't think that speed of queries on the table with > 100+ columns would be any useful (of course unless you *always* select > all columns and *never* try to select only a few ones). > >> Second, the most common use case is to view the table in the currently >> foreseen format - so, I'd pay both in space and time... > > Most probably you view your table from your application which can > denormalize the table very quickly. Even if you view your table from > sqlite3 command line tool you still can write denormalizer even using > bash scripts and I believe it will still work fast enough and it will > be better than creating such huge table. > > > Pavel > > On Tue, Jan 12, 2010 at 1:09 PM, Stefan_E <se_m...@hotmail.com> wrote: >> >> Hi Adam, >> >> thanks for your suggestion. Unfortunately, it doesn't help in my case. >> Essentially, we are talking about a time series (rows) of n different >> measurements (columns) - so normalization would lead to a doubling >> of the storage space (add a measurement_id to each measurement). >> >> Second, the most common use case is to view the table in the currently >> foreseen format - so, I'd pay both in space and time... >> >> Anyway, thanks for the suggestion! >> >> Regards, Stefan >> >> >> Adam DeVita wrote: >>> >>> Good day, >>> >>> In general I try to work within the limits of any database engine that I >>> am >>> using. Often, the limits are there for good reasons (such as speed >>> problems). I would suggest seeing if there is a way to normalize the >>> big >>> tables such that infrequently used columns are split into tables that >>> aren't >>> joined in often. (The principal I'm using is borrowed from hardware >>> architecture "Make the common case fast, and ensure the uncommon case is >>> correct.") >>> >>> It may or may not be sensible given your data, but there may be an >>> opportunity to reduce the number of columns by making an encoded column >>> to >>> aggregate, such as lots of mutually exclusive binary flag fields. >>> >>> regards, >>> Adam >>> >>> On Mon, Jan 11, 2010 at 3:46 PM, Stefan_E <se_m...@hotmail.com> wrote: >>> >>>> >>>> Hello all, >>>> >>>> I'm considering using SQLite for a new application. The schema will >>>> contain >>>> a bunch of small tables with few columns (~10) plus one large table >>>> with >>>> many columns and 1000...10000 rows. >>>> >>>> 'Many columns' typically fits into the default 2000 column limit, but >>>> can >>>> exceed it at times (that is, on some of the foreseen databases). It >>>> will >>>> never exceed the theoretical / compile time selectable limit of 32k >>>> columns. >>>> Queries on this big table will be rather straight-forward: either on >>>> the >>>> table alone (SELECT * FROM table_large) or one join on one field to one >>>> of >>>> the smaller tables. >>>> >>>> The http://www.sqlite.org/limits.html Limits page warns: "There are >>>> places >>>> in the SQLite code generator that use algorithms that are O(N²) where N >>>> is >>>> the number of columns." which is kind of discouraging to increase max. >>>> column count at compile time, but is not very specific about when this >>>> happens... >>>> >>>> I now have two design options: >>>> - increase max. column count at compile time (possibly setting >>>> SQLITE_LIMIT_COLUMN on databases where I don't need more than (say) >>>> 1000 >>>> columns) and accept the quoted performance degradation. >>>> - alternatively, in the client handle cases with more than 2000 >>>> columns, >>>> splitting the storage up into two (or more) tables >>>> >>>> Any advise, experience - or more specifics on the "O(N²)" remark are >>>> highly >>>> welcome! >>>> >>>> Thanks for your help - Stefan >>>> -- >>>> View this message in context: >>>> http://old.nabble.com/Limitation-on-Column-count-tp27117364p27117364.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 >>>> >>> >>> >>> >>> -- >>> VerifEye Technologies Inc. >>> 905-948-0015x245 >>> 7100 Warden Ave, Unit 3 >>> Markham ON, L3R 8B5 >>> Canada >>> _______________________________________________ >>> sqlite-users mailing list >>> sqlite-users@sqlite.org >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >>> >> >> -- >> View this message in context: >> http://old.nabble.com/Limitation-on-Column-count-tp27117364p27131144.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 >> > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- View this message in context: http://old.nabble.com/Limitation-on-Column-count-tp27117364p27135309.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