• Как FriendFeed использует MySQL для хранения данных без схемы

    • Translation

    Условия


    Мы используем MySQL для хранения любых данных FriendFeed. Наша база данных растёт вместе с числом пользователей. Сейчас у нас более 250 миллионов записей, это записи пользователей (post'ы), комментарии, оценки («likes»)

    По мере того как росла база данных, мы время от времени имели дело с проблемами масштабируемости. Мы решали проблемы стандартными путями: slave-сервера, используемые только для чтения, memcache для увеличения пропускной способности чтения и секционирование для увеличения пропускной способности записи. Однако, по мере роста, использованные методы масштабируемости привели к затруднению добавлению новой функциональности.

    В частности, изменение схемы базы данных или добавление индексов к существующим 10-20 миллионов записей приводили к полной блокировке сервера на несколько часов. Удаление старых индексов требовало времени, а не удаление ударяло по производительности, так как база данных продолжала использовать их на каждом INSERT. Существуют сложные процедуры с помощью которых можно обойти эти проблемы (например создание нового индекса на slave-сервере, и последующий обмен местами master'a и slave), однако эти процедуры настолько тяжелые и опасные, что они окончательно лишили нас желания добавлять что-то новое, требующее изменение схемы или индекса. А так как наши базы сильно распределены, реляционные вещи MySQL как например JOIN никогда не работали для нас. Тогда мы решили поискать решение проблем, лежащее вне реляционных баз данных.

    Существует множество проектов, призванных решить проблему хранения данных с гибкой схемой и построением индексов на лету (например CouchDB). Однако, по-видимому ни один из них не используется крупными сайтами. В тестах о которых мы читали и прогоняли сами, ни один из проектов не показал себя стабильным, достаточно зрелым для наших целей (см. this somewhat outdated article on CouchDB, например). А все это время MySQL работал. Он не портил данные. Репликация работала. Мы уже в достаточной мере понимали все его узкие места. Нам нравился MySQL именно как хранилище, вне реляционных шаблонов.

    Все взвесив, мы решили создать систему хранения данных без схемы поверх MySQL, вместо использования полностью нового решения. В этой статье я попытаюсь описать основные детали системы. Так же нам любопытно как другие сайты решили эти проблемы. Ну и мы думаем, что наша работа будет полезна другим разработчикам.
    Читать дальше →
  • Google AppEngine с самого начала: Представление

      Четвертая часть статьи, и вероятно — не последняя. Напомню, что предыдущие три статьи (а так же все последующие) теперь можно будет увидеть по этому адресу — статей много и проставлять в них навигационные ссылки друг на друга мне надоело;-)

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

      Представление


      Как вы знаете, такие слова как MVC уже давно стали даже не модными, а прям-таки подразумевающимеся (другой вопрос что понимает их всяк по своему). Наш пример не стал исключением — и теперь нам нужно объединить достижения контроллера и модели воедино и показать их пользователю. В этом нам немало поможет тот факт, что GAE внутри использует Django, механизм шаблонов которого является одним из самых лучших среди тех, которые я знаю. Одним из самых интересных, на мой взгляд, свойств шаблонов Django является то, что они поддерживают наследование.

      Действительно, зачастую дизайн двух функционально разных страниц веб-сайта отличается лишь незначительно и использует общие элементы — header, footer, меню и т.д. Обидно будет дублировать этот код — и в то же время, всяческие include-директивы это все-таки вчерашний день. В Django вы можете наследовать один шаблон от другого.

      Рассмотрим наш базовый шаблон, который можно найти в дереве исходников как templates/basic.html. Поскольку HTML на Хабр красиво вставляться не желает (и никакой Хабраредактор с этим справится не может), а некрасиво его читать — голову сломать можно, посмотрите его уж в SVN по ссылке выше. Суть не в этом. Суть в том, что в каких-то местах мы объявляем «заглушки»:
      1. <div id='content'>
      2. {% block content %} {% endblock %}
      3. </div>

      Читать дальше →
    • Рисуем координаты на карте с помощью PHP + GDLib

        Так сложилось что по долгу своей службы я занимаюсь гео-поиском. И зачастую мне нужно показать на карте координаты пользователей, для того чтобы сделать какие-либо анализы. Для этой цели я, до определенного времени, успешно использовал Google Maps, пока, однажды, мне не понадобилось нанести на карту не много не мало 16 млн. координат.

        Как я это сделал?
        Читать дальше →
      • Дэн Пинк об удивительной науке мотивации

          Daniel Pink — автор книг и статей о современном подходе к бизнесу. Об одной из его книг как-то уже писали на хабре.

          В этом коротком выступлении Daniel рассказывает о том, что «метод пряника» работает только для мотивации рутинного труда. А для сфер деятельности, требующих творческого подхода, не только не приносит пользы, но и делает работу менее эффективной. Он предлагает новые методы мотивации, которые сделали возможным появление таких продуктов как Wikipedia и Google Mail. И применение этих методов в будущем, возможно, сможет сделать мир немного лучше.

          Вот версия выступления с русскими субтитрами.

          А вот оригинал:

        • Подробная статистика запросов из логов

            Недавно был пост о сборе статистики в Google App Engine. Вот один из рецептов, который я использую для подобных целей:

            #!/bin/bash
            appcfg.py --num_days=10 request_logs code/ today.txt
            visitors -A -m 50 -T --time-delta 10 --trails --prefix http://toptuby.appspot.com/ today.txt > today.html
            firefox today.html

            Так получается и показывается в браузере статистика за последние 10 дней для приложения toptuby.appspot.com
            Подробнее
            • +10
            • 1.6k
            • 1
          • Легальный лунапарк с шахматами и библиотекаршами

              image
              Сегодня, мы с гордостью представляем КЕНГУРУ.ТВ — бесплатный и легальный онлайн-кинотеатр. А очень тонкая аллюзия между заголовком и текстом станет ясна в конце :)

              Сам по себе процесс легализации контента в Интернет — очень горячая тема. На том же Хабре, да и не только, вы всегда найдете некий процент комментариев, в которых ярко выражена одна идея — контент, если он кому-то принадлежит, нужно легализировать. Фильмы, музыку, тексты (думаю многие блогеры поняли о чем речь), фотографии. И как это не странно, когда дело доходит до дела, евангелисты лицензирования куда-то пропадают. Исчезают. Просьбы, на прямую обращенные к ним не получают ответа, энтузиазм куда-то улетучивается. Да и вообще… От чего же так происходит?

              По-моему мы разобрались в чем дело!
              Читать дальше →
            • Серия скринкастов по VIM

                Если вы хотели начать работать с VIM, но вас что-то останавливало, то перед вами прекрасная возможность начать снова.

                Ну а если вы уже продвинутый Vimmer то для вас тоже найдётся что посмотреть.
              • Правила Ярослава Грешилова

                  Сегодня наткнулся во френдфиде исследователя фонда inVenture Ярослава Грешилова на 9 интереснейших правил проектной работы. Оговорюсь, что далеко не со всем здесь согласен, но пища для размышлений тем не менее превосходнейшая. Привожу здесь в удобном для чтения виде.

                  UPD от Ярослава: «Это не «правила Ярослава Грешилова», а правила *для* Ярослава Грешилова. И направлены они вовсе не на проектную работу, а на то, чтобы не потерять себя. Обсуждение того, что происходит с проектами при применении этих правил, не входило в мою задачу.»


                  Правило первое: работать имеет смысл не «над проектами», а «с людьми». Проекты всё равно имеют свойство со временем мутировать до неузнаваемости, а вот люди, как правило не меняются.

                  Например, работа над разными проектами за последние три года с одним моим другом имеет такие объективные итоги: из четырёх проектов завершено — ноль, денег заработано — близко к нулю, времени потрачено — довольно много, собственное развитие — существенное, отношения с человеком — улучшаются и развиваются, желание и дальше делать что-то вместе — только растёт.

                  О чём это говорит? О том, что наше с ним взаимодействие — для обоих является пространством попробовать что-то непросчитываемое, то, что мы раньше не делали, толком никому не нужное. Получается не так много, но это наш способ развивать друг через друга и через то, что мы делаем. Казалось бы, после четырёх «неудач» нужно любые совместные инициативы рубить ещё на этапе обдумывания. Однако сотрудничество с этим человеком кажется мне одним из наиболее перспективных направлений жизни :-)

                  Правило второе: нельзя полностью растворяться в том, что ты делаешь, и ассоциировать себя с этим делом. Мои проекты — это не я. Они — лишь средство моего движения, самовыражения, исследования этого мира.

                  В этом смысле всегда помогает заниматься несколькими малосвязанными друг с другом вещами одновременно. Необходимость постоянного переключения из одной действительности в другую позволяет удерживать самоидентификацию «над ними» и требует постоянного вопрошания «А я-то здесь кто?»
                  Читать дальше →
                • Защищаемся от HTTP DDoS и прочих Хабраэффектов

                    Простой способ защиты от HTTP DDoS — включить syn-cookies и заблокировать подонков. Но что делать если атакует 5к-10к хостов да еще и с динамическими IP? Тут нам на помощь придет frontend-backend архитектура c промежуточным кэшированием! Почему с промежуточным кэшированием? А потому что в моем случае от шквала запросов от frontend'а backend умирал унося за собой систему.
                    Читать дальше →
                  • Выбор Шрифтов для Презентаций, Печати и Веба

                      Любовь к шрифтам – это болезнь. Скорее всего большинству людей этого не понять – ведь мы живем в стране где вывески и витрины оформлены с такой безграмотностью что порой хочется достать фотоаппарат и сфотографировать это «счастье» да выложить в интернет дабы показать до чего может довести человеческое безразличие. Поэтому человек у которого на столе лежит каталог FontFont и который иногда бурчит что де «неплохо еще вот этот шрифт купить» воспринимается порой как немного «не в себе». Тем не менее, изрядная доля моего времени уходит на то чтобы потеоритизировать на тему того, какие шрифты где уместны, и как выработать свой уникальный стиль для презентаций, веб-типографики и печатной типографики. В этом посте – несколько мыслей насчет того что работает/не работает, и что бы хотелось попробовать.
                      Читать дальше →
                    • Из записной книжки Мистера Томпкинса

                        Мистер Томпкинс — человек уже довольно приличного возраста. Первое знакомство с ним состоялось в далеком 1938 году, когда физик и одессит Георгий Антонович Гамов опубликовал в Британском журнале Discovery серию рассказов о человеке, который в своих снах попадал в альтернативные миры, где значения физических констант радикально отличаются от значений оных в реальном мире, что приводит к совершенно неожиданным результатам. Так Гамов популярно объяснял концепции современной физики неискушенному читателю. Незадачиливым же соней был тот самый Мистер Томпкинс.

                        Практически 60 лет спустя Том ДеМарко решил поделиться свой безграничной мудростью и в столь же популярной форме преподнести идеи из Peopleware, написанной в соавторстве с Тимоти Листером. Итогом стал "Роман об управлении проектами", в котором наш старый знакомый Мистер Томпкинс похищается сексапильной брюнеткой Лаксой Хулигэн и увозится в загадочную страну Моровию, где ему представляется возможность провести настоящий эксперимент по управлению проектами разработки программного обеспечения…

                        В конце каждой главы Мистер Томпкинс подводит итоги и записывает свои мысли, которые, по сути, являются аксиомами и постулатами управления проектами по ДеМарко и Листеру. Разумеется, лучше будет прочесть всю книгу в целом — иначе не понять, как эти принципы применяются в «реальной» жизни. Но если времени нет (или же просто хочется освежить память), то вашему вниманию предагается…
                        ...Записная книжка Мистера Томпкинса
                      • Full Hierarchy — иерархические структуры в базах данных

                          Здравствуйте. В этой статье я хотел бы написать про один очень интересный способ хранения иерархических структур в базах данных, не относящийся при этом к общепринятым и общеизвестным трём (Adjacency List, Nested Set, Materialized Path). Я не встречал в интернете упоминания о нём, о чём очень удивлен, ведь, по моему мнению, — это лучший и единственный способ хранить иерархические структуры. При разработке console-like форума я воспользовался именно этим способом, о чём ни на грамм не жалею. Это авторская статья и ни одно предложение не было вставлено метотодом копипаста.

                          Под катом способ, который я назвал Full Hierarchy
                        • Оплата через VISA. Liqpay, неделю спустя

                            Прочитав обзор хабраюзера natuzzi о столь замечательной системе — Я решил попробовать её в деле и подключил к ней один из своих магазинов.

                            Резюме:


                            Плюсы:


                            1. На осваивание и написание API ушло 3-4 часа.
                            2. Саппорт моментально отвечает, даже в 2 часа ночи.
                            3. Деньги можно вывести на любую банковскую карту или снять в банкомате Приватбанка (банкоматы есть как в Украине, так и в России)
                            4. Есть приложение для iPhone с помощью которого можно управлять liqpay счетом
                            5. Саппорт реализван через siteheart.com (тоже проект Приватбанка) в режиме реального времени. Чат поддерживает заполнение форм, коллективные чаты и выставление рейтинга и комментария после беседы.
                            6. Платежи с карточек действительно проходят! :)
                            Читать дальше →
                          • ADSL модем теряет коннект до перезагрузки? Не проблема!

                              Началось все с того, что в один прекрасный день я стал обладателем ADSL-роутера D-Link 2640U. Так как раздаю я интернет еще и друзьям, то включен он у меня круглосуточно, и тут обнаружилась одна досадная неприятность — он переодически терял коннект с провайдером и не хотел подключаться до перезагрузки. Поиски и обновления прошивки не решили проблемы, а так как дома меня иногда не бывает, а перегружать модем надо, то в один прекрасный день был написан скрипт, который делает это автоматически.
                              Посмотреть исходник
                            • Повышение работоспособности: как я избавился от бессонницы

                                У многих айтишников есть проблемы со сном. Ниже — описание моей проблемы и метод, которым я её решил.

                                image
                                Несколько недель назад я получил сразу три крупных заказа, каждый из которых был жёстко ограничен сроками. Проекты были действительно интересными и хорошо оплачиваемыми, поэтому первые несколько дней я работал практически без сна. Естественно, производительность начала снижаться. Дошло до того, что я начал ловить себя на том, что несколько минут(!) я «тупо втыкал» в монитор, ничего при этом не делая, и даже не замечая своего аут-состояния.

                                Тогда я решил: всё, пора нормально выспаться. Сохранив всё «как есть», я отправился в постель… и понял, что проблема отнюдь не решена.
                                Читать дальше →
                              • Учебник по языку программирования Python (хабраиндекс)

                                  Серия статей «Основы Python»


                                  I, Начало
                                  II, Строки
                                  III, Списки, кортежи, файлы
                                  IV, Генераторы списков
                                  V, Определение функций, основы
                                  VI, Расширенное определение функций

                                  Об основах языка Python в сжатой форме

                                  Продвинутый уровень


                                  Сила и красота декораторов Короткий экскурс в метапрограммирование.
                                  Итерируем все и вся Специфика циклов в Питоне.
                                  Как я учился работать с XML
                                  Консервация объектов в Python Использование модуля Pickle.
                                  Memoization в Python Оптимизация работы программ.
                                  Простейшее рисование с помощью PIL
                                  Regexp и Python: извлечение токенов из текста
                                  Как писать маленькие приложения на python с графическим интерфейсом (библиотека Qt).

                                  http://netsago.org/ru/docs/1/12/
                                  Одеваем скрипты Python с помощью EasyGui (добавляем простой диалоговый интерфейс)

                                  http://djbook.ru/
                                  Учебник по Django (Python-фреймворк для веб-приложений)

                                  Читать дальше →
                                • XSS вконтакте

                                    Предыстория (можно не читать)


                                    Прихожу я сегодня домой и вижу в личке вконтакта 9 сообщений. Т.к. я не особо люблю и не часто посещаю этот ресурс — сие событие было странным. В сообщениях пользователи писали что от меня вконтакте рассылается спам. Плохо, но да ладно, сменил пароль и все… Хотя задумался: старый пароль — 12 символьный цифробуквенный, сбрутить почти нераельно. Комп кристально чист и не заразен… Так в чем же дело?
                                    Читать дальше →
                                  • Мне кажется, я начал понимать, что ты имела в виду!

                                      Опечататься дело нехитрое; опечататься в поисковом запросе так и вдвойне. Почитай все большие веб-поисковики сегодня умеют корректировать ошибки в ключевых словах во-1х и подсказывать запросы во-2х; вслед за ними того же хочется поискам поменьше. Обе штуки можно ловко реализовать при помощи открытого поисковика по кличке Sphinx; в этом посте расскажу, как конкретно.

                                      Ну, за did you mean («что ты имела в виду») и прочий query completion («уж не Васю ли ты ищешь»).
                                      Читать дальше →
                                    • Химия

                                        Если бы нам в школах объясняли химию таким образом, то предмет был бы самым любимым и не казался бы сложным.
                                      • Кризис (не финансовый) программиста

                                          Я много писАл о том, как же прекрасна эта игра, под названием программирование! Мне, и я уверен, что многим из вас, программирование заменяет все существующие логические игры, дает постоянный разогрев мозгам, не давая им засохнуть, и приносит дикое моральное удовлетворение, отличающееся от оргазма только отсутствием физических ощущений.
                                          Так уж получилось, что много лет назад, я забросил c++ и Delphi, и чувствуя потребности IT рынка, начал осваивать php. Так что все, о чем я буду писать, касается конкретно web-программирования, и косвенно любой другой области программирования.
                                          Признаюсь честно, хотя работы хватает, мои мозги, все равно, начинают сохнуть. Я уже писал раньше, что момент, когда программист становится профессионалом, обусловлен, прежде всего, выдвижением на первый план качества и сроков реализации проекта. А значит приходиться использовать готовые продукты (я имею ввиду различные cms), которые обеспечивают должное качество, отсутствие уязвимостей и багов, гибкость, и короткие сроки реализации.
                                          Читать дальше →