2015-03-10 7:02 GMT-07:00 Aln Kapa <alnkapa@gmail.com>:
> Есть 5000 устройств присылающих информация примерное 1 раз в секунду.
> Хранить информацию в доступном резерве надо около 3-х лет.
> Надо обеспечить быструю запись и приемлемый селект.
Софт-приёмник сохраняет поток в tab-separated текстовые файлы по
максимум N записей. Загрузчик периодически делает COPY FROM
завершенным файлам в таблицу postgres базы.
> Так вот как по вашему мнению лучше всего организовать хранение данных, в
> одной таблице с партицированием или создать по одной таблице на устройство.
>
> В основном будут COPY и SELECT только с одной из таблиц, запросы по
> нескольким таблицам будут, но их можно будет "подождать" не критично.
Партиции можно организовать как матрицу (hash(device_id), time_range).
Например, (device_id % 100, now()::date). Старые партиции, которые
страрше 3х лет, COPY TO PROGRAM gzip в архив и DROP TABLE.
Для партиционирования можно использовать вот этот тул
https://github.com/keithf4/pg_partman. Старые таблицы архивировать
можно вот этим https://github.com/grayhemp/pgcookbook/blob/master/bin/archive_tables.sh.
Архив чистить find /mnt/archive -mtime +2000 -type f -delete.
В дальнейшем, с ростом объёмов и потребностей, можно подумать о
https://github.com/citusdata/pg_shard.
--
Kind regards,
Sergey Konoplev
PostgreSQL Consultant and DBA
http://www.linkedin.com/in/grayhemp
+1 (415) 867-9984, +7 (499) 346-7196, +7 (988) 888-1979
gray.ru@gmail.com