пятница, 12 сентября 2008 г.

Оптимизатор в Firebird 2.1

Прошло одно изменение без особого внимания, но оно может очень влиять на производительность при переходе со старых версий. В композитных индексах теперь считается селективность для каждого сегмента отдельно, что по логике правильнее, но в редких случая может менять порядок таблиц в соединении кардинально:

Selectivity Maintenance per Segment
D. Yemanov, A. Brinkman
Index selectivities are now stored on a per-segment basis. This means that, for a compound index on columns
(A, B, C), three selectivity values will be calculated, reflecting a full index match as well as all partial matches.
That is to say, the selectivity of the multi-segment index involves those of segment A alone (as it would be if it
were a single-segment index), segments A and B combined (as it would be if it were a double-segment index)
and the full three-segment match (A, B, C), i.e., all the ways a compound index can be used.
This opens more opportunities to the optimizer for clever access path decisions in cases involving partial index
matches.
The per-segment selectivity values are stored in the column RDB$STATISTICS of table RDB
$INDEX_SEGMENTS. The column of the same name in RDB$INDICES is kept for compatibility and still
represents the total index selectivity, that is used for a full index match.


и если была таблица documents(...doc_state int, doc_date ... ) c индексом по (doc_state, doc_date), то теперь, при условиях по doc_state, будет браться селективность не всего композита(а она могла из-за даты быть достаточно неплохой), а только поля doc_state.

четверг, 4 сентября 2008 г.

Microsoft runtime и Firebird Embeded 2.1.1

Для возможности x64 билдов разработчики Firebird перешли на vc8, что потянуло за собой, в принципе уже привычную, проблему распространения vc runtime.

Но учитывая теперешний зоопарк ОС, технологий совместимости 32/64, попыток решения dll хелл, и вообще постижения Дао от МС, деплоймент этого runtime становится очень непростым.

Он, рантайм 8-ой версии, не идет, пока, в поставки никакх ОС - и Висте его тоже нет(по меньшей мере до SP).

Первое - для правильной установки, как это рекомендует МС, нужны права Администратора. А для установки на win2k до SP1 - обновление инсталятора МС до 3.1

Для интеграции этого redist себе в инсталятор - нужно делать msi инсталяторы, создание которых в корректном виде не самое простое занятие, для котрого хороших
свободных инструментов вроде как и нет, и опять таки необходимы права администратора.

В принципе на первый вгляд проблем быть не должно - что стоит поставить этот рантайм,
когда разворачивается сервер СУБД. Но тем, кто пытается распространять shareware системы, особенно с FB embeded, приходится хуже - необходимо тянуть этот рантайм со своим приложением.

Есть три пути его поставки:
  1. Официальный.
    Устанавливаем инсталятором от MS и все работает. Не подходит, если нет гарантии наличия админских прав у пользователей, наличия Windows Installer 3.0 or later, portable решения.
  2. Экстенсивный.
    Поставляем со своим приложением просто необходимые бинарники рантайма. Так делает, впрочем, большинство софта - стоит только поискать msvcr80.dll по жесткому диску :)). Но, поставлять нужно ТРИ копии рантайма, одну для работы самого fbembed, вторую в каталоге intl для fbintl и третью в для подключаемых функций в каталоге udf.
  3. Хитро-экстенсивный.
    Пользуясь текстовой природой манифестов, в каталогах intl и udf оставить только манифест, с измененными путями к файлам вида:

    <file name="..\msvcr80.dll">
    <file name="..\msvcp80.dll">

    ВАЖНО, в таком случае указать в манифесте своего приложения зависимость от Microsoft.VC80.CRT.

    такой манифест представляет собой текстовый файл <FullAppName>.manifest с содержимым:
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <dependency>
    <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
    </dependency>
    </assembly>

    Этот манифест можно включить в ресурсы самого приложения, см. например


Ссылки:

вторник, 2 сентября 2008 г.

Не используйте сlass helper's?

