|
|
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
В PostgreSQL есть тип varchar без указания длины. По производительности он быстрей чем char(n) и равен varchar(n): http://stackoverflow.com/questions/7320316/why-specify-a-length-for-character-varying-types Нам бы такой тоже не помешал, уже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, опять лень думать какую длину указывать? В FB такой тип есть и называется он BLOB. Производительность при работе с BLOB это уже второй вопрос. Сетевой протокол в FB 3 подкрутят (уж не знаю будут ли блобы быстрее передаваться). А вот с конкатенацией уже сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:27 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Опять хочется чтобы было по-человечески. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:33 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Hello, Nickdee! You wrote on 12 августа 2014 г. 14:36:53: Nickdee> Опять хочется чтобы было по-человечески. понятия человечности "здесь тут" и в "там у ***" очень разные. Модератор: Предупреждаю о вреде мата. Тем более в связи с опускающимся железным занавесом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeхочется чтобы было по-человечески. Звучит как "без необходимости применять мозг". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисПроизводительность при работе с BLOB это уже второй вопрос.Это делает его использование неприемлимым. Плюс отсутствие индексов по ним. А вот как хочется: http://www.postgresql.org/docs/9.3/static/datatype-character.html The storage requirement for a short string (up to 126 bytes) is 1 byte plus the actual string, which includes the space padding in the case of character. Longer strings have 4 bytes of overhead instead of 1. Long strings are compressed by the system automatically, so the physical requirement on disk might be less. Very long values are also stored in background tables so that they do not interfere with rapid access to shorter column values. In any case, the longest possible character string that can be stored is about 1 GB. (The maximum value that will be allowed for n in the data type declaration is less than that. It wouldn’t be useful to change this because with multibyte character encodings the number of characters and bytes can be quite different. If you desire to store long strings with no specific upper limit, use text or character varying without a length specifier, rather than making up an arbitrary length limit.) Tip: There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. While character(n) has performance advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of the three because of its additional storage costs. In most situations text or character varying should be used instead . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 14:43 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeTip: There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. Создай две таблицы: Код: plaintext 1. 2. Далее сделай какой-нить запрос с сортировкой и натрави его сначала на t1, затем на t2 (по-нескольку раз). Будет ли разница в произв-сти ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeThere is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. Маркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не может быть так же быстро. И, кстати, ты уже пробовал построить по нему индекс?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeхочется чтобы было по-человечески. Звучит как "без необходимости применять мозг". Ну допустим для ФИО я знаю что оно в 99.9999% случаев в 100 символов войдёт, GUID стопроцентно войдёт в 32. А вот во сколько символов уложится число произвольной длины уже не знаю (я понимаю, что хранить числа эффективней в бинарном виде). Возможно хватит varchar(1000), а возможно и varchar(32000) не хватит. Но в 99.9% случаев там будут лежать числа от 1 до 100 цифр. Пользователю предложим смириться с просадкой производительности у FB при работе с длинными варчарами? Или если у него вдруг иногда будут числа под сто тыщ цифр, то предложим ему BLOB? Но тогда он бонусом получит ещё просадку, в том числе и для коротких значений. Или просто предложим ему не хранить в БД длинные числа, чтобы производительность не страдала? :) Имхо должно быть так, чтобы на одних и тех же данных движок вёл себя одинаково, независимо от того какой там N у варчара прописан, и прописан ли. Это будет архитектурно-правильная позиция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, на кой тебе такие числа? Ты реально оперируешь с числами длинной 1000 цифр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:23 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeПользователю предложим смириться с просадкой производительности у FB при работе с длинными варчарами?В ссылке, которую вы привели разница накладных расходов между "длинными" и "короткими" varchar - три байта. Есть пример, который демонстрирует значимость этой разницы? Окромя "если три байта умножить на миллиард - будет три гигабайта"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:24 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, и самое интересное как с такими числами ты будешь производить различные операции (сложение, вычитание, умножение ...). Через ХП? Не боишься просадки производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:25 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВ PostgreSQL есть тип varchar без указания длины. По производительности он быстрей чем char(n) и равен varchar(n): ты только забыл, что раньше его длина все же была ограничена размером страницы, который у PG был (?) фиксированный, 8к. Вроде бы в свежих версиях уже это обошли, вопрос в том, как. В доке по постгресу эта фигня не упоминалась, люди просто напарывались на макс длину "безразмерных строк" в 8к. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:36 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovМаркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не может быть так же быстро. кстати, да, к сожалению, дока по PG этим страдает (см выше, и вроде есть другие штуки, которые тупо умалчиваются). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvDimitry SibiryakovМаркетинговое враньё. Читать данные, уложенные на отдельных страницах по определению не может быть так же быстро. кстати, да, к сожалению, дока по PG этим страдает (см выше, и вроде есть другие штуки, которые тупо умалчиваются). In any case, the longest possible character string that can be stored is about 1 GB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 15:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeIn any case, the longest possible character string that can be stored is about 1 GB. Так ты смог проиндексировать эту гигабайтную строку или нет? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:00 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeесли у него вдруг иногда будут числа под сто тыщ цифр, то предложим ему BLOB? updatable view уже вышли из моды ? Код: plaintext 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. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:00 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
sql.ru рекоммендует text вместо varchar(n). Короче потестировать нужно. Хотя постгревцы наверняка за 10 лет уже протестировали это. Хотя с другой стороны не факт, может они документации на слово верят, и втихую используют text не зная что он "на самом деле дико медленный, в чём неоднократно убеждались парни из FB-тусовки на примере использования движка FB" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:01 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, тебе Dimitry Sibiryakov правильный вопрос задаёт, проиндексируй строку размером в гигабайт и посмотри, что будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
ТаблоидNickDee, а ты зачем сделал вид, что ничего не увидел ? Я увидел :) Но я с postgreSQL только вчера начал, причём с документации. Сегодня-завтра может руки дойдут до ознакомления с тулзами и генерации тестовых данных с их помощью. А может и не дойдут так быстро. Вот тут есть кой-какие бенчмарки: http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Hello, Nickdee! You wrote on 12 августа 2014 г. 16:19:30: Nickdee> Но я с postgreSQL только вчера начал, причём с документации. > Сегодня-завтра может руки дойдут до ознакомления с тулзами и генерации > тестовых данных с их помощью. А может и не дойдут так быстро. с нетерпением ждём очередных "открытий чЮдных" и фичереквестов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
МимопроходящийHello, Nickdee! You wrote on 12 августа 2014 г. 16:19:30: с нетерпением ждём очередных "открытий чЮдных" и фичереквестов. только не это. Как по мне PG свалка всяких фич. Много полезных, но часть (их довольно много) на фиг некому не сдалось, кроме разве что экспериментаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:36 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeDimitry Sibiryakovпропущено... Звучит как "без необходимости применять мозг". Ну допустим для ФИО я знаю что оно в 99.9999% случаев в 100 символов войдёт, GUID стопроцентно войдёт в 32. А вот во сколько символов уложится число произвольной длины уже не знаю (я понимаю, что хранить числа эффективней в бинарном виде). Возможно хватит varchar(1000), а возможно и varchar(32000) не хватит. Но в 99.9% случаев там будут лежать числа от 1 до 100 цифр.что за числа такие, по 100 цифр? Вообще-то любая типизация данных (а задать макс. длину стринга - это тоже типизация), это в некотором роде ограничитель ошибок входных данных. Если данные - целое число, то пользователь никак не сможет ввести в БД символы. Если данные - ФИО, то попытка введения более 100 символов, очевидно будет ошибкой. Если надо ввести *большие* числа, то разработчику надо обязательно узнать, что это за числа, и их максимальный размер. Потому что, вообще говоря, некоторые большие числа нельзя записать не то что в базу данных, но и на существующие носители. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
S.G.что за числа такие, по 100 цифр?расстояние до Марса в миллиметрах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
S.G.что за числа такие, по 100 цифр?Факторизацией, наверное, занимаются :-) Только вопрос: причём тут СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 16:53 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
roadsterрасстояние до Марса в миллиметрах. На него хватит 18-ти. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 17:20 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Да и 15 хватит с запасом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 17:42 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВот тут есть кой-какие бенчмарки поскольку там разницы практически нет, мне это напомнило заявление сотрудника российского Оракла на Корпоративных Базах Данных лет 10 назад: - теперь заливка данных происходит в 10 раз быстрее! на что я из зала прокомментировал - "значит, до этого момента с заливкой данных было все совсем хреново". Народ поржал. Из теста по ссылке я делаю примерно аналогичный вывод - раз практически нет разницы между char, varchar и text, при разной фактической длине, то значит, реализация одинаково гове..ая. Ну или тест такой. Имеет смысл сравнить тот же тест с ФБ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Залил 10 записей в табличку с полем типа text(varchar без N). По 100 миллионов символов на запись. При create index была выдана ошибка: SQL Error: ОШИБКА: строка индекса требует байт: 1144712, при максимуме: 8191 Почему он поломался - я не знаю. Ведь можно было построить индекс по первым N символам (пусть даже по 8191, но я бы лучше задавал это N в create index), а остальные символы добывать из записи при непосредственном сравнении. Никто не хочет делать по-взрослому :) Или просто не придумали ещё... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:16 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
по крайней мере для индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. это в индексе. У нас тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, да, облом. причем, у нас ограничение на размер ключа в 1/4 страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:20 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee при максимуме: 8191 а я предупреждал. значит, "безразмерная строка" до сих пор не может превышать размер страницы. Я ж туда 100М текста залил в поле. А если бы заливал туда строки по 100 символов длиной, то и данные бы хранились по-другому и индекс бы создался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, гораздо интереснее что будет если ты сначала создашь индекс, а потом попробуешь залить 100М текста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:34 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDee, гораздо интереснее что будет если ты сначала создашь индекс, а потом попробуешь залить 100М текста Фигня получится. Больше 8К не зальёшь. Я ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. А что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. Если бы даже сейчас сделать в FB возможность создания индексов для полей varchar(32000) и чтобы не получался гигантский расход памяти и просадка по производительности, то будет всем профит. Можно будет спокойно для полей с неизвестным количеством символов ставить 32000. Т.е. я предлагаю чтобы N в varchar(N) не влияла на производительность и расход памяти, и не влияла на возможность создания индекса. А чтобы стала лишь ограничителем длины. А то сейчас получается что пользователь указывая N ещё и настраивает производительность, и управляет расходом памяти, причём по неизвестным ему формулам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 18:55 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЕсли бы даже сейчас сделать в FB возможность создания индексов для полей varchar(32000) и чтобы не получался гигантский расход памяти и просадка по производительности, то будет всем профит. "И почему люди не летают как птицы?.." (с) Островский. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. и выдаст твой индекс фигню. Особенно здорово будет попытаться сделать такой индекс уникальным. NickDeeА что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. по крайней мере FB не врёт что для некого безразмерного типа вы получаете только преимущества. В доке честно сказано про максимальный размер ключа индекса. З.Ы. А то глядишь на поверку окажется, что эффективность супер типа text не такая уж хорошая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:11 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, в ДИАМС (mumps) "индексировалось" только первые 63 символа. И это было хорошо. С другой стороны, при помещении документов в большой varchar всегда можно выделить какие-то реквизиты документа, которые представляют интерес для поиска, и которые всегда меньше 63 символов. Я считаю, что индексирование строковых столбцов длиной более 50 символов вообще не имеет смысла. Даже если индексировать 63 символа, глубина такого индекса превышает 3 уже на ощутимых объемах записей, и в результате профит от такого индекса получается только при поиске на равенство. Чего при 63 символах практически не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:43 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 12 августа 2014 г. 19:45:29: Kdv> Я считаю, что индексирование строковых столбцов длиной более 50 символов > вообще не имеет смысла. Даже если индексировать 63 символа, глубина > такого индекса превышает 3 уже на ощутимых объемах записей, и в > результате профит от такого индекса получается только при поиске на > равенство. Чего при 63 символах практически не бывает. иногда бывает нужно, при построении UNIQUE CONSTRAINT для "нечеловеческих" данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDeeЯ ж говорю, что нужно использовать в ключе индекса только первые N символов, и нет проблем. и выдаст твой индекс фигню. Особенно здорово будет попытаться сделать такой индекс уникальным. Индекс выдаст всё нормально, просто если он будет не по полной строке, то для таких длинных занчений придётся лезть в данные за окончательным вердиктом (> или < или =). Уникальность - это про "=". Симонов ДенисNickDeeА что будет в FB? В FB индекс для varchar(2048) создаётся, а для varchar(4096) уже нет. При пустой таблице. по крайней мере FB не врёт что для некого безразмерного типа вы получаете только преимущества.Вопрос не в том, врёт или нет. Вопрос в том, что даже если в varchar(32000) лежит 10 символов, то ресурсы от компа часто требуются как на 32000 символа. Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных, т.е. кушает почти всегда по максимуму (на 32000). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВопрос в том, что даже если в varchar(32000) лежит 10 символов, то ресурсы от компа часто требуются как на 32000 символа.Это вы прямо сейчас придумали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:57 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных в смысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 19:58 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvв смысле?при сортировках паддинг данных будет до декларированной длины поля, а не до "самой длинной непустой строки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:04 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидпри сортировках паддинг данных будет до декларированной длины поля, а не до "самой длинной непустой строки".Это вопрос реализации , которая является внутренним делом SQL-сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:06 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидпри сортировках паддинг данных будет до декларированной длины поля я в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 20:52 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee Т.е. varchar(32000) в большинстве случаев кушает ресурсы примерно так же, как char(32000), независимо от длины строки в данных в смысле? Размеры буферов, их обнуление и заполнение данными. БД с page_size 16k. Есть табличка: Код: sql 1. , без индексов. В ней миллион записей. В каждой записи поле S = 'A'; Какой размер БД? при N = 1 он равен 58mb. при N = 32000 он равен 583mb. Т.е. одни и те же данные хранятся в БД с разной степенью эффективности. Разница в 10 раз. Т.е. на такую БД нужно в 10 раз больше оперативки чтобы свопа не было. При одних и тех же данных. Код: sql 1. execute and fetch all: Для N = 1: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Для N = 32000: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 6 гигабайт не хватило на сортировку при N=32000. Хорошо что винт SSD, а то бы это получилось не 36 секунд, а минут 5. При N=2048 на сортировку ушло 4 GB временных файлов, но фетч не прошёл, т.к. IBExpert-у не хватило памяти (он тоже зачем-то отжирает по максимуму памяти, на все N символов, не знаю уж зачем) Короче вот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeselect * from T1 order by S я на курсах это объясняю, популярно. Вообще серебряной пули нет (как и полного счастья в жизни). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:28 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvТаблоидпри сортировках паддинг данных будет до декларированной длины поля я в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует? А зачем вычислять макс строку? И зачем нужен паддинг? Я просто представляю себе - мне нужно взять из файла строки и посортировать... зачем мне делать их паддинг? Или при записи отсортированных строк в другой текстовый файл... Я максимум готов записать длину строки и её бинарное представление. Паддить её перед записью не готов. То же и с чтением: читать, а потом избавляться от паддинга, который был сделан предыдущим записывающим... уж лучше договориться с записывающим чтобы не паддил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:30 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ просто представляю себе - мне нужно взять из файла строки и посортировать... зачем мне делать их паддинг? А ты возьми да напиши программу для их сортировки. Без паддинга. И посмотри насколько она будет медленнее работать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:47 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeпри N = 1 он равен 58mb. при N = 32000 он равен 583mb. Т.е. одни и те же данные хранятся в БД с разной степенью эффективности. Разница в 10 раз. И тебя не восхищает, что разница в 10 раз, а не в 32000 раз?.. Ты вообще программист?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 21:49 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ просто представляю себе - мне нужно взять из файла строки и посортировать.. мнэ.... ну взял ты строки. произвольной длины. Как ты их будешь переставлять местами (сортировать)? Известно же, что или ты будешь сортировать указатели на них, или сами строки. Индекс - это и есть отсортированные указатели на строки переменной длины. А по PLAN SORT один вариант - сортировать строки фиксированной (максимально возможной длины). я фигею, что объясняю как бы прописные алгоритмические истины :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:11 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee6 гигабайт не хватило на сортировку при N=32000. Хорошо что винт SSD, а то бы это получилось не 36 секунд, а минут 5. При N=2048 на сортировку ушло 4 GB временных файлов, но фетч не прошёл, т.к. IBExpert-у не хватило памяти (он тоже зачем-то отжирает по максимуму памяти, на все N символов, не знаю уж зачем) Вообще говоря сортировать по строке длинной 32000 символов глупо и здесь вряд ли что-нибудь поможет.. Другое дело что такая ошибка может возникнуть когда сортируется по другому поля, а резалтсет широкий. У ДЕ есть патчик который реализует сортировку иначе, когда сортируются только ключи и для каждого ключа запоминается RDB$DB_KEY, а потом вытаскивается остальной результат. Я пробовал (2.5) ту сборку в некоторых случаях производительность сортировки выросла, в некоторых упала. Если этот патч будет применён к тройке и оптимизатор будет достаточно умён, чтобы понять какой метод сортировки применять, то всё будет гораздо лучше. kdvя в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует? вполне возможно он опирается на статистику ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:12 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, к слову - иногда бывает полезно покодить нечто низкоуровневое, на тему страничного хранения данных. Мне повезло, я когда осваивал Паскаль, была популярной библиотека Borland Database Toolbox . Там было много всякой интересной фигни. А еще была либа BTreeFiler, и вроде там был модуль bigsort, который позволял сортировать наборы данных адских размеров. Первое, что я сделал, разобравшись в коде - перехерачил индексы из тулбокса на индексы по строкам произвольной длины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:20 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDeeЯ просто представляю себе - мне нужно взять из файла строки и посортировать.. мнэ.... ну взял ты строки. произвольной длины. Как ты их будешь переставлять местами (сортировать)? Известно же, что или ты будешь сортировать указатели на них, или сами строки. Индекс - это и есть отсортированные указатели на строки переменной длины. А по PLAN SORT один вариант - сортировать строки фиксированной (максимально возможной длины). я фигею, что объясняю как бы прописные алгоритмические истины :-) Я тоже фигею, т.к. сортировать я буду не строки, а создам указатели на строки, длина которых 4 байта или 8 байт, в зависимости от архитектуры, и буду оперировать ими. Переставлять местами записи я бы не додумался. Так что думаю в коде всё-таки поинтеры местами меняются, как в прописных алгоритмических истинах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:26 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeпри N = 1 он равен 58mb. при N = 32000 он равен 583mb. Т.е. одни и те же данные хранятся в БД с разной степенью эффективности. Разница в 10 раз. И тебя не восхищает, что разница в 10 раз, а не в 32000 раз?.. Ты вообще программист?.. Меня восхищает что разница вообще есть. А тебя не восхищает что есть разница в 10 раз? Ты вообще программист?.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:27 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, сортировка в кортежей в памяти это одно. Совсем другое дело когда эти данные в память не умещаются. Если сортировать только ключи, то взамен огребаем рандомные чтения. Тут уже надо оценивать что дешевле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeЯ просто представляю себе - мне нужно взять из файла строки и посортировать... зачем мне делать их паддинг? А ты возьми да напиши программу для их сортировки. Без паддинга. И посмотри насколько она будет медленнее работать. За счёт чего медленней? Что, скорость сравнения S1 > S2 зависит от паддинга? Не зависит. Так для чего делать им паддинг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvТаблоидпри сортировках паддинг данных будет до декларированной длины поля я в курсе, вопрос в том, как это обходит постгрес. Вначале вычисляет макс строку, а только потом сортирует?я так думкаю, что ничего он не вычисляет, а сразу лезет в DDL за декларированной длинной поля. Но лучше ДЕ никто не скажет :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:47 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDee, сортировка в кортежей в памяти это одно. Совсем другое дело когда эти данные в память не умещаются. Например не умещаются из-за паддинга :) Я вот думаю что если у меня есть набор данных из миллиона записей для сортировки, и часть из них не входит в память и сливается во временные файлы, то я уж точно буду сортировать поинтеры, а не менять местами записи этого набора данных в оперативке или на диске. И для этого мне паддинг точно не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Дениссортировка в кортежей в памяти это одно. Совсем другое дело когда эти данные в память не умещаются. Если сортировать только ключи, то взамен огребаем рандомные чтения. Тут уже надо оценивать что дешевле.Если данные не умещаются в памяти, то чтения (и записи) будут в любом случае. Вроде как, при наличии свободного дискового пространства, самым быстрым будет многопутевое слияние со всякими "предсортировками" и балансировками. Дополнение "до максимума" увеличивает и требования к дисковому пространству и ввод-вывод и рабочий набор в памяти. Единственное, что, возможно, имеет смысл - секционирование данных по (байтовой) длине. P.S. Предоставить рабочий код? Нет, не готов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:50 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЗа счёт чего медленней? Что, скорость сравнения S1 > S2 зависит от паддинга? Не зависит. Так для чего делать им паддинг? Отсортируй десяток гигабайт - узнаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:50 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, ты игнорируешь то что я пишу NickDeeЯ вот думаю что если у меня есть набор данных из миллиона записей для сортировки, и часть из них не входит в память и сливается во временные файлы, то я уж точно буду сортировать поинтеры, а не менять местами записи этого набора данных в оперативке или на диске. ну вот ты отсортировал ключи (поинтеры), которые перед этим необходимо было прочитать с диска. Это был шаг 1. А теперь шаг 2, для того чтобы отдать пользователю все запрошенные поля на диск надо слазить ещё раз. Вот здесь чтения будут рандомными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 22:55 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeа создам указатели на строки, длина которых 4 байта или 8 байт, в зависимости от архитектуры, и буду оперировать ими. Переставлять местами записи я бы не додумался. ну и плохо, что не додумался. вот это читал? http://www.ibaseforum.ru/viewtopic.php?f=4&t=4175 У тебя два варианта 1) отсортировать результат за N секунд, выдать его клиенту. 2) построить индекс по X столбцам за M секунд, получить охрененный random io при выборке результата. опять я излагаю алгоритмические факты? Типа, код при plan sort дураки делали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 23:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, к слову http://www.boag.net.nz/backups/tp/BTF541/BIGSORT.PAS http://sourceforge.net/projects/tpbtreefiler/files/tpbtreefiler/5.57a/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 23:24 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
как хорошо, что я нетрезв... а то бы поразгонял бы тут вас к чертовой матери :-) Жгите дальше, народ просит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:04 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, я вот с завтра буду нетрезв :-) и в силу различия в часовых поясах, прокомментировать смогу только послезавтра :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:10 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvв силу различия в часовых поясах это в куда тебя занесло? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeЗа счёт чего медленней? Что, скорость сравнения S1 > S2 зависит от паддинга? Не зависит. Так для чего делать им паддинг? Отсортируй десяток гигабайт - узнаешь. Хм. При Код: sql 1. получается вообще сортируются числа, но данные всё-равно паддятся и используются временные файлы. Засада прям :) Так и не понял зачем паддить. Зафетчили первый блок записей (сколько их там в половину сортировочного кэша входит), создали к записям массив поинтеров, посортировали этот массив. Зафетчили второй блок записей, создали к записям массив поинтеров, посортировали этот массив. Далее создаём на диске файл и, используя информацию из двух массивов поинтеров, сливаем записи из двух блоков в один, как при сортировке слиянием. Получаем на диске файл с отсортированными записями из двух первых отффетченных блоков. Далее фетчим ещё два блока и проделываем с ними то же самое, т.е. создаём по ним файл с отсортированными записями. В конце концов получится N файлов, каждый из которых будет содержать отсортированные внутри записи. И без всякого паддинга. Дальше попарно сливаем эти файлы, создавая новые (и удаляя при этом те, из которых данные уже были слиты). В конце останется один большой файл. Если сортировочный кэш равен 50 мегабайт, а записей на 200 мегабайт, то на первом этапе будет создано 4 файла по 50 мегабайт. Потом 2 по сто (с удалением предудущих четырёх). Потом эти два сольются в один. Хотя тут я не уверен, т.к. зачем нам сливать последние два, когда можно вместо создания последнего файла сразу отдавать записи движку. И даже скажу больше - не факт что будт эффективно даже из четырёх файлов делать два. Возможно проще отдавать записи движку выбирая нужную из 4-х источников, чтобы сэкономить на записи двух файлов по 100 МБ. Хотя возможно это зависит от скорости дисковой системы. Места паддингу я так и не нашёл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:50 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitrэто в куда тебя занесло? :-) еще не занесло. Завтра в Брюссель, в логово демократии :-) NickDeeДалее фетчим ещё два блока и проделываем с ними то же самое, т.е. создаём по ним файл с отсортированными записями. ну ты хоть бы исходники ФБ почитал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:53 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvdimitrэто в куда тебя занесло? :-) еще не занесло. Завтра в Брюссель, в логово демократии :-) NickDeeДалее фетчим ещё два блока и проделываем с ними то же самое, т.е. создаём по ним файл с отсортированными записями. ну ты хоть бы исходники ФБ почитал... Мне проще достать подходящий алгоритм из коллективного бессознательного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 00:56 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeТак и не понял зачем паддить. Зафетчили ... создали....Самое время запилить свой собственный сервер. Без паддинга и с безразмерным варчаром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 10:35 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
S.G.Самое время запилить свой собственный сервер. Без паддинга и с безразмерным варчаром. Или прислать патч к уже существующему. Если бы такой топик поднял я, Влад уже давно бы сказал "ну так сделай, а мы посмотрим"... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 11:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, ЕМНИП, ты ведь пытался что там с сортировкой сделать. Как результаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 11:25 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисЕМНИП, ты ведь пытался что там с сортировкой сделать. Нет, никогда я ничего такого не пытался, просто как-то предлагал простой хак для использования имеющихся процедур сортировки для HASH GROUP. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 12:02 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
гоните его нахер. это мудозвон пустопорожний. ибо сказано в писании: "один дурак может задать столько вопросов, что и 100 мудрецов не ответят" Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 12:06 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, вот здесь это было. Там про уменьшение размеров сортировочных файлов разговор шёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 12:54 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денисвот здесь это было. Экий ты археолог... В плане "сделать" я там никакой активности не проявлял, только "занести хотелку в трекер". Потом хотелка отсохла. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 14:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
А всё-таки. Вот есть у нас таблица T(ID integer, S1 varchar(32000), S2 varchar(32000)). Есть в ней одна запись: insert into T(ID, S1, S2) values(1, 'S1', 'S2'). Вопросы: 1. В чём профит от того, что в БД на эту запись лежат примерно 64000 байт, упакованных RLE? Почему бы не записать всего пару десятков байт, закоденых RLE? 2. В чём профит от того, что при доставании записи из БД нужно будет выделить примерно 64000 байт, потом распаковать в них RLE-блок? Почему бы не выделить пару десятков байт и не распаковать туда столько, сколько там реально данных? Зачем сначала запаковывать, а потом распаковывать пустоту? Ведь при этом перерасходуется память (т.е. в итоге в кэш входит меньше полезных данных) + перерасходуется место на диске (а это лишний ввод-вывод) + впустую тратятся ресурсы процессора на работу с тем, что никогда не будет использоваться. В чём профит такого подхода? Или это нужно Джима спрашивать почему он так заархитектурил тридцать лет назад? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 17:36 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee1. В чём профит от того, что в БД на эту запись лежат примерно 64000 байт, упакованных RLE? Почему бы не записать всего пару десятков байт, закоденых RLE? С какого перепугу ты решил, что в БД лежит 64000 байт? Подикося, слышал об RLE только название... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 17:43 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeА всё-таки. Вот есть у нас таблица T(ID integer, S1 varchar(32000), S2 varchar(32000)). Есть в ней одна запись: insert into T(ID, S1, S2) values(1, 'S1', 'S2'). Вопросы: 1. В чём профит от того, что в БД на эту запись лежат примерно 64000 байт, упакованных RLE? Почему бы не записать всего пару десятков байт, закоденых RLE? 2. В чём профит от того, что при доставании записи из БД нужно будет выделить примерно 64000 байт, потом распаковать в них RLE-блок? Почему бы не выделить пару десятков байт и не распаковать туда столько, сколько там реально данных? 1. Потому что запись пакуется целиком, а не по отдельным полям. Одно "длинное" сжатие тупо быстрее десятка "коротких". 2. Чтобы не переаллокировать буфер каждый раз когда последующая запись окажется длиннее. NickDeeВедь при этом перерасходуется память (т.е. в итоге в кэш входит меньше полезных данных) + перерасходуется место на диске (а это лишний ввод-вывод) кеш тут вообще не причем, в нем лежат страницы со сжатыми данными. А для экономии места можно сжимать чуть хитрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 17:44 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitrА для экономии места можно сжимать чуть хитрее. ты про это CORE-4401 говоришь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 18:07 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, так точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 18:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr1. Потому что запись пакуется целиком, а не по отдельным полям. Одно "длинное" сжатие тупо быстрее десятка "коротких". Запись пакуется целиком и так и так, она же в памяти непрерывно лежит. Просто я предлагаю не хранить хвостовые пробелы варчаров. dimitr2. Чтобы не переаллокировать буфер каждый раз когда последующая запись окажется длиннее.Вот тесты переаллокации: Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. Вот код: Код: pascal 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. dimitrNickDeeВедь при этом перерасходуется память (т.е. в итоге в кэш входит меньше полезных данных) + перерасходуется место на диске (а это лишний ввод-вывод) кеш тут вообще не причем, в нем лежат страницы со сжатыми данными. А для экономии места можно сжимать чуть хитрее. Или держать в памяти без хвостовых пробелов и не сжимать лишнего :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 19:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВот тесты переаллокации это сферический конь в вакууме. Реально будет потери времени выполнения процентов 10-20. Ты уверен, что их сэкономишь за счет сжатия "без хвостов"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 20:30 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitrNickDeeВот тесты переаллокации это сферический конь в вакууме. Реально будет потери времени выполнения процентов 10-20. Ты уверен, что их сэкономишь за счет сжатия "без хвостов"? Не только сжатия, но и копирования. Одно дело копировать миллион блоков по 1000 байт, и совсем другое - миллион по 100. Выделить миллион по 100 - это примерно 10 ms. Скопировать 100M - это в несколько раз быстрей чем скопировать 1000M. И даже +10 ms к "скопировать 100M" не будут существенны. Возможно что выделить миллион по 900 + скопировать их будет уже где-то равным по скорости копированию миллиона по 1000. Ещё нужно учесть что realloc нужно будет делать только если запись больше чем размер блока под неё. Т.е. при фетче миллиона записей при максимальном размере записи N (что определяется в метаданных) в memory-buffer вмещающий лишь одну запись, мы получим много меньше чем N реаллоков (т.е. совсем даже не миллион). Итого, нужно реаллоцировать только увеличивая размер буфера под одну запись (не уменьшая если следующая запись меньше), и копировать туда-оттуда только реально используемые байты, без хвоста. И имхо будет профит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 21:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, твои умозаключения основываются на какой-то абстрактной фигне. Исходники FB открыты возьми да и проведи эксперимент. Если удастся получить приличный выигрыш тогда можно что-о смело утверждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 21:33 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeнужно реаллоцировать только увеличивая размер буфера под одну запись (не уменьшая если следующая запись меньше), и копировать туда-оттуда только реально используемые байты, без хвоста тебе осталось додумать, как обращаться к полям, расположенным после урезанного варчара. Сейчас у них фиксированное смещение относительно начала записи. Станет плавающее. Менять еще и дескрипторы формата каждый раз когда читаем запись и когда меняем ее апдейтом в NEW-контексте? Уверен, что еще куча интересных вопросов вылезет, если копнуть поглубже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 21:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitrNickDeeнужно реаллоцировать только увеличивая размер буфера под одну запись (не уменьшая если следующая запись меньше), и копировать туда-оттуда только реально используемые байты, без хвоста тебе осталось додумать, как обращаться к полям, расположенным после урезанного варчара. Сейчас у них фиксированное смещение относительно начала записи. Фиксированное смещение... Ну а по этому фиксированному смещению что расположено? Прям весь варчар? Если да, то предлагаю вместо этого разместить там четыре байта: первые два байта - длина варчара, вторые два - поинтер на его данные. Так обращение будет быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 22:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeТак обращение будет быстрым. И эти четырёхбайтовые описатели будут идти один за другим, т.е. доступ к ним будет индексный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 22:23 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, вернулись к сжатию кучки маленьких буферов вместо одного большого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 22:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, запись у нас расположена непрервыно. Например есть табличка: int1, int2, int3, varchar1(1000), varchar2(1000), varchar3(1000), int4, varchar4(1000) Запись в несжатом виде будет иметь вид: [Header], [int, int, int, int, int, int, int, int], [данные varchar1(5 байт), данные varchar2(10 байт), данные varchar3(20 байт), данные varchar4(3 байта)]. В первых трёх int второго блока лежат значения int1, int2 int3. В четвёртом int второго блока будет лежать "длина varchar1" и смещение по которому лежат данные этого varchar1(например относительно начала второго блока). В пятом int второго блока лежит такая же информация про varchar2. В шестом int второго блока лежит такая же информация про varchar3. В седьмом int второго блока лежит значение int4. В восьмом int второго блока лежит такая информация про varchar4. Все три блока непрерывны внутри и лежат последовательно друг за другом, без разрывов. Таким образом у нас будет один буфер для сжатия и разжатия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 02:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, и чем все это (включая переаллокации буфера записи) лучше, чем просто более эффективно сжимать хвосты? Не со степенью 64, а всегда в три-пять байт, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 08:56 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitrNickDee, и чем все это (включая переаллокации буфера записи) лучше, чем просто более эффективно сжимать хвосты? Не со степенью 64, а всегда в три-пять байт, например. Эффективность сжатия влияет на размер данных в страничном кэше и в БД. А когда запись распаковывается для работы, например для сортировок, то там перерасход памяти: 16433678 . Есть зависимость скорости создания индекса от объявленной длины поля, при одних и тех же данных (varchar(1) vs varchar(2048)): миллион записей, 1 секунда vs 18 секунд. Засада везде :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, объясни две вещи: 1. На фига индекс по длинной предлинной строке 2. На фига сортировать по длинной предлинной строке Другое дело что при сортировке сам резалтсет может получится широким даже при сортировки по небольшому ключу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:56 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Дениспри сортировке сам резалтсет может получится широким даже при сортировки по небольшому ключу.Ога. И dimitr пару лет взад давал возможность потестировать некую спецсборку, где сортируются только ключики, а с итоговыми кортежами идёт их соединение по rdb$db_key. Кому было интересно - тот попробовал, и теперь периодически спамит dimitr'a просьбой втыкнуть это в ФБ-3.х :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:01 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоид, я тоже её пробовал. Но тогда она во многих случаях промахивалась и весьма сильно. Будем надеется ДЕ доведёт оценку стоимости до ума, чтобы оптимизатор выбирал лучший алгоритм сорировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:04 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeЭффективность сжатия влияет на размер данных в страничном кэше и в БД. и она примерно одинакова в обоих случаях NickDeeА когда запись распаковывается для работы, например для сортировок, то там перерасход памяти это вопрос к сортировщику, обсуждалось уже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:32 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денися тоже её пробовал. Но тогда она во многих случаях промахивалась и весьма сильно. что значит "промахивалась"? Она в той сборке безусловно работала, насколько я помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:34 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, я имел ввиду, что такой способ сортировки не всегда выигрывает у сортировки всего кортежа. Для некоторых случаев результат оказывался хуже по времени. По всей видимости оценки стоимости для выбора когда и какой алгоритм применять в той сборке не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:58 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис1. На фига индекс по длинной предлинной строке Миллион коротких строк, и одна длинная. Симонов Денис2. На фига сортировать по длинной предлинной строке Я не сортирую по длинной. Я сортирую миллион строк по 20-30 символов, и только одна строка там 2000. Не возникает вопроса, нафига движок выделяет по 2000 на все строки? Это между прочим 2GB памяти вместо 30MB. Я, глядя на эти цифры, отнёс бы это к категории "фатальный недостаток" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 22:12 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeНе возникает вопроса, нафига движок выделяет по 2000 на все строки? я ведь тебе уже объяснял. ты не читаешь, или не врубаешься алгоритмически? 16433843 и 16434091 хотя бы второе прочитай. фиксированная сортировка это PLAN SORT. Сортировка "по указателям" - PLAN ORDER. У обоих свои недостатки, противоположные на разных объемах данных и на разной "уникальности" результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 23:04 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDeeНе возникает вопроса, нафига движок выделяет по 2000 на все строки? я ведь тебе уже объяснял. ты не читаешь, или не врубаешься алгоритмически? 16433843 и 16434091 хотя бы второе прочитай.я ведь уже объяснял это. ты не читаешь, или не врубаешься алгоритмически? 16434256 хотя бы почитай, уже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 23:28 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee 16434256 хотя бы почитай, уже :) читал. в ФБ сортировка и идет блочно, только не строятся пойнтеры, а сразу сортируются блоки. Так что, если я правильно понял твою идею, по реализации она проиграет тому, что есть сейчас. И, сортировка слиянием тоже используется в ФБ, это когда в плане написано PLAN MERGE (SORT... http://www.ibase.ru/devinfo/dataaccesspaths.htm#chapter22 Алгоритм сортировки представляет собой многоуровневую быструю сортировку (quick sort). Набор входных записей помещается во внутренний буфер, после чего он сортируется и блок перемещается во внешнюю память. Далее таким же образом заполняется следующий блок и процесс продолжается до окончания записей во входном потоке. После чего заполненные блоки вычитываются и по ним строится бинарное дерево слияния. При чтении из фильтра сортировки происходит разбор дерева и слияние записей в один проход. или я не понял, и твой метод сильно отличается? я вот пару раз перечитал, и не понял (может, из-за ночного времени), зачем сортировать пойнтеры, а потом переливать записи в их порядке, если в блоке записи и так можно отсортировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 02:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
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. Из заболденного делаю вывод что внутри блока перемещаются НЕ записи, и таким образом фиксированные буфера нам для сортировки не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 05:29 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeВлад говорит что сортируются указатели: значит, сортировка в ФБ работает именно так, как ты и хотел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 13:23 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvзначит, сортировка в ФБ работает именно так, как ты и хотел.Как это ? А вот же, дальше:hvladКогда все данные из потока выбраны, мы имеем N упорядоченных блоков во временном файле. Берём из него 8 блоков и сортируем их сортировкой слиянием. Упорядоченный результат пишем в тот-же временный файл. И т.д. В конце получаем тот же файл с N1 = N / 8 блоков бОльшего (в 8 раз) размера. Повторяем до тех пор, пока Ni > 8. После этого можно выдавать записи из оставшихся Ni блоков "наружу", есс-но сортируя их слиянием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 14:49 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидkdvзначит, сортировка в ФБ работает именно так, как ты и хотел.Как это ? А вот же, дальше:hvladКогда все данные из потока выбраны, мы имеем N упорядоченных блоков во временном файле. Берём из него 8 блоков и сортируем их сортировкой слиянием. Упорядоченный результат пишем в тот-же временный файл. И т.д. В конце получаем тот же файл с N1 = N / 8 блоков бОльшего (в 8 раз) размера. Повторяем до тех пор, пока Ni > 8. После этого можно выдавать записи из оставшихся Ni блоков "наружу", есс-но сортируя их слиянием. Это не требует фиксированных буферов. Я хотел именно этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 21:24 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Кстати в 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. Но нам нельзя резиновый NUMERIC, т.к. мы не умеем эффективно хранить и обрабатывать резиновые типы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 19:08 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, (тихим шепотом) это всё прекрасно, конечно: числа вида power(10, 100500), длинная арифметика, просторы вселенной... но я на тут на одном заборе прочитал такую злостную клевету, что у них: 1) нет автономных тнранзакций внутри ХП (или как там по-ихнему... "функций" ?); 2) нельзя вытащить данные из другой базы (как в ФБшном ES on ext data source); 3) нет встроенного аудита операций с базой (только сторонние решения) Это действительно до сих пор так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 19:24 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
ТаблоидNickDee, (тихим шепотом) это всё прекрасно, конечно: числа вида power(10, 100500), длинная арифметика, просторы вселенной... но я на тут на одном заборе прочитал такую злостную клевету, что у них: 1) нет автономных тнранзакций внутри ХП (или как там по-ихнему... "функций" ?); 2) нельзя вытащить данные из другой базы (как в ФБшном ES on ext data source); 3) нет встроенного аудита операций с базой (только сторонние решения) Это действительно до сих пор так ? Я не в курсе про это :) Мне не нравится что там нет Embedded-версии. И что таблицы не в одном файле. Но вот их резиновые типы мне понравились. А у нас мне не нравится 31 символ на имя, и небольшая инертность мышления у передовой части сообщества по некоторым вопросам :) Ну и двойные стандарты ингода: тут действуем по стандарту потому что "это же sql-стандарт!", а тут действуем не по стандарту потому что считаем что так удобно :) Ещё не нравится что кто-то наверху всё время самообманывается по поводу времени выхода тройки, и тем самым вводит сообщество в заблуждение, и тем самым вызывает порцию недоумения и недоверия у ожидающих когда подходит очередной срок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 20:14 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Как постепенно уходящий от 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. Что мешает написать свою ХП, которая будет возвращать наборы данных из совсем других баз, не знаю. Там есть полноценные Питон и Перл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 20:55 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Alexander A. SakКак постепенно уходящий от FB в Postgres...А чего уходите? Не комфортно стало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2014, 21:09 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Alexander A. Sak> Как постепенно уходящий от FB в Postgres Можно поподробнее на эту тему? Причины, описание самого процесса (с перечнем технологий и библиотек, если несложно), впечатления и пр. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 00:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
ИХМО, самый главный недостаток PG в том что в нём функции могут стать инвалидными после изменения метаданных и он никак это не сообщит. Т.е. без труда позволяется такой DDL который делает функции не работоспособными, и в отличии от ORA статусов инвалид/не инвалид нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 14:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисИХМО, самый главный недостаток PG в том что в нём функции могут стать инвалидными после изменения метаданных и он никак это не сообщит. Т.е. без труда позволяется такой DDL который делает функции не работоспособными, и в отличии от ORA статусов инвалид/не инвалид нету. Там наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 20:49 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeНам ведь именно это нужно, правда? Нет, маниловщина нам ни к чему. Нам нужны кодеры, которые смогут влить эти чужие достоинства в наш код. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 20:56 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeНам ведь именно это нужно, правда? Нет, маниловщина нам ни к чему. Нам нужны кодеры, которые смогут влить эти чужие достоинства в наш код. Сколько кодеров прошло по этому пути за последние 7 лет? И где они все сейчас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 21:35 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeТам наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :) ИХМО, из всех достоинств PG ты выбрал самые не значимые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 21:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDeeТам наверняка есть недостатки, но мы смотрим на других не за тем чтобы тыкать пальцами на их недостатки, а чтобы отмечать явные достоинства и примерять их на себя. Нам ведь именно это нужно, правда? :) ИХМО, из всех достоинств PG ты выбрал самые не значимые. Я выбрал те, где у нас слабости в реализации, в результате чего идёт неоправданный расход ресурсов компа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 21:54 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeСимонов Дениспропущено... ИХМО, из всех достоинств PG ты выбрал самые не значимые. Я выбрал те, где у нас слабости в реализации, в результате чего идёт неоправданный расход ресурсов компа. Но ещё увидел резиновый numeric, увидел timestamp в utc, увидел многообразие типов индексов, партиции, возможность подключения своих языков, наследование. Наследование - прикольная штука :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 22:07 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeещё увидел Повторяю вопрос медленно: кодить всю эту хрень ты будешь? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 22:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, я чего то тебя не пойму. Ну увидел ты где то фичу новую, ну захотел её - так создай тикет и жди пока реализуют (если конечно реализуют) или сделай сам. Или ты нас пытаешься сейчас убедить, что это архиважные штуки и разработчикам FB надо срочно всё бросить и заниматься этой фигнёй? P.S. Ты ещё Оракл посмотри. По количеству фич он наверное уделает все вместе взятые СУБД. Давай всё в FB перетащим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 22:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNickDee, я чего то тебя не пойму. Ну увидел ты где то фичу новую, ну захотел её - так создай тикет и жди пока реализуют (если конечно реализуют) или сделай сам. Или ты нас пытаешься сейчас убедить, что это архиважные штуки и разработчикам FB надо срочно всё бросить и заниматься этой фигнёй? Ты наверное не заметил, но проблема не в том, что нет времени реализовать. А в том, чтобы видеть косяки. Когда есть проблема реализовать, то говорится что фича хорошая, но нет времени. А у нас это звучит так: "фича пользователям не нужна", и предлагаются пути для обхода. А должно быть так: фича пользователям нужна, но пока нет ресурсов, и вот вам, пользователи, пути для обхода... И без пены у рта. Нефиг в сообществе лукавость разводить и считать пользователей дебилами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 22:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
1. Я не считаю безразмерный varchar хорошей фичей, но не возражаю против таковой 2. Длинная арифметика нужна (с точностью больше 18), но это не значит, что она будет безразмерной 3. Как оно там сортируется это отдельный вопрос и вообще мало зависит от того есть безразмерные типы или нету ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 23:11 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeещё увидел Повторяю вопрос медленно: кодить всю эту хрень ты будешь? Я ж тебе ответил вопросом на вопрос. Какие проблемы с новыми разработчиками? Они приходят но отбриваются? Они не приходят? Почему разработчиков всего пять? Спонсоры дают мало денег? Или ты мне предлагаешь пройти этот путь и на себе понять что там не так, кто виноват и что делать с упырями? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2014, 23:23 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис2. Длинная арифметика нужна (с точностью больше 18), но это не значит, что она будет безразмернойЕсли бы был "выход в яву" из хранимок ФБ, то все вопросы по длинной арифметике ушли бы в небытиё. В том числе и про размеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 00:00 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeИли ты мне предлагаешь пройти этот путь и на себе понять что там не так, кто виноват и что делать Ага, именно так. Тогда мы и увидим что эти твои "увиденные косяки" могут принести хорошего, а что - плохого. А Таблоид позаботится чтобы продемонстрировать с цифрами в руках насколько твои "безразмерные типы" будут тормозить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 00:45 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА Таблоид позаботится чтобы продемонстрировать с цифрами в руках насколько твои "безразмерные типы" будут тормозить.я в упор не понимаю, для чего нужна сортировка сверхдлинных строк. Кто будет глаза ломать об них, да еще учитывая, что на мониторах они всё равно не отобразятся даже в 1% своей длины ? Сами по себе длинные строки (большие числа ?) - может, и нужны где-то. В криптиграфии с открытым ключём, например. Но это не СУБДшная задача таки. Совсем. ЗЫ. И даже если представить, что сортировка таких строк позарез нужна, что мешает сделать таблицу со 100 полями varchar(100), в которых эти строки будут в "раздробленном виде", и выполнять из неё 100 раз заливку в GTT1 с order by F_01, затем из GTT1 в GTT2 с order by F_02, затем обратно - из GTT2 в GTT1 с order by F_03 и т.д. до 100-го поля ? Может, и выглядит как бред, но эти 100 заливок-сортировок если и будут во что-то упираться, то точно не в размер памяти. В эффективность нынешнего доступа к GTT "почти как" к FIXED-таблицам - да, будут. Но ежели ФБ-светила когда-нибудь подправят GTT-консерваторию, или вообще сделают таблицы в памяти (a'la mon$), то проблема вообще исчезнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 01:11 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
ТаблоидDimitry SibiryakovА Таблоид позаботится чтобы продемонстрировать с цифрами в руках насколько твои "безразмерные типы" будут тормозить.я в упор не понимаю, для чего нужна сортировка сверхдлинных строк. Кто будет глаза ломать об них, да еще учитывая, что на мониторах они всё равно не отобразятся даже в 1% своей длины ? Так без разницы по чему сортировать, хоть по ID, всё-равно запись в памяти хранится по объявленной в метаданных длине. Попробуй написать функцию, которая аппит варчар: Код: sql 1. 2. 3. 4. а дальше попробуй иcпользовать её: Код: sql 1. 2. Размер одной записи выборки около 32 килобайт. Чтобы посортировать миллион таких в памяти, нужно около 32ГБ памяти. Как решить проблему? Да элементарно, нужно объявить функцию: Код: sql 1. 2. 3. 4. И писать Код: sql 1. А как же быть если нужно такое делать и для других таблиц, где размер варчара например 100? Да элементарно, нужно объявить функцию: Код: sql 1. 2. 3. 4. И писать Код: sql 1. А как же быть если варчаров много разных? Да элементарно, нужно объявить много функций, по количеству варчаров, по шаблону: Код: sql 1. 2. 3. 4. И писать Код: sql 1. *ботня, не правда ли? :) Это то, на что обрекает пользователей текущая реализация VARCHAR(N). Кстати в Firebird есть системная функция Upper, которая удивительным образом возвращает не varchar(32000), а varchar(длина параметра). А ка же быть не системным функциям? Кстати, а если бы была системная функция Str2Hex, то варчар какой ширины она бы возвращала? длина_параметра * 2? А обратная бы делила на два? :) А как написать такую функцию используя механизм UDR? Входной параметр блоб и выходной блоб? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 02:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, гнусный ты провокатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 03:21 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
kdvNickDee, гнусный ты провокатор. Да просто с такими удобствами вы весь userbase растеряете. Попробуй в Delphi закодить бизнес-логику на процедурах с параметрами типа string[n]. Понравится тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 05:38 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, ты вообще читаешь чужие сообщения. Сортировка широких выборок может делаться по другому. Читай и пробуй 13198664 . P.S. Что ещё кто-нибудь пользуется UDFкой переводящей строку в верхний регистр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:15 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeДа просто с такими удобствами вы весь userbase растеряете. Попробуй в Delphi закодить бизнес-логику на процедурах с параметрами типа string[n]. Понравится тебе? ты действительно думаешь, что все прогрессивное человечество крутящее базы на ораклах, мссклях, мускулях и постгресах уже давно отказалось от ограничений на длину строки и юзают исключительно безразмерные типы? Смею тебя заверить, все с точностью до наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:19 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee Код: sql 1. Размер одной записи выборки около 32 килобайт. Чтобы посортировать миллион таких в памяти, нужно около 32ГБ памяти.Ты бы проверил вот это: Код: sql 1. Ну да, тут будет два раза обращение к `t`, но тем не менее сортировка потребует (20+4+4)*1'000'000 байт - 20=заголовок записи, 4 байта на id, 4 байта на timestamp (или 3 ?). ЗЫ. Ну и про спецбилд от ДЕ, где сортировка делается примерно так, как показано, но только соединение там идёт по rdb$db_key, - ты в курсах, конечно, и тестировал его ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:27 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоид, Код: sql 1. поправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
dimitr, Так что мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeekdvNickDee, гнусный ты провокатор. Да просто с такими удобствами вы весь userbase растеряете.Здесь на скуле, Джудж не хочет новый раздел создавать, пока не соберется определенное минимальное количество тем или желающих. (А уж создать раздел в тыщи раз легче, чем новый функционал сервера.) И ничего, не уменьшаются юзеры. Да, в принципе, чем больше возможностей, тем лучше. Только совершенно очевидно, что сначала надо делать более востребованные возможности, а потом - менее. А твоем случае, например насчет безрармерного varchar-a я не вижу каких-то особых причин его вводить, кроме банального "мне лень подумать, какие варчары будут тут и там, и легче лепить везде одно и то же. А потом поныть про проседание производительности". То же и со сверхдлинными числами. Неплохо бы привести пример, в какой области они будут использоваться (именно сверхдлинные, а не, скажем, длиной в 36 позиций). А то я например знаю только одну область, и там базы данных - нечто совсем постороннее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:46 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Cobalt747, здравый смысл. Ограничение длины - это констрейнт, который в большинстве случаев вполне успешно завязывается на бизнес-логику. Исключения бывают, конечно же, но раздувать из этого истерику в стиле "шеф, все пропало!" глупо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 10:47 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeПопробуй в Delphi закодить бизнес-логику на процедурах с параметрами типа string[n]. Молодой, длинные строки появились впервые в Delphi 2. До этого весь мир десятилетиями жил на строках с ограничением размера и не жужжал. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 11:52 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Засрали тему, ироды. Скопипастю, чтобы не затерялось: Гаджимурадов Рустам> Alexander A. Sak> Как постепенно уходящий от FB в Postgres Можно поподробнее на эту тему? Причины, описание самого процесса (с перечнем технологий и библиотек, если несложно), впечатления и пр. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 13:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Я помню. Времени не было подумать. Ну вот подумал. Основной мотив -- попробовать новенького. Остальное, наверное, вторично. Как это было у меня. Клуб анонимных отказников от Firebird. Начиналось все лет 13-15 назад. Основная БД была Оракл, разработка клиента -- Delphi. Попутно был левый проект -- приемная комиссия ОмГПУ. Программа выросла из штанишек Клариона, потом из штанишек Парадокса. На что переходить? Вариантов при тотальной Win98 не было: только Firebird. Пару лет даже жили с сервером на Win98. Клиента, которого делал на основной работе адаптировал под Firebird. Пошел мегапрофит: для левого проекта писать на Delphi не надо, все решалось исключительно настройками и хранимыми процедурами. Если возникали какие-то потребности, дорабатывался клиент на основной работе. Начальство было в курсе и было совсем не против. Потом появился второй левый проект: СПИД-Центр. Там все аналогично: клиент все тот же, системная серверная часть перекочевала из приемной комиссии. В 2006 уволился с основной работы. На новой -- все тот же Оракл и ничего кроме него. Левые проекты продолжались, но уже вяло. Потом на основной работе начался проект на джаве, началось погружение в JEE. Delphi совсем ушел на задний план. Года с 2009 в моем окружении стал пропадать Виндовс. В 2011 закончился СПИД-Центр: их возможности совсем перестали пересекаться с моими желаниями. В 2013 закончилась приемная комиссия ОмГПУ: начальство решило, что 1С -- решение всех проблем. В 2013 же взялся за замену 1С в магазине, занимающимся мебельной фурнитурой. Почему так -- тема другого поста, наверное. Итак 2013 год. Винды нет нигде, даже в магазине мебельной фурнитуры. Там везде Убунта. Я уже лет 7 не занимаюсь Delphi. Новый проект. Чем в такой ситуации Firebird лучше, чем Postgres? Был дан ответ: ничем. Оба устанавливаются одним чекбоксом, заказчику PG даже кажется более правильным выбором, у меня есть желание покачать скилл по новой БД. Плюс на основной работе начальство озаботилось стоимостью лицензий на Оракл и решило часть нагрузки перенести на PG. Тоже в кассу оказалось. Вот так я и очутился в стане пользователей Постгреса. Стоит отметить, что в выборе PG<=>FB еще повлияло наше сообщество FB. Какое-то оно повышенно снобистское что ли. Единственный человек, кого это утверждение на 100% не касается -- Дима Еманов. Такое впечатление сложилось еще со времен NNTP-рассылки. Не помню уже даже где она была. На Epsilon? Google? Помню, ловил себя несколько раз на мысли, что если бы знал, что завсегдатаи такие грубияны, поискал бы что-нибудь другое. Просто из вредности. Когда пришлось выбирать, это тоже сыграло какую-то роль. Спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 20:08 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeПопробуй в Delphi закодить бизнес-логику на процедурах с параметрами типа string[n]. Молодой, длинные строки появились впервые в Delphi 2. До этого весь мир десятилетиями жил на строках с ограничением размера и не жужжал. Двести лет назад электричества не было. И "удобства" были во дворе, когда там минус 40. Кто-то жужжал? И без компов обходились. Скажи лучше как мне универсально для строк задекларировать функцию Quote(S), которая бы квотила мне S. Сейчас получается вот такая гадость: Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. Зы: понятно что правильный квотинг должен быть не просто слева и справа, но и с задваиванием символа " внутри строки. Но это уже к сути не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 21:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeкак мне универсально для строк задекларировать функцию Quote(S), которая бы квотила мне S. Вопросы "как мне правильно вырвать гланды через задницу" должны оставаться без ответа. Дабы не поощрять. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Alexander A. Sak> Я помню. Времени не было подумать. Ну вот подумал. > > Основной мотив -- попробовать новенького. Остальное, наверное, вторично. Спасибо. Хотя это вовсе не то, что интересно было услышать... > Там везде Убунта. Новый проект. Чем в такой ситуации Firebird > лучше, чем Postgres? Был дан ответ: ничем. Т.е. никакого выбора, фактически, не было, сменили даже не на "новенькое", а на "другое". Желание изучить новую тенологию, продукт и пр. похвально, конечно, но не как аргумент выбора. > Стоит отметить, что в выборе PG<=>FB еще повлияло наше сообщество FB. Есть такое дело, хотя преувеличивать нет смысла, да и вряд ли у PG c этим лучше (особенно по некоторым критериям). В любом случае, на фидбек и работу с СУБД это мало влияет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee, такую функцию не стоит объявлять, проще прям в запросе присоединить кавычки. Даже если не думать о том что строки как то там заполняются, то на просто на вызовах функций всё равно потеряешь производительность. В принципе я согласен с тобой в том что для процедур и функций длина строки могла бы вычисляться, в прочем как и точность numeric. Но ещё раз повторяю это задача не самая приоритетная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:14 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Симонов Денистакую функцию не стоит объявлять, проще прям в запросе присоединить кавычки. Попобуй заквотить строку: А","B Должно получиться "А"",""B", а не "А","B". Так что универсально только функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:22 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeкак мне универсально для строк задекларировать функцию Quote(S), которая бы квотила мне S. Вопросы "как мне правильно вырвать гланды через задницу" должны оставаться без ответа. Дабы не поощрять. По существу говори :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:28 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeПо существу говори :) Прикреплённая тема, ссылка дохлая, но всё же копий в сети как грязи: http://segfault.kiev.ua/smart-questions-ru.html#goal Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2014, 22:51 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeПо существу говори :) Прикреплённая тема, ссылка дохлая, но всё же копий в сети как грязи: http://segfault.kiev.ua/smart-questions-ru.html#goal Я вопрос задал именно тот, который интересен. Применить этот Quote можно например если хочется быстро закачивать большие датасеты на клиента, если не по локалке работать. Код: sql 1. Это может быть драматически медленно :) Заменяем на: Код: sql 1. Получаем профит. На клиент придёт одна запись из 7 блобов, без большого кол-ва "туда-сюда пакетов". Нужно будет извлечь данные полей, что даже для миллиона записей будет менее одной секунды. В полях Address, Phones и Description могут быть как запятые, так и кавычки. Поэтому в запросе мы используем функцию Quote, мегасупербыструю и универсальную (о ней я тебя и спрашиваю). Код на клиенте примерно такой: Код: pascal 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. 31. 32. 33. 34. 35. Ещё его можно применить когда нужно выгрузить данные для экспорта куда-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 00:16 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeНа клиент придёт одна запись из 7 блобов, без большого кол-ва "туда-сюда пакетов". Вот только 7 блобов это и есть "большое количество туда-сюда пакетов". Гораздо быстрее будет на той стороне выгрузить все данные в файл и уже этот файл упаковать и передавать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 00:30 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeНа клиент придёт одна запись из 7 блобов, без большого кол-ва "туда-сюда пакетов". Вот только 7 блобов это и есть "большое количество туда-сюда пакетов". Гораздо быстрее будет на той стороне выгрузить все данные в файл и уже этот файл упаковать и передавать. если между list поставить "|| ASCII_CHAR(13) || ASCII_CHAR(10) ||", то получится один блоб. Разве один блоб тоже будет неэффективно передан? Про упаковать согласен. Ещё функцию Pack в select добавить, и чтобы возвращала бинарный блоб. Вот кстати для выгрузки в csv: Код: sql 1. 2. 3. Поэтому вынь да положь нам быстрый Quote :) Или ещё примеров накидать? :) Это уже тогда троллинг будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:03 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeРазве один блоб тоже будет неэффективно передан? Да, он будет передан менее эффективно чем упакованный файл по HTTP протоколу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:13 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeРазве один блоб тоже будет неэффективно передан? Да, он будет передан менее эффективно чем упакованный файл по HTTP протоколу. А если блоб тоже будет упакован? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:17 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeА если блоб тоже будет упакован? Закачка в несколько потоков, восстановление при разрыве - всё это умеет HTTP, но не Firebird. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:18 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeА если блоб тоже будет упакован? Закачка в несколько потоков, восстановление при разрыве - всё это умеет HTTP, но не Firebird. Но ведь сервер может положить блоб в табличку. А клиент может скачать этот блоб из таблички в несколько потоков, разве нет? И при разрыве связи продолжить скачивать с нужного места... раз уж мы начали мыслить широко :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:25 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeА клиент может скачать этот блоб из таблички в несколько потоков, разве нет? Нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:26 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee> Заменяем на: Ты умудрился исгадить насущную, в общем-то, необходимость совершенно идиотским примером. Именно в таких случаях и говорят, что нефиг, ибо голову расшибёте. (с) > На клиент придёт одна запись из 7 блобов, без большого кол-ва "туда-сюда пакетов" Как уже сказали - ошибаешься. Ещё интересно, зачем решать несколько другую задачу такими непредназначенными для неё методами, вместо накопления блобов/бинарников/ХМЛ и пр., поклонниками которых ты являешься. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:27 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee> А клиент может скачать этот блоб из таблички в несколько потоков, разве нет? Точно нет. NickDee> И при разрыве связи продолжить скачивать с нужного места Тоже нет. Вернее, это зависит не совсем от FB, а скорее от сетевой подсистемы, настроек и пр. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:28 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТы умудрился исгадить насущную, в общем-то, необходимость совершенно идиотским примером. Вот же хороший пример про экспорт: 16486456 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:29 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> А клиент может скачать этот блоб из таблички в несколько потоков, разве нет? Точно нет. NickDee> И при разрыве связи продолжить скачивать с нужного места Тоже нет. Вернее, это зависит не совсем от FB, а скорее от сетевой подсистемы, настроек и пр. Т.е. я не смогу создать 10 коннектов и утянуть в каждом по 1/10 блоба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:31 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeГаджимурадов РустамТы умудрился исгадить насущную, в общем-то, необходимость совершенно идиотским примером. Вот же хороший пример про экспорт: 16486456 Да и не думаю я что насущность может быть изгажена неудачным примером. Насущность никуда не делась. Или ты всё-таки чувствуешь что "всё, пипец, не надо. Говнопример всё испортил"? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:39 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeНасущность никуда не делась. Она давно уже не существует. С появления утильки под названием FBExport. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:42 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeНасущность никуда не делась. Она давно уже не существует. С появления утильки под названием FBExport. ты уже троллишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDee> Вот же хороший пример про экспорт: 16486456 Я его видел. Та же чепуха. NickDee> Т.е. я не смогу создать 10 коннектов и утянуть в каждом по 1/10 блоба? Ааа, ты таким макаром имел в виду. ХитрО, в твоём стиле. Но нет, сегментированные точно не получится, а потоковые - не знаю, ими вроде итак никто не пользуется (это надо уже у Влада/ДЕ уточнять - можно ли расшарить БЛОБ или читать кусками с указанием нужного смещения, думаю что нельзя). NickDee> Или ты всё-таки чувствуешь Нет, я сказал то, что сказал - не каждой обезьяне можно доверить гранату. Даже игрушечную. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 01:59 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНет, я сказал то, что сказал - не каждой обезьяне можно доверить гранату. Даже игрушечную. :) Тролльнуть решил напоследок? :) Что за ночь блин :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 02:22 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
NickDeeбез разницы по чему сортировать, хоть по ID, всё-равно запись в памяти хранится по объявленной в метаданных длине.В общем, это... товарищ NickDee! Уламывай как сможешь dimitr'a, чтобы он портировал фикс к CORE-4528 в 2.5. Вот тебе достаточно широкая таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И вот два варианта получения из неё кортежей, упорядоченных по полю `y`: var-1. Революцьонная сортировка с join'ом по rdb$db_key: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. var-2. Обычный стиральный порошок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. И получаем: trace для var-1 : 4942 ms, без всякого превышения TempCacheLimit'a Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 8073 ms, общий расход TempSpace - около 3 Гб Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ну, и напоследок - результаты в isql (mon$memory_usage.max_memory_xxx): var-1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. var-2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Как говорится: кому надо - сам поймёт, куда дальше строчить письмена... ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2014, 14:40 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
ТаблоидУламывай как сможешь dimitr'a, чтобы он портировал фикс к CORE-4528 в 2.5.Кажись, не надо уламывать :-) Судя по SF.net SVN: firebird:[59999] firebird/branches/B2_5_Release: автор+ 2014-08-25 13:40 dimitr + M src/jrd/Optimizer.cpp +Fixed CORE-4530: DB_KEY based join of two tables may be ineffective.- всё теперь там будет хорошо, заживём по-новому! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2014, 18:36 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Таблоидзаживём по-новому это только тебя, извращенца, интересуют обходные пути. Все остальные в этом топике хотят, чтобы летало "искаропки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2014, 18:48 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Hello, Dimitr! You wrote on 26 августа 2014 г. 19:04:49: DimitrТаблоид> заживём по-новому > это только тебя, извращенца, интересуют обходные пути. Все остальные в > этом топике хотят, чтобы летало "искаропки". я даже больше скажу. восходит на востоке, заходит на западе - НИЧЕГО НЕ НАДО ТРОГАТЬ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2014, 19:07 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
> Автор: NickDee > > Т.е. я не смогу создать 10 коннектов и утянуть в каждом по 1/10 блоба? > substring ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2014, 23:54 |
|
||
|
Опять про varchar(n)
|
|||
|---|---|---|---|
|
#18+
Сисдба Мастеркеевич> substring ? Это будут 10 отдельных разных БЛОБов, а не оригинальный. Хотя технически - да, на клиенте их можно будет склеить и получить идентичный (по содержимому) с оригиналом (но всё равно другой). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2014, 01:49 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563372]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 480ms |

| 0 / 0 |
