powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять про varchar(n)
25 сообщений из 173, страница 5 из 7
Опять про varchar(n)
    #38724716
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

я имел ввиду, что такой способ сортировки не всегда выигрывает у сортировки всего кортежа. Для некоторых случаев результат оказывался хуже по времени. По всей видимости оценки стоимости для выбора когда и какой алгоритм применять в той сборке не было.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725044
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис1. На фига индекс по длинной предлинной строке
Миллион коротких строк, и одна длинная.
Симонов Денис2. На фига сортировать по длинной предлинной строке
Я не сортирую по длинной. Я сортирую миллион строк по 20-30 символов, и только одна строка там 2000. Не возникает вопроса, нафига движок выделяет по 2000 на все строки? Это между прочим 2GB памяти вместо 30MB. Я, глядя на эти цифры, отнёс бы это к категории "фатальный недостаток" :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725072
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeНе возникает вопроса, нафига движок выделяет по 2000 на все строки?
я ведь тебе уже объяснял. ты не читаешь, или не врубаешься алгоритмически?
16433843 и 16434091
хотя бы второе прочитай. фиксированная сортировка это PLAN SORT. Сортировка "по указателям" - PLAN ORDER. У обоих свои недостатки, противоположные на разных объемах данных и на разной "уникальности" результата.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725081
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvNickDeeНе возникает вопроса, нафига движок выделяет по 2000 на все строки?
я ведь тебе уже объяснял. ты не читаешь, или не врубаешься алгоритмически?
16433843 и 16434091
хотя бы второе прочитай.я ведь уже объяснял это. ты не читаешь, или не врубаешься алгоритмически?
16434256
хотя бы почитай, уже :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725123
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee 16434256
хотя бы почитай, уже :)
читал. в ФБ сортировка и идет блочно, только не строятся пойнтеры, а сразу сортируются блоки. Так что, если я правильно понял твою идею, по реализации она проиграет тому, что есть сейчас.
И, сортировка слиянием тоже используется в ФБ, это когда в плане написано PLAN MERGE (SORT...

http://www.ibase.ru/devinfo/dataaccesspaths.htm#chapter22
Алгоритм сортировки представляет собой многоуровневую быструю сортировку (quick sort). Набор входных записей помещается во внутренний буфер, после чего он сортируется и блок перемещается во внешнюю память. Далее таким же образом заполняется следующий блок и процесс продолжается до окончания записей во входном потоке. После чего заполненные блоки вычитываются и по ним строится бинарное дерево слияния. При чтении из фильтра сортировки происходит разбор дерева и слияние записей в один проход.

или я не понял, и твой метод сильно отличается? я вот пару раз перечитал, и не понял (может, из-за ночного времени), зачем сортировать пойнтеры, а потом переливать записи в их порядке, если в блоке записи и так можно отсортировать.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725130
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvя вот пару раз перечитал, и не понял (может, из-за ночного времени), зачем сортировать пойнтеры, а потом переливать записи в их порядке, если в блоке записи и так можно отсортировать.
Про поинтеры просто. Процессору быстрей поменять местами два четырех-байтных значения(поинтера), чем поменять местами два буфера. Причём разница в скорости пропорциональна размеру буфера, т.е. поменять местами два поинтера будет в ~1000 раз быстрей чем поменять два буфера размером по 4000. Поэтому буфера не перемещают. А раз мы перемещаем только ссылки, тогда допускается разный размер буферов под каждую запись.
Влад говорит что сортируются указатели:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=668484&msg=7253772 Сортировка в FB сделана не совсем так, как описал КДВ. Те, кто в курсе про внешнюю сортировку с многопутевым слиянием на диске, дальше может не читать.

Итак, как оно там внутри (на пальцах) :

Есть буфер сортировки в памяти. В него поступают записи для сортировки. Длина ключа (то, что сравнивается) меньше длины записи сортировки. И длина ключа, и длина записи всегда фиксированного размера. Как только буфер заполнен, его содержимое сортируется quick sort'ом. Перемещаются только указатели на записи.

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

Когда все данные из потока выбраны, мы имеем N упорядоченных блоков во временном файле. Берём из него 8 блоков и сортируем их сортировкой слиянием. Упорядоченный результат пишем в тот-же временный файл. И т.д. В конце получаем тот же файл с N1 = N / 8 блоков бОльшего (в 8 раз) размера. Повторяем до тех пор, пока Ni > 8. После этого можно выдавать записи из оставшихся Ni блоков "наружу", есс-но сортируя их слиянием.


Теперь, куда тут можно попробовать прикрутить компрессию.

Блоки на диске образованы из записей сортировки фиксированной длины. Поэтому работа с такими блоками весьма проста. Я думаю, что вполне можно сжимать эти записи каким-нибудь лёгким алгоритмом, конечно добавив заголовок с длиной записи. При длине записи сортировки в несколько раз превышающей длину ключа вполне можно получить выигрыш в IO, несколько потеряв в CPU.
Из заболденного делаю вывод что внутри блока перемещаются НЕ записи, и таким образом фиксированные буфера нам для сортировки не нужны.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725526
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВлад говорит что сортируются указатели:
значит, сортировка в ФБ работает именно так, как ты и хотел.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38725661
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvзначит, сортировка в ФБ работает именно так, как ты и хотел.Как это ? А вот же, дальше:hvladКогда все данные из потока выбраны, мы имеем N упорядоченных блоков во временном файле. Берём из него 8 блоков и сортируем их сортировкой слиянием. Упорядоченный результат пишем в тот-же временный файл. И т.д. В конце получаем тот же файл с N1 = N / 8 блоков бОльшего (в 8 раз) размера. Повторяем до тех пор, пока Ni > 8. После этого можно выдавать записи из оставшихся Ni блоков "наружу", есс-но сортируя их слиянием.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38726079
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидkdvзначит, сортировка в ФБ работает именно так, как ты и хотел.Как это ? А вот же, дальше:hvladКогда все данные из потока выбраны, мы имеем N упорядоченных блоков во временном файле. Берём из него 8 блоков и сортируем их сортировкой слиянием. Упорядоченный результат пишем в тот-же временный файл. И т.д. В конце получаем тот же файл с N1 = N / 8 блоков бОльшего (в 8 раз) размера. Повторяем до тех пор, пока Ni > 8. После этого можно выдавать записи из оставшихся Ni блоков "наружу", есс-но сортируя их слиянием.
Это не требует фиксированных буферов. Я хотел именно этого.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727082
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в PostgreSQL есть ещё резиновый NUMERIC:
http://www.postgresql.org/docs/9.3/interactive/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL Both the maximum precision and the maximum scale of a numeric column can be configured. To declare a column of type numeric use the syntax:
NUMERIC(precision, scale)
The precision must be positive, the scale zero or positive. Alternatively:
NUMERIC(precision)
selects a scale of 0. Specifying:
NUMERIC
without any precision or scale creates a column in which numeric values of any precision and scale can be stored, up to the implementation limit on precision. A column of this kind will not coerce input values to any particular scale, whereas numeric columns with a declared scale will coerce input values to that scale. (The SQL standard requires a default scale of 0, i.e., coercion to integer precision. We find this a bit useless. If you're concerned about portability, always specify the precision and scale explicitly.)
Note: The maximum allowed precision when explicitly specified in the type declaration is 1000; NUMERIC without a specified precision is subject to the limits described in Table 8-2 .
В Table 8-2 написано:
range for NUMERIC without a specified precision = up to 131072 digits before the decimal point; up to 16383 digits after the decimal point .Зачем им такие длинные числа? Им наверное они не нужны. Но могут пригодиться некоторым пользователям :)
Нужно ли говорить что для этих чисел доступны все математические операции? Наверняка.
Можно ли говорить что это работает медленней чем у нас? Не факт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
-- У них:
select sum(11326547676634534576.3123455766578651239876554354::numeric(1000, 500)) from t -- миллион записей
--
1,22 sec

select sum(11326547676634534576.3123455766578651239876554354::numeric) from t
--
1,33 sec

select sum(12345.678::numeric(18, 3)) from t
--
1,01 sec

select sum(12345.678::numeric) from t
--
1,01 sec

-- У нас:
select sum(cast(12345.678 as numeric(18, 3))) from t
--
------ Информация о производительности ------
Время подготовки запроса = 47ms
Время выполнения запроса = 1s 451ms
Среднее время на получение одной записи = 1 451,00 ms
Current memory = 677 102 652
Max memory = 677 400 680
Memory buffers = 40 960
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 6 019 808


Но нам нельзя резиновый NUMERIC, т.к. мы не умеем эффективно хранить и обрабатывать резиновые типы.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727090
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,
(тихим шепотом)
это всё прекрасно, конечно: числа вида power(10, 100500), длинная арифметика, просторы вселенной...
но я на тут на одном заборе прочитал такую злостную клевету, что у них:
1) нет автономных тнранзакций внутри ХП (или как там по-ихнему... "функций" ?);
2) нельзя вытащить данные из другой базы (как в ФБшном ES on ext data source);
3) нет встроенного аудита операций с базой (только сторонние решения)