Не сказать, что я их когда-то использовал, но вот встретился материал:

http://www.deltics.co.nz/blog/?p=282

Суть в том, что если в проекте объявлено два хелпера к одному классу, то использоваться будет ТОЛЬКО один, но какой именно - не известно(зависит от порядка юнитов и т.п.).

Так что можно поиметь плавающих ошибок на ровном месте...

среда, 13 августа 2008 г.

Случайная запись с учетом "веса"

Встретилось вот в конференции:

WildSery wrote:
> вот одно элементарное решение.
> заводим таблицу WEIGHT(weight int) и заполняем её числами от 1 до <максимальный вес>
> затем нужное нам "случайное с учётом веса" получаем как
>
> select first 1 t.id
> from table1 t
> join weight w on t.weight >= w.weight
> order by rand()

Ну типа идея такова - для таблицы TABLE1, откуда нужно получить случайный ID, размножаем строки согласно "веса".
Если "вес" равен 1 - будет 1 строка, если "вес" 10 - будет 10 строк, соответственно, вероятность, что попадётся именно этот ID, в 10 раз выше, чем для "веса" 1.

--
Сергей Смирнов.

среда, 19 марта 2008 г.

Установка activerecord-firebird-adapter через gem

Так, для общего развития решил поглядеть на RoR. И на первом же повороте споткнулся - упорно не ставился адаптер для Firebird, который в один прекрасный момент был исключен из базовой поставки :-/

Часто встречающиеся рекомендации установить его успеха не принесли:
C:\servers\rail\rails_apps\norg>gem install activerecord-firebird-adapter
ERROR: could not find activerecord-firebird-adapter locally or in a repository

Заработало только с каким-то хитрым ключом -s, хотя по блогам все хором утверждают что это лишнее:
C:\servers\rail\rails_apps\norg>gem install activerecord-firebird-adapter -s http://gems.rubyonrails.org

вторник, 18 марта 2008 г.

Обход права на имя для служебных произведений

Нашел ответ на вопрос как обходится право автора на указание имени - мы ведь редко когда видим, кто разработчик проприетарного софта, верно? (хотя статья неплохая, и там еще полезное есть)

"Особенности найма сотрудников, создающих объекты интеллектуальной собственности"
http://www.osp.ru/cio/2008/01/4744776/prinver.htm

Право на имя
Существует важный вопрос, касающийся одного из неимущественных авторских прав на служебные произведения, — права на имя. С правом на имя связана ситуация, когда компания-работодатель не желает указывать имен авторов продукта (компьютерной программы, дизайна, аналитического обзора и т.п.). В этом случае в договоре принято писать, что сотрудник отказывается от своего права на имя. Но такая запись является юридически ничтожной, так как находится в явном противоречии с текущим законодательством. Дело в том, что неимущественные авторские права неотторжимы, и от них, вообще говоря, невозможно отказаться. Соответственно, описанный подход не позволяет решить проблему обязательного указывания имен авторов продукта. Тем не менее, задача вполне разрешима — требуется лишь указать в договоре, что сотрудник пользуется своим правом на анонимность, просит не указывать его имени и передает компании-работодателю полномочия по защите остальных его неимущественных прав.

суббота, 9 февраля 2008 г.

Firefox, орфография и погибающая ё

Свежепоставленный лис все слова, в которых вместо законной, но редкоиспользуемой ё используется е помечал как ошибочные, требуя канонического написания. Сколько-то это терпелось, но когда пришлось активно работать с Доксами гугловскими терпению пришел конец. Решение нашлось в виде альтернативного словаря.
http://forum.mozilla-russia.org/viewtopic.php?id=15316

четверг, 17 января 2008 г.

Cannot attach to services manager при ресторе через IBExpert

В то же время как бекап проходит нормально.
FB 2.0 SS

Скорее всего, что путь к БД указывается локальный, без имени сервера, а в таком виде(тобишь по локальному протоколу), сервисы в 2.0 почему-то не работают.