Посты с тегом веб (44)

Красивая композиция

Нет, я не про музыку решил написать. А про композицию данный, агрегацию если хотите.

В джанге на данный момент агрегации в ORM нет. Но как известно скоро должна появиться, а значит жизнь в очередной раз станет проще.

Зачем?

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

Денормализация - это добавления избыточности данных для увеличения производительности чтения данный. Обычно чтение данных требуется гораздо чаще чем их запись, а значит на запись в принципе можно потратить чуть больше времени, за-то потом много раз сэкономить на выборке. Агрегацию я привел в качестве, наверно, самого популярного источника данных для денормализации, но ею конечно не ограничивается применение денормализации. Суть в том, что лучше что-то тяжелое посчитать при записи и сохранить, чем каждый раз при чтении пересчитывать заново.

Наверно многие из вас в своих проектах писали код наподобие такого, тем более, если писали "свой блог движок":

class Post(models.Model):
   comment_count = models.PositiveIntegerField(default=0)

class Comment(models.Model):
   post = models.ForeignKey(Post, related_name="comments")

   def save(self):
      super(Comment, self).save()
      self.post.comment_count = self.post.comments.count()

   def delete(self):
      super(Comment, self).delete ...

Слишком много дров точка ком

За проектом StackOverflow я наблюдал уже достаточно давно. Слушал подкасты о процессе разработки и ждал когда же увидит свет этот новый сервис. Гений его авторов позволил сделать грамотный ресурс для поиска ответов на разные программистские вопросы.

Для себя я сразу отметил два тега за которыми можно последить - python и django. Там среди кучи достаточно банальных вопросов попадаются и те, что из разряда - "я бы тоже не прочь почитать ответы". И пока, даже сообщество не до конца сформировалось, всё равно есть что почитать.

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

Рождение Django 1.0

Ну вот. Даже как-то грустно. То чего все мы так долго ждали наконец свершилось. Джанга родилась в своем релизном варианте с гордым "1.0" на ярлыке.

Почему грустно? Да потому, что тот темп, с которым менялась джанга последний год(с лишним), приучил нас быть всегда в тонусе, следить за изменениями, подстраиваться под них и как-то менять своё видение этого чудесного фреймворка. А что теперь? Мне кажется что темп упадет, а значит и драйв обитания на trunk будет не такой как раньше.

Ну ладно с ним с драйвом, будем искать в других областях. Важно то что наконец джанга должна приобрести общепризнанный статус production/enterprise-ready и пойти в массы с ещё более быстрыми темпами. Компании (конечно в большей степени управленцы в них), которые раньше на этапе выбора платформы и инструмента воротили нос от продукта, который был, как им казалось, не готов для боевого применения, сейчас начнут пересматривать свои воззрения, и уже для новых проектов боле пристально смотреть на джагу как на реального кандидата в освоении и применении. Я на это надеюсь по крайней мере. Пусть для многих смелых и разумных, уже давно джанга вполне была готовой к бою, но всё равно оставались сомневающиеся.

Так же теперь в споре на лидерство на рынке ...

Горизонтально, вертикально и вперемешку

Недавно очень ясно осознал на собственном опыте, насколько же разными могут быть структурные модели XML. Разные они и по восприятию, и удобству обработки, и простоте создания. Но о вопросах генерации я могу только догадываться и предполагать, поскольку особо этим не занимался никогда, то про обработку могу действительно поделиться некоторыми мыслями, которые меня посетили после продолжительного периода "ковыряния" различных XML структур данных.

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

Вертикальная модель подразумевает активное использование дочерних элементов. Из-за этого документ получается более "толстым". Причем зачастую. использование дочерних элементов не очень оправдано. Они не используются как контейнеры для других элементов и даже CDATA там не хранится. А читать труднее. Хотя и появляется некая древовидная структура, но достаточно вырожденная и почти плоская. Ну и много "паразитной" разметки получается как следствие.

На практике выходит, что придерживаться только одного стиля не получает у схема-составителей. Обычно приходится иметь дело с гибридной моделью. Где вполне себе подчиненные логике мета-данные вынесены в атрибуты, другие же почему-то в дочерние элементы. Иногда кажется, что просто для ...

А вы поймали новые сигналы?

Вчера джанга сделал ещё один существенный шаг на пути к долгожданному релизу 1.0. На этот раз посчастливилось обновиться инфраструктуре сигналов. Основное и главное отличие новой подсистемы сигналов - это почти двукратное увеличение производительности.

Исторически сигналы в джанге были сделаны на базе пакета pyDispatcher. который почти без изменений был скопирован в django.dispatch. Со временем выяснилось, что он избыточен и медленен.

Сигналы практически везде пронизывают код джанги. Повесить обработчик можно и на изменение объекта, и на начало и конец обработчик запроса и рендеринг шаблона и много чего ещё. Причем они не только предоставляют некий интерфейс взаимодействия с внешним миром, но и активно применяются внутри самой джанги. Например, удаление загруженных файлов вслед за объектами и закрытие соединения с базой при завершении обработки запроса(!).

Понятно, что производительность всей подсистемы сигналов очень важна и напрямую влияет на скорость отклика приложения. Хотя многие разработчики и не особо их используют в своём коде, а некоторые даже говорят, что они не нужны, всё равно они играют значимую роль в общей производительности. А если ещё вы их активно применяете, как это делаю я для умного кеширования, то вопрос улучшения работы сигналов касается нас очень сильно.

Возможности погонять тесты у меня нет, так что поверим разработчикам на слово. Лучше ...