powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / QuestDB - новая СУБД для хранения time series данных
25 сообщений из 239, страница 6 из 10
QuestDB - новая СУБД для хранения time series данных
    #39899304
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakЕсли запрос начал выполняться до того как писатель вызвал commit() то вернутся 1000
записей до начала писания первой записи этого миллиона. В независимости от текущего
положения и состояния писателя.

Ок. Задачка номер 2. Два коннекта одновременно добавляют по миллиарду записей. Как будут
расположены эти записи в базе:
а) Сначала миллиард первого, потом миллиард второго.
б) Вперемешку.

Каково поведение твоей базы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899317
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

bluestreakЕсли запрос начал выполняться до того как писатель вызвал commit() то вернутся 1000
записей до начала писания первой записи этого миллиона. В независимости от текущего
положения и состояния писателя.

Ок. Задачка номер 2. Два коннекта одновременно добавляют по миллиарду записей. Как будут
расположены эти записи в базе:
а) Сначала миллиард первого, потом миллиард второго.
б) Вперемешку.

Каково поведение твоей базы?


Если оба миллиарда содержат один commit() в конце - то сначала первый потом второй.

Если в таблице не определён timestamp, то обе транзакции войдут без проблем. Если timestamp определён, то база проверяет что данные в хронологическом порядке. Если нет - второй коннект получит ошибку.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakЕсли оба миллиарда содержат один commit() в конце - то сначала первый потом второй.

То есть полная сериализация: пока одна транзакция не завершилась - вторая не стартует?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899322
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

bluestreakЕсли оба миллиарда содержат один commit() в конце - то сначала первый потом второй.

То есть полная сериализация: пока одна транзакция не завершилась - вторая не стартует?


Если по одной таблице - да. Таблицы разные - заливаются полностью параллельно.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899323
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Скорее всего - никак. Это не юзкейс таймсерии....

Не угадал.
В базе даже специальное понятие ASOF JOIN ввели.

В общем, интересная штука. Если реально работает и к ней приделать удобную возможность DB LInk к "обычным" базам (Oracle), то в целом можно придумать более-менее осмысленные применения "в быту". Начина от бухгалтерии и биллинга ЖКХ.

Использовать в качестве основной базы данных никто не будет, но почему бы не использовать отдельно для работы/анализа/расчетов
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899325
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakЕсли по одной таблице - да.

И если первый клиент впал в кому или тихо скончался от электрической недостаточности на
100500-й записи из миллиона, вторая транзакция будет ждать... сколько?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899327
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

bluestreakЕсли по одной таблице - да.

И если первый клиент впал в кому или тихо скончался от электрической недостаточности на
100500-й записи из миллиона, вторая транзакция будет ждать... сколько?


Это кстати интересно. Сейчас транзакция откатывается если сокет отконнектился. Если впал в кому, то есть idle timeout, т.е. сервер закроет сокет со своей стороны и транзакцию с миллиардом откатит. Можно ещё ввести ограничения снизу на скорость заливки и длину открытой транзакции - это по запросам если необходимо.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899330
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakЕсли timestamp определён, то база проверяет что данные в хронологическом порядке.

То есть если мы вставили в такую таблицу (2019-12-05, 666), а потом решили, что это
ошибка, то изменить вставить (2019-12-05, 777) уже не получится? Надо будет убить
всю таблицу, а потом вставить её заново, с правильными данными.

bluestreakТаблицы разные - заливаются полностью параллельно.

Я так понимаю, ключи и прочая ссылочная целостность отсутствует как класс?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899331
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton

Скорее всего - никак. Это не юзкейс таймсерии....

Не угадал.
В базе даже специальное понятие ASOF JOIN ввели.

В общем, интересная штука. Если реально работает и к ней приделать удобную возможность DB LInk к "обычным" базам (Oracle), то в целом можно придумать более-менее осмысленные применения "в быту". Начина от бухгалтерии и биллинга ЖКХ.

Использовать в качестве основной базы данных никто не будет, но почему бы не использовать отдельно для работы/анализа/расчетов

Не могу найти ничего внятного по AS OF. Мы используем этот термин на производстве но смысл его несколько другой.
Больше относится би-темпоральному снимку мета-данных по состоянию на сейчас.

Можете привести пример ASOF JOIN. Обычно JOIN делают по ключам. В таймсериях ключи - обычно timestamp.
Достаточно уникальный и вещественный ключ. Каким образом мы можем его джойнить и какой физический
смысл на выходе мы получим.

Прошу вас не кидайте мне ссылки в литературу. У меня ее полно. Мне интересена ваша интерпретация этого смысла.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899335
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov


