metaclass: (Default)
[personal profile] metaclass
А вот что бывает когда реляционные БД ставят в несвойственную им позу и нет моральных ограничений (потому что кодогенерация):
...
FROM REPLTRANS
  join ChangeLog 
   left join TransactsLog tlog on tlog.TRANSACTS_CHL_ID=CHL_ID
   left join TransactsLink tlnk 
     join Transacts tr on tr.TR_ID_BASEID=tlnk.TR_ID_BASEID and
                          tr.TR_ID_LOCALID=tlnk.TR_ID_LOCALID
     left join Transacts tr_old on tr_old.TR_ID_BASEID=tr.TR_ID_BASEID_PV and
                                   tr_old.TR_ID_LOCALID=tr.TR_ID_LOCALID_PV
    on tlnk.TRANSACTS_CHL_ID=CHL_ID
   left join FillingsLog filllog 
    join Customers cst1 on cst1.Cst_ID=filllog.FILL_Customer
   on filllog.FILLINGS_CHL_ID=CHL_ID 
   left join FillingsLink filllnk 
    join Fillings fill 
      join Customers cst2 on cst2.Cst_ID=fill.FILL_Customer
     on fill.FILL_ID_BASEID=filllnk.FILL_ID_BASEID and
        fill.FILL_ID_LOCALID=filllnk.FILL_ID_LOCALID
    on filllnk.FILLINGS_CHL_ID=CHL_ID  
  on (CHL_TRANS=REPLTR_BEGID+0)
  join ReplTables on REPLTBL_ID=CHL_TABLE_ID
...


кусок запроса "получить информацию об последних изменениях в БД, поддерживающей хранение всей истории изменений".

Ситуация вообще в следующем:
1) Фактически я храню в БД персистентный граф, но морально отказаться от RDBMS/SQL и переписывать все с нуля я не готов. За вопросами - к [livejournal.com profile] plumqqz, он вам расскажет, что думает за неосиливших СУБД.
2) N+1 запрос вообще и для Firebird в частности (сетевой протокол, лаги) - печаль. А то я бы всю сложность выкинул на клиента и там на F# собрал бы все что нужно. Впрочем, сервер и клиент (сервис-считалка) стоят рядом, ничего страшного, по идее, быть не должно.
3) В Firebird пока нет возможности сунуть код на произвольном языке в БД (как это есть у Postgres например)


PS: выяснил, чего сервер раком становится от таких запросов. Там дальше сортировка, не сводимая к чтению по индексам. Поэтому он начинает дичайше писать в временные файлы результат запроса и далее его читать. И файл размером 2 гига, внезапно, со скоростью 100 мег в секунду это таки 20 секунд на запись и потом хз сколько еще на фетч.

Date: 2012-06-13 09:41 am (UTC)
From: [identity profile] skif-by.livejournal.com
Судя по количеству комментариев, тебя никто не понял :)

Date: 2012-06-13 09:47 am (UTC)
From: [identity profile] vk11.livejournal.com
просто все ушли на фронт за вопросами к plumqqz

Date: 2012-06-13 09:44 am (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Запрос вроде как запрос, ничего такого.

Date: 2012-06-13 10:39 am (UTC)
From: [identity profile] falcrum.livejournal.com
Когда в табличках по три записи - ничего такого. Когда их там по три миллиона - такое чего. :)

Date: 2012-06-13 10:46 am (UTC)
From: [identity profile] tzirechnoy.livejournal.com
На индэксах -- везде O(log2n) скорость будет. В общем, тожэ ничего.

Date: 2012-06-13 10:56 am (UTC)
From: [identity profile] molnij.livejournal.com
Просто в какой-то момент прийдется немножко научить кодогенератор писать запросы покрасивше для базы.

Date: 2012-06-13 10:06 am (UTC)
From: [identity profile] molnij.livejournal.com
А где смеятся?
это большой страшный запрос чтоле?

Date: 2012-06-13 12:53 pm (UTC)
From: [identity profile] vp.livejournal.com
В смысле, что методика оптимизации скорости выполнения запроса несколько выпала вообще из SQL и перешла в аппаратно-программную плоскость. Такое обычно не часто бывает.

