Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Как лучше хранить исторические данные?  [new]
G.Collector
Member

Откуда: Москва
Сообщений: 74
Всем доброго дня.

Имеется таблица с полями:
  • ид
  • дата
  • метрика
  • значение

    Жирные - составной первичный ключ.

    В таблицу в день попадает под 200-300 записей.

    Сейчас используется PostgreSQL с еженедельным партицированием на основе наследуемых таблиц и кластерными индексами для заверешнных партиций по полям ид и дата.

    В принципе, работает вполне быстро. Существуют какие-нибудь более интересные варианты?
  • 7 сен 17, 16:16    [20779216]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    G.Collector,

    трудно сказать, Вы же свои цели не обозначили

    а Вы что ради 1500 записей делаете новую партицию? я бы только с десятка миллионов начал задумываться
    7 сен 17, 17:35    [20779528]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    G.Collector
    Member

    Откуда: Москва
    Сообщений: 74
    SergSuper,

    простите, ошибся. Имел в виду 200-300 тысяч

    цели:
    - регулярные выборки метрик по диапазону дат
    - регулярные выборки последних N записей для ид->метрики
    7 сен 17, 18:09    [20779637]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    G.Collector,

    ну как бы тут очевидно что составной первичный индекс не нужен - первичный должен быть только по id
    и должен быть индекс по date

    хотя возможно в первичный индекс стоит включить метрику (для второго запроса) если больше никакие поля в запросе не учавствуют
    7 сен 17, 18:55    [20779724]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    Yo.!
    Guest
    G.Collector
    В принципе, работает вполне быстро. Существуют какие-нибудь более интересные варианты?

    у постгрес 9 по сути нет partitioning, то что они обозвали партишенингом через check constraints + trigger работает. терминами оракла это partitioned views. так что некст левел это будет платная субд с честным партишенингом, а после него что нибудь из бигдаты. в мире DWH модно сейчас исторические данные на hdfs (читай в hadoop) хранить. я бы поставил докер с one node hadoop cluster, дешевого и гарантированно postgres обгонит на такой задачке уже на одном сервере.
    8 сен 17, 10:16    [20780929]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    Yo.!,

    а оно тут надо на таких объемах? я бы например и partitioning даже не делал


    самое главное же забыл топикстартеру сказать - если оно нормально работает - не трогай
    8 сен 17, 10:50    [20781111]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    PgSQLanonymous3
    Member

    Откуда:
    Сообщений: 121
    Yo.!
    G.Collector
    В принципе, работает вполне быстро. Существуют какие-нибудь более интересные варианты?

    у постгрес 9 по сути нет partitioning, то что они обозвали партишенингом через check constraints + trigger работает. терминами оракла это partitioned views.
    Вы не могли бы пояснить, в чём разница на практике (с Oralce не знаком)?

    Yo.!
    так что некст левел это будет платная субд с честным партишенингом, а после него что нибудь из бигдаты.
    А что такое "честный" partitioning?

    Yo.!
    в мире DWH модно сейчас исторические данные на hdfs (читай в hadoop) хранить. я бы поставил докер с one node hadoop cluster, дешевого и гарантированно postgres обгонит на такой задачке уже на одном сервере.
    Адекватные сравнения можно где-нибудь посмотреть?
    8 сен 17, 10:53    [20781132]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    Yo.!
    Guest
    SergSuper
    а оно тут надо на таких объемах? я бы например и partitioning даже не делал

    за пару лет 200М+ записей я бы делал, если нет планов через пару лет свалить и переложить ответственность на наследников


    PgSQLanonymous3
    Вы не могли бы пояснить, в чём разница на практике (с Oralce не знаком)?

    в том что у PG все тогда идет через дергание CHECK constraint и SQL engin'a, честный как у оракла через gobal index работает.

    Yo.!
    Адекватные сравнения можно где-нибудь посмотреть?

    пояснения в сравнении оракла и мсск2000 можно смотреть, вот тут
    http://www.oracle.com/technetwork/database/database-technologies/performance/twp-perf-oracle-3.pdf

    в мсскл2005 уже честный партишенинг появился, а до 2005 мсскл тоже на CHECK constraints мутил
    8 сен 17, 11:39    [20781289]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    Yo.!
    Guest
    как я понял PG честный партишенинг называет Declarative Partitioning и обещает в конце 2017 выкатить (в 10й версии)
    8 сен 17, 11:46    [20781316]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    PgSQLanonymous3
    Member

    Откуда:
    Сообщений: 121
    Yo.!
    в том что у PG все тогда идет через дергание CHECK constraint и SQL engin'a, честный как у оракла через gobal index работает.
    http://www.oracle.com/technetwork/database/database-technologies/performance/twp-perf-oracle-3.pdf
    Познавательно, спасибо.

    PgSQLanonymous3
    Адекватные сравнения можно где-нибудь посмотреть?
    Я имел в виду c "one node hadoop cluster".
    Yo.!
    как я понял PG честный партишенинг называет Declarative Partitioning и обещает в конце 2017 выкатить (в 10й версии)
    Нет, это "те же яйца, вид сбоку". Из документации: "Individual partitions are linked to the partitioned table with inheritance behind-the-scenes".
    8 сен 17, 12:45    [20781520]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    Yo.!
    Guest
    PgSQLanonymous3
    Я имел в виду c "one node hadoop cluster".


    с one node кажется не видел, это скорее из своего опыта. я на своем десктопе хорошо погонял в vmware (16g ram) имиджи от cloudera и hortonworks, такого рода SQL запросы на parquet файлики обгоняли оракл SE га том же десктопе в разы.

    PgSQLanonymous3
    Нет, это "те же яйца, вид сбоку". Из документации: "Individual partitions are linked to the partitioned table with inheritance behind-the-scenes".

    похоже на то, а я наивный пару слайдов посмотрел и решил, что Declarative Partitioning отменит тригеры ...
    8 сен 17, 14:16    [20781880]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    tip78
    Member

    Откуда: Москва
    Сообщений: 1266
    G.Collector
    Всем доброго дня.

    Имеется таблица с полями:
  • ид
  • дата
  • метрика
  • значение

    Жирные - составной первичный ключ.

    В таблицу в день попадает под 200-300 записей.

    Сейчас используется PostgreSQL с еженедельным партицированием на основе наследуемых таблиц и кластерными индексами для заверешнных партиций по полям ид и дата.

    В принципе, работает вполне быстро. Существуют какие-нибудь более интересные варианты?

  • у PG есть тип данных - ranges, где можно хранить даты ОТ - ДО
    и даже специальный индекс под них - GiST:
    CREATE INDEX ON users USING GIST(tstzrange(created_at,deleted_at));
    

    а также операторы разные, типа: @> (содержит диапазон) int4range(2,4) @> int4range(2,3)
    8 сен 17, 15:26    [20782238]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 53057
    G.Collector
    В таблицу в день попадает под 200-300 записей.

    В принципе, работает вполне быстро. Существуют какие-нибудь более интересные варианты?

    Чел... у тебя вообще все в шоколаде.

    Ничего делать не надо. Реально ничего!

    Вот если-б по 200-300 млн каждый день... тогда-б надо было-б прокашлять варианты стореджа.
    13 сен 17, 21:46    [20794034]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    д0kХ
    Guest
    PgSQLanonymous3
    А что такое "честный" partitioning?


    Честный партишионинг, это когда в СУБД есть команда
    которая за 0.х сек отстегивает от таблицы партицию
    в другую таблицу, не перемещая данные физически по датафайлам,
    а манипулируя только системными метаданными о объектах БД.
    24 сен 17, 03:07    [20818638]     Ответить | Цитировать Сообщить модератору
     Re: Как лучше хранить исторические данные?  [new]
    PgSQLanonymous3
    Member

    Откуда:
    Сообщений: 121
    д0kХ
    Честный партишионинг, это когда в СУБД есть команда
    которая за 0.х сек отстегивает от таблицы партицию
    в другую таблицу, не перемещая данные физически по датафайлам,
    а манипулируя только системными метаданными о объектах БД.

    Давно есть:
    ALTER TABLE measurement_y2006m02 NO INHERIT measurement;
    
    Так что, наверное, речь о чём-то другом.
    24 сен 17, 10:46    [20818750]     Ответить | Цитировать Сообщить модератору
    Все форумы / Сравнение СУБД Ответить