Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
Подскажите, пытаюсь создать таблицу с кол-вом полей 65

Если win1251, то все норм, если utf8, то не дает пишет (это логично):

автор
Statement failed, SQLSTATE = 54000
unsuccessful metadata update
-new record size of 72162 bytes is too big
-TABLE TABLE1


Я так понял это из-за ограничения - Максимальный размер строки - 64kb ?

Вопросы:
- Правильно ли я понимаю причину?
- Что делать (или только делить таблицу на несколько)?
- Поможет ли увеличение размера страницы?

текущий PAGE_SIZE 4096
17 авг 19, 15:12    [21951746]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
antox,

- да
- правильно проектировать базу данных
- нет

З.Ы. Размер страницы увеличь в любом случае, например до 8K.
17 авг 19, 16:11    [21951774]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
А можно увеличить размер в уже существующей базе?
17 авг 19, 16:16    [21951776]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
antox,

можно через backup/restore
17 авг 19, 16:24    [21951780]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
ёёёёё
Member

Откуда:
Сообщений: 740
antox,

Укороти отдельные строковые поля до реально нужных размеров.
Для длинных полей используй тип "блоб текст" - все равно по таким полям поиск обычно идёт без индексов ("похож", "включает").
Разбей табличку на несколько 1:1.
Вынеси логически связанные данные в отдельную сущность, https://support.microsoft.com/ru-ru/help/283878/description-of-the-database-normalization-basics
17 авг 19, 17:04    [21951789]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
ёёёёё
Member

Откуда:
Сообщений: 740
antox,

еще можно на другую СУБД перейти. У посгтре, например, размер поля до 1ГБ, а размер записи - до 1.6ТБ.
17 авг 19, 17:23    [21951793]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

Ну или просто на четвёртую версию. Хотя я не помню какой из лимитов там снят: на запись в
таблице или на результат выборки. Может даже и оба два.

Posted via ActualForum NNTP Server 1.5

17 авг 19, 18:12    [21951803]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
ёёёёё,

Переходить никак не хочется. Странно, что у FB не так, как у постгре
17 авг 19, 18:17    [21951805]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
Dimitry Sibiryakov,

4 же ещё нет... Ждём )
17 авг 19, 18:20    [21951806]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
ёёёёё
Member

Откуда:
Сообщений: 740
Dimitry Sibiryakov
Ну или просто на четвёртую версию. Хотя я не помню какой из лимитов там снят: на запись в
таблице или на результат выборки. Может даже и оба два.

Вроде как оба прежние, не? Max Page sized на ODS 13 был до 32 КБ увеличен, да длина идентификаторов.
17 авг 19, 18:23    [21951807]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

ёёёёё
Вроде как оба прежние, не?

Нет. Выборка там точно может быть шире 64к, ибо я это тестил. А вот насчёт записи в
таблице я не уверен.

Posted via ActualForum NNTP Server 1.5

17 авг 19, 18:30    [21951809]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Dimitry Sibiryakov,

выборка > 64K сделана ещё в тройке. Ты же сам там кое-что правил
17 авг 19, 18:32    [21951811]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3969
ёёёёё
размер записи - до 1.6ТБ.
17 авг 19, 18:55    [21951823]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
hvlad
Member

Откуда:
Сообщений: 10531
antox
Подскажите, пытаюсь создать таблицу с кол-вом полей 65
Дальше можно не читать
17 авг 19, 19:03    [21951824]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
ёёёёё
Member

Откуда:
Сообщений: 740
hvlad
antox
Подскажите, пытаюсь создать таблицу с кол-вом полей 65
Дальше можно не читать

Чего так?
17 авг 19, 19:12    [21951826]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
ёёёёё
Member

Откуда:
Сообщений: 740
Dimitry Sibiryakov
ёёёёё
Вроде как оба прежние, не?

Нет. Выборка там точно может быть шире 64к, ибо я это тестил. А вот насчёт записи в
таблице я не уверен.


Не получается больше 63 полей создать, на снапшоте проверил.

execute block
(cnt int = :cnt)
as
declare variable S varchar(32000);
declare variable FCNT int;
begin
  S = 'create table t' || CNT || '(';

  FCNT = 1;
  while (FCNT <= CNT) do
  begin
    S = S || 'f' || FCNT || ' char(1024)';
    if (FCNT < CNT) then
      S = S || ',';
    FCNT = FCNT + 1;
  end
  S = S || ');';
  execute statement S;
end;
17 авг 19, 19:33    [21951827]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
ёёёёё,

речь о ширине резалтсета, а не о количестве полей или размере записей
17 авг 19, 19:40    [21951829]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
hvlad
Member

Откуда:
Сообщений: 10531
ёёёёё
hvlad
пропущено...
Дальше можно не читать

Чего так?
Тут всё сказано 21951774
17 авг 19, 20:10    [21951839]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
hvlad
antox
Подскажите, пытаюсь создать таблицу с кол-вом полей 65
Дальше можно не читать


Предрассудки )

Прекрасно удобнее 65, значит так и должно быть! Разбивать на таблицы 1:1 не вижу смысла никакого. В таблице уникальные характеристики одного объекта, зачем выносить под разным таблицам!?
18 авг 19, 03:43    [21951883]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
*мне удобнее 65...
18 авг 19, 03:44    [21951884]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
hvlad
ёёёёё
пропущено...

Чего так?
Тут всё сказано 21951774


Ну, остальное мысли на тему )
18 авг 19, 03:45    [21951885]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
antox
Member

Откуда: РФ
Сообщений: 1050
Симонов Денис,

А чем вызвана необходимость такого минимального ограничения?
18 авг 19, 03:46    [21951886]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
antox
А чем вызвана необходимость такого минимального ограничения?