Date: 2012-06-14 02:27 am (UTC)
From: [identity profile] molnij.livejournal.com
Интересная мысль, тем не менее для любимого сервера я не раз сталкивался с точкой, после которой оптимизацией все-таки приходилось заниматься мне. Ну и к слову, оптимизация уже очень много где перешла на уровень компиляторов-интерпретаторов (во многом будучи скрытой возросшей производительностью)
С другой стороны в представленном запросе банальные джойны, еще и по, надеюсь, индексированным полям. Тут оптимизировать разве что порядок соединений.

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-14 04:42 am (UTC) - Expand

Date: 2012-06-13 10:23 am (UTC)
From: [identity profile] nivanych.livejournal.com
> морально отказаться от RDBMS/SQL

А что такое "морально отказаться"?

Date: 2012-06-13 10:42 am (UTC)
From: [identity profile] w00dy.livejournal.com
всякие носакли, как я понимаю.

Date: 2012-06-13 10:40 am (UTC)
From: [identity profile] berezovsky.livejournal.com
бля, прочитал белтрансгаз :-/

Date: 2012-06-13 11:04 am (UTC)
From: [identity profile] metaclass.livejournal.com
Хм. Тызнал.

Date: 2012-06-13 11:42 am (UTC)
From: [identity profile] nivanych.livejournal.com
Белтрансмон!

Date: 2012-06-13 12:04 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
хуй пизда белтелеком

Date: 2012-06-13 10:42 am (UTC)
From: [identity profile] avnik.livejournal.com
Возьми питон и zodb, будет тебе персистентный граф.

PS Код в базе -- он у тебя будет "разъезжаться" с кодом в в гите (или чем тебе пауки велят пользоваться)

Date: 2012-06-13 11:04 am (UTC)
From: [identity profile] metaclass.livejournal.com
Не будет. В базу он попадает в самую последнюю очередь, со ссылкой на тикет и ревизию в vcs

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 11:28 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 11:30 am (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 11:45 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 11:46 am (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 11:47 am (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 06:22 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 12:18 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 12:45 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 12:50 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 12:52 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 12:58 pm (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-06-13 12:54 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 12:55 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 11:45 am (UTC) - Expand

Date: 2012-06-13 11:23 am (UTC)
From: [identity profile] justy-tylor.livejournal.com
А какой получается размер баз для этого ада? В данном случае, и вообще для клиентской опердени, с которой приходилось сталкиваться.

Date: 2012-06-13 11:27 am (UTC)
From: [identity profile] metaclass.livejournal.com
Гиг 25 сейчас схожая опердень.

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: 2012-06-13 11:32 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 11:33 am (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: 2012-06-13 12:37 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 12:38 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 12:46 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 12:55 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-06-13 01:07 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-06-13 12:51 pm (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: 2012-06-13 01:11 pm (UTC) - Expand

Date: 2012-06-13 11:24 am (UTC)
From: [identity profile] denisioru.livejournal.com
То что Firebird хуево работает с большим количеством джойнов это уже баян.

Date: 2012-06-13 11:29 am (UTC)
From: [identity profile] metaclass.livejournal.com
Оптимизатор плющится иногда. Но тут проблема не в нем - даже две таблицы из этого запроса и вызывают дичайший i/o на временных файлах.

(no subject)

From: [identity profile] denisioru.livejournal.com - Date: 2012-06-13 12:40 pm (UTC) - Expand

Date: 2012-06-13 12:42 pm (UTC)
From: [identity profile] kranov.livejournal.com
либо я не понял, либо вместо
сущноть, время_рождения_версии
надо хранить
сущноть, время_рождения_версии, время_смерти_версии

Date: 2012-06-13 12:54 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Вообще оптимизатор запросов к интервальным величинам в записях вроде не очень хорошо относится.

(no subject)

From: [identity profile] kranov.livejournal.com - Date: 2012-06-13 01:08 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-06-13 01:23 pm (UTC) - Expand

Date: 2012-06-13 02:00 pm (UTC)
From: [identity profile] guamoka.livejournal.com
Как в Простоквашино. Вы сгенерировали запрос. Теперь полгода вы его еще будите хинтовать.

Date: 2012-06-13 06:58 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Ну вы же видите сами, как оно происходит In Soviet Belarus — запросы хинтуют нашего уважаемого ребе!

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 2nd, 2025 03:21 pm
Powered by Dreamwidth Studios