[Comm] Re: Еще о локали utf-8 и файле Compose
Aleksey Avdeev
=?iso-8859-1?q?solo_=CE=C1_solin=2Espb=2Eru?=
Чт Янв 29 11:34:49 MSK 2004
Денис Смирнов пишет:
> On Wed, Jan 28, 2004 at 08:58:15PM +0300, Aleksey Avdeev wrote:
>
> > Критичность зависит от объёма и скорости его роста: для БД
> > растущих со скоростью несколько (10, 100 и т. д.) гиг в месяц -
> > уже может быть критично.
>
> И это всё текстовые данные? Тогда опаньки, там действительно надо
В некоторых случаях да. Например телеметрия от цифровых
телефонных станций (уровня ГТС).
> применять много разных мер по экономии пространства. Но такие задачи
> меньшинство, а для большинства эти потери не критичны. А когда критичны,
Что считать большинством, а что меньшинством? Каждый судит со
своей колокольни. :-)
> то уже надо совсем менять принципы хранения, например использовать сжатие
> со словарём частоповторяемых образцов, lzo, возможно какой-то набор
> эвристик для улучшения сжимаемости текста (типа замены uppercase на
> спецсимвол перед буквой, при том после точки этот символ добавляется
> исключительно если буква изначально была наоборот маленькая) и много
> других средств увеличения эффективности. Речи о выборе между utf-8 и 8-и
> битными кодировками там и не идёт -- может оказаться по каким-то причинам
> удобнее сформировать даже свою кодировку.
Это уже решения уровня движка БД (или модулей к ниму). Реально:
1. Далеко не всегда есть средства для реализаций решений такого
уровня.
2. Если требуется обеспечить переносимость продукта между
различными БД - цена данного решения возрастает многократно.
А решение хранить данные в 8 битной кодировке может принять
архитектор БД. И оно будет достаточно оптимальным, особенно если
известен характер хранимых данных (то, что 8 бит - достаточно).
>
> Именно поэтому обсуждать такие решения в контексте реений общего
> назначения я считаю бессмысленным.
А я считаю бессмысленным в контексте решений _общего_ уровня
закладываться на юникод, когда большенство задач неплохо
укладывается в 8 бит: _зачем_ транжирить ресурсы аппаратуры по
пусту? ;-)
Но, разумеется, юникод имеет смысл когда требуется хранить
данные не укладывающиеся в 8 бит. И обработку в приложениях (и в
серверах приложений) - тоже имеет смысл делать юникодными: в
отличии от БД они _не_ ворочают гигами данных (если ворочают -
значит фигово спроектированы, ИМХО разумеется).
Но опять, вопрос упирается в: Что считать _общим_ уровнем? ;-)
>
> >>(319371 - 273723) / 273723 * 100 ~= 16% (для gzip -9)
> >>(212953 - 205139) / 205139 * 100 ~= 3% (для bzip2 -9)
> >>То есть увеличение объёма составит 3% при использование bzip2.
> > Согласен. Но в некоторых случаях на ленту льют не сжимая:
> > bzip2 -9 длительная и ресурсаёмкая операция, при больших объёмах.
>
> Дело отнюдь не в объёмах, а в скоростя стриммера и процессора. И, в любом
> случае, если появляются такие проблемы, то это также неординарная
> ситуация.
>
> >>> 3. скорость обработки (в том числе - полнотекстовый поиск)
> >> А индексы на что?
> > Проиндексировать каждое слово не всегда возможно. + любые
> > индексы хороши, когда _заранее_ известно что надо искать.
>
> Ну хоть что-то заранее известно. Или делается полнотекстовый поиск по
> сотням гигабайт plain text? Ой мама...
Почему именно plain text? Кодировка БД влияет на _все_
текстовые поля. И текста _читаемого_человеком_ может быть очень
мало, по сравнению с остальными _текстовыми_ данными. :-)
>
> >>> 4. поддержка индексов (объёмы + скорость поиска)
> >> Бр-р-р-р-р. Индексирование строк без хэшей?
> > Иногда - да: когда двоичные деревья рулят, например. Или
> > когда выгодно вытащить данные из индекса, не обращаясь к самой
> > таблице. Или когда таблица уже упорядочена.
> > На самом деле в каждом случяи надо разбираться особо: смена
> > типа индекса иногда меняет скорость доступа в разы. И хеш -
> > далеко не всегда оптимальный (они однозначно рулят, когда
> > хеш-таблица в память помещается _полностью_).
>
> Причём тут это? В узлах дерева могут быть _строки_, а могут быть _хэши_ от
> этих строк. И если используется именно первое, то это будет тормозить
> (попарное сравнение строк и 32/64 бит целых чисел, после которых
> происходит сравнение срок только если хэши оказались одинаковыми, это
> большая разница).
Кроме случаев поиска по _части_ строки - тогда хеши идут
лесом. ;-)
>
> > При больших таблицах (не вмещающихся в _физическую_ память)
> > сильно отражается: уменьшение количествы строк на странице БД
> > повышает количество дисковых операций. А если учесть, что если
> > запрос затрагивает больше некоторого порога строк (10-30% или
> > 5%-10%, точнее непомню: давно доку на Oracle не смотрел) то
> > выполнение запроса полным перебором таблицы часто _выгодней_
> > индексного.
> > >И не будет иметь до тех пор, пока объёмы баз данных не станут превышать
> > >хотя бы сотню гигабайт (SCSI HDD такого размера, что его стоиомть
> > >становится сколь-либо существенной).
> > Весьма правильный подход! Просто в разных случаях, разные
> > параметры имеют первоочередное значение.
>
> Именно так. Собственно речь идёт о том, что сейчас юникод не имеет никаких
> причин, кроме унаследованого софта, чтобы не стать основным средством
> (применимым в большинстве практических задач).
Не факт. Средством обработки - да. Средством хранения -нет
(кроме случая когда данные не укладываются в 8 бит, разумеется):
зачем выбрасывать _половину_ диска? ;-) (Собственно опять: ЧТО
считать _большинством_ практических задач? ;-))
Повторюсь: БД данные не обрабатывает - она их _хранит_ и
предоставляет к ним относительно быстрый доступ.
--
С уважением. Алексей.
Подробная информация о списке рассылки community