I see two approaches here. The first is partitioning as it has been suggested, except partitions need to be defined upfront, if I'm not mistaken, at least in MySQL (expression + size), whereas in PostgreSQL you need custom triggers on write operations on the main table, so I'm not sure if per-customer partitioning would work as that would require rewriting the triggers each time a customer is added or removed.

Perhaps time-based partitioning is better, e.g. monthly so you have 12 partitions. Or anything else with fixed number of partitions.

The other approach, which can be combined with partitioning, is pivot tables and/or materialized views, especially if you need graphing. You can have triggers that update hourly, daily, weekly, monthly pivot data which is used for graphing, and you actually select through main log data only if you need to recreate the pivot data or look for particular record.

Unless I misunderstood the original intent?




On 07/01/2012 12:49 PM, Wolfgang Keller wrote:
Having a single table to store all the customer's logs didn't seem to
work because when the device is removed and the logs have to be
deleted the table gets locked for a while.
Huh? Bad choice of DBMS/OS? Bad application design?

My question is, is this a good idea? Am I missing something?
I would go for one table for all customers, but for _partitioning_ the
log table into one partition per customer.

A database such as e.g. PostgreSQL running on an operating system that
knows how to combine multitasking and I/O (read: _not_ MS Windows)
should be perfectly capable of serving clients while deleting an entire
table partition.

Sincerely,

Wolfgang



--

.oO V Oo.

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to