То есть если мы вставили в такую таблицу (2019-12-05, 666), а потом решили, что это
ошибка, то изменить вставить (2019-12-05, 777) уже не получится? Надо будет убить
всю таблицу, а потом вставить её заново, с правильными данными.


Если на ваш вопрос ответить коротко, то — получится, потому как время должно быть больше или равно... Убивать не надо.

Если по длиннее, то мы говорим о разных вещах. В OLTP системах когда данные вводятся в рукопашную, происходят ой и ай, время может быть просто системным а ключ записи органическим. В таких условиях поменять все ой и ай можно будет без проблем. Повторяйте ключ при вставке, задавайте новые значения полей, время шагает вперёд и все вставляется.

Dimitry Sibiryakov

Я так понимаю, ключи и прочая ссылочная целостность отсутствует как класс?



Понимаете правильно. Здесь проблема идеологического характера. Отторгать данные это плохая идея. Данные нужно собирать все что идут. Даже плохие данные могут быть полезно использованы. Я придерживаюсь мнения что ссылочная целостность с субд — устаревшее понятие. По этому в QuestDB отсутствует как класс
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899340
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Представьте что у вас есть таймсерия событий которые побуждают механизм, организм, устройство к действию. Так же у вас есть таймсерия действий этого устройства.

As of join позволяет соединить в одну запись действия устройства с событиями которые непосредственно предшествовали этим действиям.

Финансовый пример это котировки — события; и сделки — действия
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899343
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

4.
Не очень понятно, как работают(должны работать) JOIN двух и более time series.

Вообще, отличает ли СУБД join'ы:
1) time series с не time series (пример из туториала соединение справочника датчиков и измерений)
2) join time series с time series одинаковой размерности
3) join двух time series с разными размерностями, приводить размерность одних тайм серий к другим


Я надеюсь с join достаточно было ссылки на доку? Сообщите если нет...
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899344
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,


Например есть тайм серия минутных баров, есть времени работы биржи, есть сплит акций

Мы хотим выбрать данные за 2015 год и получить максимальную цену на каждый день, на момент закрытия биржи, при этом с учетом сплита который произошел 01.03.2015 9:00.
(т.е. цену до 01.03.2015 9:00 нужно умножить в два раза)

Как должны выглядеть таблицы и какой должен быть запрос?



Если цены top of book, то таблица могла бы выглядеть так:

Код: plaintext
1.
create table quotes (ts timestamp, sym symbol, bid long, ask long, src symbol) timestamp(ts) partition by month

Если мы предположим что QuestDB может использовать произвольный календарь, то запрос был бы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select 
  ts, 
  sym, 
  case 
       when ts < to_timestamp(‘did.mm.yyyy H:mm z’, ‘01.03.2015 9:00 MSK’) 
       then bid*2 
       else bid 
  end bid,

  case 
       when ts < to_timestamp(‘did.mm.yyyy H:mm z’, ‘01.03.2015 9:00 MSK’) 
       then ask*2 
       else ask
  end ask

  from (
     select ts, , max(bid) bid, min(ask) ask from quotes sample by calendar(‘my fancy calendar’, ‘1d’)
  )


Но поскольку calendar(‘my fancy calendar’, ‘1d’) пока нет, замените на 1d
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899416
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakПо этому в QuestDB отсутствует как класс

Вот об этом я и говорил: полное отсутствие фич, которые делают другие СУБД сложными,
упрощает разработку узкоспециализированного решения до тривиальности.

Опять же к вопросу о транзакциях:
одна делает insert into a, inset into b, commit;
вторая делает insert into b, insert into a, commit;
получаем полный дедлок?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899426
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreak
mayton,

Представьте что у вас есть таймсерия событий которые побуждают механизм, организм, устройство к действию. Так же у вас есть таймсерия действий этого устройства.

As of join позволяет соединить в одну запись действия устройства с событиями которые непосредственно предшествовали этим действиям.

Финансовый пример это котировки — события; и сделки — действия

На уровне определений я все равно не могу себе представить событие и действие как сущность.

Можете расписать какие поля есть в event, и action? И на основании какого алгоритма одно из них переходит в другое.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899430
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

bluestreakПо этому в QuestDB отсутствует как класс

Вот об этом я и говорил: полное отсутствие фич, которые делают другие СУБД сложными,
упрощает разработку узкоспециализированного решения до тривиальности.

Опять же к вопросу о транзакциях:
одна делает insert into a, inset into b, commit;
вторая делает insert into b, insert into a, commit;
получаем полный дедлок?..


Фичи по проверке целостности данных заключаются в построении деревьев и беганьем по ним туда сюда. Если говорить о сложности то я согласен, традиционные базы O(log n) как минимум по вставкам, QuestDB — O(1)