Это действительно до сих пор так ?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727106
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидNickDee,
(тихим шепотом)
это всё прекрасно, конечно: числа вида power(10, 100500), длинная арифметика, просторы вселенной...
но я на тут на одном заборе прочитал такую злостную клевету, что у них:
1) нет автономных тнранзакций внутри ХП (или как там по-ихнему... "функций" ?);
2) нельзя вытащить данные из другой базы (как в ФБшном ES on ext data source);
3) нет встроенного аудита операций с базой (только сторонние решения)

Это действительно до сих пор так ?

Я не в курсе про это :) Мне не нравится что там нет Embedded-версии. И что таблицы не в одном файле. Но вот их резиновые типы мне понравились. А у нас мне не нравится 31 символ на имя, и небольшая инертность мышления у передовой части сообщества по некоторым вопросам :) Ну и двойные стандарты ингода: тут действуем по стандарту потому что "это же sql-стандарт!", а тут действуем не по стандарту потому что считаем что так удобно :) Ещё не нравится что кто-то наверху всё время самообманывается по поводу времени выхода тройки, и тем самым вводит сообщество в заблуждение, и тем самым вызывает порцию недоумения и недоверия у ожидающих когда подходит очередной срок.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727126
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как постепенно уходящий от FB в Postgres могу сказать про вытаскивание из другой базы: оно есть.