ещё раз. Нет такого ограничения на количество столбцов в таблице. Есть ограничения на максимальную длину записи в 64 К. Ограничение это появилось ещё во времена Interbase. Чем это продиктовано хз, но наверное были причины.

antox
Разбивать на таблицы 1:1 не вижу смысла никакого. В таблице уникальные характеристики одного объекта, зачем выносить под разным таблицам!?


и все столбцы конечно же символьного типа? Что прям без ссылок на другие таблицы (справочников нет)?
Или у вас там всякая чепуха типа VARCHAR(10000)?
18 авг 19, 11:58    [21951940]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28117
antox
Разбивать на таблицы 1:1 не вижу смысла никакого. В таблице уникальные характеристики одного объекта, зачем выносить под разным таблицам!?

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

Так вот. "Вторичные" столбцы выносятся в отдельную таблицу, связанную с основной 1:1.
Это не совсем про "лимит записи в 64к", а про производительность.
Например, если речь идет о таблице с регистрационной информацией юзера на каком-нибудь сервисе, то первичными данными являются ID, nickname, плюс еще что-то. Вторичными являются адрес, телефон, город, пол, ФИО, и прочая информация, которая в некоторых случаях может быть не заполнена вообще никогда. Это означает, что в основной таблице запись для такого пользователя будет, а во "вторичной" таблице соответствующей записи не будет, экономится место.
И, первичная таблица получается "короткой", к ней быстро идут обращения, быстрее идут ее джойны с другими таблицами, и т.д.
18 авг 19, 13:11    [21951959]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8347
Еще бывает параллельное занесение данных разными операторами (роботами, датчиками) на одну сущность, тогда выгоднее разнести в разные таблицы чтобы уйти от дэдлоков.

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

Апдейтебл вьюху уже предлагали?

antox
мне удобнее 65...
Есть у нас такое тяжелое наследие, хорошего мало, по факту ни разу не удобно.
19 авг 19, 11:49    [21952330]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8347
Симонов Денис
Или у вас там всякая чепуха типа VARCHAR(10000)?
десять тыщщ уже семи по себе в юникод ее втискиваются. :)
19 авг 19, 11:51    [21952333]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Ivan_Pisarevsky,

ну VARCHAR(8191). Сути вопроса это не меняет.
Я о том что таблицы > 65 столбцами создать вполне реально. Вопрос в используемых типах.
19 авг 19, 11:56    [21952339]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30321

19.08.2019 11:56, Симонов Денис пишет:
> Я о том что таблицы > 65 столбцами создать вполне реально.

учитывая уровень ТС, и 100 столбцов не передел не предел мечтаний...

Posted via ActualForum NNTP Server 1.5

19 авг 19, 12:01    [21952352]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Arioch
Member

Откуда:
Сообщений: 10967
Мимопроходящий,

ну а как ещё шахматку делать?
19 авг 19, 14:38    [21952544]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8347
Arioch
ну а как ещё шахматку делать?
Обрыв там, но вам туда можно.
19 авг 19, 14:45    [21952551]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30321

ну а чо, на 365 дней - соответственное число полей

Posted via ActualForum NNTP Server 1.5

19 авг 19, 14:54    [21952558]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
akrush
Member

Откуда: Киев, Украина
Сообщений: 352
Есть у меня одна таблица - 74 столбца (половина Smallint, половина decimal(9,4))
И ничего страшного. Все работает.
Чуть раньше приведен код, генерация скрипта на создание таблицы. Там все поля char(1024)
Скорее всего из-за этого и ошибка.
Думаю если сделать более реальный размер поля, как уже советовали, проблема может решиться
20 авг 19, 10:36    [21953116]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Arioch
Member

Откуда:
Сообщений: 10967
Мимопроходящий,

....вот такие у нас DBA

366, дерёвня! Хорошо, что в FB ALTER TABLE есть, подчищай всегда за тобой
20 авг 19, 10:47    [21953124]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Arioch
Member

Откуда:
Сообщений: 10967
кстати, да, у нас ведь SQL - язык множеств, так? так почему в нём нету вычитания множества столбцов ?

SELECT ( * - {FEB_29} ) FROM CROSS_TAB_DATA

неудобно!
20 авг 19, 10:49    [21953129]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Коваленко Дмитрий
Member

Откуда: Липецк
Сообщений: 548
akrush
Есть у меня одна таблица - 74 столбца (половина Smallint, половина decimal(9,4))
И ничего страшного. Все работает.

Однажды лебедь раком щуку ...
20 авг 19, 11:27    [21953198]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30321

20.08.2019 11:27, Коваленко Дмитрий пишет:

> Однажды лебедь раком щуку ... <https://firebirder.ru/fb3-max-row-size>

ты сломал мне все(две) извилины!

Posted via ActualForum NNTP Server 1.5

20 авг 19, 11:41    [21953221]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 16403
Коваленко Дмитрий,

Так и чем кино закончилось?
20 авг 19, 11:49    [21953234]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Коваленко Дмитрий
Member

Откуда: Липецк
Сообщений: 548
WildSery
Коваленко Дмитрий,

Так и чем кино закончилось?

Да как обычно ... с участием коня.
21 авг 19, 11:10    [21954126]     Ответить | Цитировать Сообщить модератору
 Re: База в UTF8 таблица 50+ полей ~72000 byte  [new]
Vlad F
Member

Откуда:
Сообщений: 873
Коваленко Дмитрий,

Но а в трекер то успел занести прежде, чем конь подкрался?
21 авг 19, 13:23    [21954352]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Firebird, InterBase Ответить