По поводу дедлок — блокировки, включая бесконечные, в questdb тоже отсутствуют как класс. Ваш пример вернёт ошибку даже без тайм-аута.

Вы сделали вывод о дедлоке потому что я сказал транзакции по одной таблице сериализованы?
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899438
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Давайте попробую, например событие это цена инструмента на рынке:

Код: plaintext
1.
2.
3.
4.
5.
6.
Quotes

sym, qbid, qask, qtime
USDCNY, 7.031, 7.029, 15:03
USDCNY, 7.029, 7.027, 15:04
USDCNY, 7.030, 7.028, 15:05

У вас есть электронная система которая формирует свои цены на основе рыночных. Задача такой системы не зевать и менять цены как только рынок изменился.

Например ваша система опубликовала:

Код: plaintext
1.
2.
3.
4.
Coreprice 

sym, bid, ask, time
USDCNY, 7.030, 7.028, 15:05


Код: plaintext
1.
2.
3.
4.
5.
coreprice asof join quotes on (sym)

sym, bid, ask, time, qbid, qask, qtime
USDCNY, 7.030, 7.028, 15:05, 7.029, 7.027, 15:04



Т.е на момент публикации цены вашей системой мы получаем самую свежую котировку (15:04)
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899448
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreak, а зачем нужно поле символа?

Мы такое - нормализуем к названию сущности.
типа

Код: sql
1.
2.
3.
4.
5.
create table USDCNY(
 qbid decimal, 
 qask decimal, 
 qtime timestamp
);



Под каждый символ - своя таймсерия.
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899453
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreakтрадиционные базы O(log n) как минимум по вставкам, QuestDB — O(1)

Традиционные базы способны быть O(log N) и по выборкам, а QuestDB - фиксированное O(N).

bluestreakВы сделали вывод о дедлоке потому что я сказал транзакции по одной таблице сериализованы?

Да. Но какую именно ошибку получит транзакция, пытающаяся вставить данные в две разные
таблицы и почему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899456
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Это как удобно, некоторые организации хранят все символы в одной таблице. Суть джоина не меняется (‘on’ не нужен в вашем случае)
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899466
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

QuestDB поддерживает индексы и оптимизатор вырулит правильный план если они есть...

Логика работы с таблицами такая: есть один writer и неограниченное количество reader‘ов, мы их оставим в покое, они никогда не блокируются.

Контекст, который получает writer для транзакции от engine хранит его у себя в списке, если контексту нужен ещё один writer то он опять лезет в engine с запросом. Engine может сказать «writer занят», в этом случае у контекста есть два варианта. Первый — жаловаться пользователю, второй — ждать.


Ожидание


1. Хотим добавить имя writer в список ожидания
2. Проверим что все writers которые у контекста уже есть не находятся в списке ожидания.
3. Не находятся — добавим наш writer в этот список
4. Какой-то «наш» writer в списке ожидания — ошибка, откат всего на свете
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899477
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у меня были такие таблички

Код: sql
1.
2.
3.
4.
5.
6.
QuotesUSDCNY

qbid, qask, qtime
7.031, 7.029, 15:03
7.029, 7.027, 15:04
7.030, 7.028, 15:05



Код: sql
1.
2.
3.
4.
CorepriceUSDCNY

bid, ask, time
7.030, 7.028, 15:06



Time, qtime - вещественная величина. Она может быть любой. Timestamp например может
фиксировать время прохождения IP пакета через сетевой интерфейс с точностью до микросекунд.

Как это джойнить? Какова вероятность что time/qtime совпадёт? Или там должно быть искусственное округление?

Преобразование ключа??
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899484
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

В отличий от реляционных join “asof” не использует равенство «=« для объединения. Совпадать ни количество записей ни значения времени в обоих таблицах не должно (необязательно). Так же нет округления времени.

Представьте что мы движемся по таблице corepriceUSDCNY в направлении возрастания времени и присоединяем первую запись из quotesUSDCNY время которой строго меньше времени текущей записи из corepriceUSDCNY
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899557
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bluestreak
В отличий от реляционных join “asof” не использует равенство «=« для объединения

Похоже, для Вас будет новостью, что реляционные джойны тоже не используют. И внезапно окажется, что писать новую базу было совершенно незачем
...
Рейтинг: 0 / 0
QuestDB - новая СУБД для хранения time series данных
    #39899564
bluestreak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

Похоже, для Вас будет новостью, что реляционные джойны тоже не используют. И внезапно окажется, что писать новую базу было совершенно незачем


Вы разрушили мой стеклянный мир :( приведите пример пожалуйста
...
Рейтинг: 0 / 0
25 сообщений из 239, страница 6 из 10
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / QuestDB - новая СУБД для хранения time series данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]