http://www.postgresql.org/docs/9.2/static/dblink.html dblink is a module which supports connections to other PostgreSQL databases from within a database session.

Что мешает написать свою ХП, которая будет возвращать наборы данных из совсем других баз, не знаю. Там есть полноценные Питон и Перл.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727132
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. SakКак постепенно уходящий от FB в Postgres...А чего уходите? Не комфортно стало?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727164
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak> Как постепенно уходящий от FB в Postgres

Можно поподробнее на эту тему? Причины, описание самого процесса
(с перечнем технологий и библиотек, если несложно), впечатления и пр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727253
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИХМО, самый главный недостаток PG в том что в нём функции могут стать инвалидными после изменения метаданных и он никак это не сообщит. Т.е. без труда позволяется такой DDL который делает функции не работоспособными, и в отличии от ORA статусов инвалид/не инвалид нету.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727319
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисИХМО, самый главный недостаток PG в том что в нём функции могут стать инвалидными после изменения метаданных и он никак это не сообщит. Т.е. без труда позволяется такой DDL который делает функции не работоспособными, и в отличии от ORA статусов инвалид/не инвалид нету.
Там наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeНам ведь именно это нужно, правда?
Нет, маниловщина нам ни к чему. Нам нужны кодеры, которые смогут влить эти чужие
достоинства в наш код.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727328
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeНам ведь именно это нужно, правда?
Нет, маниловщина нам ни к чему. Нам нужны кодеры, которые смогут влить эти чужие
достоинства в наш код.

Сколько кодеров прошло по этому пути за последние 7 лет?
И где они все сейчас?
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727330
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeТам наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :)

ИХМО, из всех достоинств PG ты выбрал самые не значимые.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727334
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисNickDeeТам наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :)

ИХМО, из всех достоинств PG ты выбрал самые не значимые.
Я выбрал те, где у нас слабости в реализации, в результате чего идёт неоправданный расход ресурсов компа.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727338
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeСимонов Дениспропущено...


ИХМО, из всех достоинств PG ты выбрал самые не значимые.
Я выбрал те, где у нас слабости в реализации, в результате чего идёт неоправданный расход ресурсов компа.
Но ещё увидел резиновый numeric, увидел timestamp в utc, увидел многообразие типов индексов, партиции, возможность подключения своих языков, наследование. Наследование - прикольная штука :)
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727343
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeещё увидел
Повторяю вопрос медленно: кодить всю эту хрень ты будешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727348
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

я чего то тебя не пойму. Ну увидел ты где то фичу новую, ну захотел её - так создай тикет и жди пока реализуют (если конечно реализуют) или сделай сам. Или ты нас пытаешься сейчас убедить, что это архиважные штуки и разработчикам FB надо срочно всё бросить и заниматься этой фигнёй?

P.S. Ты ещё Оракл посмотри. По количеству фич он наверное уделает все вместе взятые СУБД. Давай всё в FB перетащим.
...
Рейтинг: 0 / 0
Опять про varchar(n)
    #38727354
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисNickDee,

я чего то тебя не пойму. Ну увидел ты где то фичу новую, ну захотел её - так создай тикет и жди пока реализуют (если конечно реализуют) или сделай сам. Или ты нас пытаешься сейчас убедить, что это архиважные штуки и разработчикам FB надо срочно всё бросить и заниматься этой фигнёй?
Ты наверное не заметил, но проблема не в том, что нет времени реализовать. А в том, чтобы видеть косяки.
Когда есть проблема реализовать, то говорится что фича хорошая, но нет времени. А у нас это звучит так: "фича пользователям не нужна", и предлагаются пути для обхода. А должно быть так: фича пользователям нужна, но пока нет ресурсов, и вот вам, пользователи, пути для обхода... И без пены у рта. Нефиг в сообществе лукавость разводить и считать пользователей дебилами.
...
Рейтинг: 0 / 0
25 сообщений из 173, страница 5 из 7
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Опять про varchar(n)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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