
goDB 1.3: Транзакции и все, все, все
goDB 1.3: новый говнокод и ебическая сила природы в одном флаконе. Домохозяйки выбирают goDB.
В новой версии при сохранении совместимости с mysqli добавлены надстройки по следующим пунктам:
Транзакции
- Станартная схема:
BEGIN+COMMIT(ROLLBACK) - Вложенные транзакции, где транзакции нижних уровней не знают о верхних.
- Различные способы отката из вложенных транзакций и его обработки.
- Выполнение функций в транзакциях
Мультизапросы
- Мультизапросы по goDB-схеме: с шаблонами, данными и форматами разбора.
- Получение всех результатов сразу или получение только нужных
- Различные способы формирования мультизапроса
- Обработка ошибок на основе исключений
- Не нужно думать о выборке всех результатов и их очистке
- Мультизапросы в транзакциях и без них.
Подготовленные выражения
- goDB-схема (шаблон, данные, формат результата) вместо
bind_param,bind_result - Полная поддержка форматов представления результатов
- Обработка ошибок на основе исключений.
- Создание и выполнение подготовленного выражения одним запросов.
- Кэширование подготовленных выражений.
- Именованные подготовленные выражения.
Кроме того, добавлены следующие возможности:
Объект-ссылка
Объект ссылка разделяет подключение с основным объектом, но может иметь другие настройки (префикс, отладка, декоратор запросов).
По мелочи
Формат разбора bool.
Метод __invoke().
В PHP 5.3 запросы можно выполнять прямо так: $one = $db('SELECT 1', null, 'el');
Методы getPrefix(), getDebug() и т.д.
Реструктуризация юнит-тестов: теперь вместо одного файла папка с тестами.
@todo
Все предложения пишите на форуме или присылайте на мыло.
В ближайшее время возможно следующее:
- Макроподстановки
- Разбиение godb.php на несколько файлов
- Формат разбора: объект для разбора :)
- Начало работы над goDB 2.0
- Нормальные шрифты и цвета для доки
Взять себе
goDB 1.3.0 (zip, 31K)
goDB 1.2.2
Ничто не заставляет делать какое-то дело, как необходимость делать другие более важные дела.
Поэтому goDB продолжает радовать нас новыми версиями.
В новой версии (1.2.2):
Плейсхолдер ?bool: вставка значения для столбца типа BOOL.
Формат представления результата kassoc и его подвид kassoc:$col.
Формат же vars теперь позволяет выборку по одному столбцу: его значение станет как ключём массива, так и его элементом.
Плюс добавлены исключения goDBExceptionFetchUnknown и goDBExceptionFetchUnexpected.
Также местами переписан код.
Сам класс теперь можно просмотреть прямо на сайте не скачивая архивов.
Ну и конечно, можно всё-таки скачать архив (ZIP, 5K)
goDB 1.2.1: теперь и в юнит-тестах
В версии 1.2.1 исправлен незначительный бажок.
А чтобы снизить вероятность незначительных бажков в будущем, добавлены unit-тесты.
Для юнит-тестов используется PHPUnit.
~/godb$ phpunit --colors goDBTest.php
PHPUnit 3.5.0 by Sebastian Bergmann.
............................................................ 60 / 60
Time: 4 seconds, Memory: 4.25Mb
OK (60 tests, 126 assertions)
~/godb$
Документация по Redis: новое за полгода

С полгода назад публиковал здесь ссылку на свой перевод документации по Redis.
Для тех, кто не знает, что такое Redis — Redis, это NoSQL-база данных. Для тех, кто не знает, что такое NoSQL — Redis, это круто.
За прошедшее время в Redis накопились немалые изменения. Теперь все они отражены в обновлённом переводе. Здесь рассмотрим основное.
Хэши
Новый тип данных, представляющий собой, собственно, хэши :)
Теперь не надо хранить поля объекта в куче различных ключей типа user:10:name, user:10:surname. Всё в одном, да и удалить этого user’а-10 теперь можно одним запросом.
Упорядоченные множества
Были они, честно говоря, ещё и на момент прошлого перевода, но в нестабильной версии.
Теперь всё стабильно, плюс новые полезные команды для работы с ними.
Кто не в курсе, упорядоченные множества: коллекция элементов, отсортированных по определённому значению. Подходят для реализации аналога индексов в реляционных базах.
Транзакции
Не совсем такие, к каким мы привыкли, но выполняют своё основное предназначение: позволяют исполнить последовательность команд в виде одной атомарной операции.
Система подписок
Ещё один удобный вариант реализации очереди сообщений. В веб-приложениях подходит для демонов, обрабатывающих поступающие данные (рассылка писем, индексирование …)
Всякое другое
Наконец появился атомарный SET + EXPIRE, а то раньше приходилось бояться, что между этими двумя командами вклинится апокалипсис.
Также в ближайшее время обещают снять все ограничения на действия с волатильными ключами (теми, для которых установлен таймаут). Сейчас их нельзя сохранять (просто удаляться нафиг), это, конечно, обосновано с точки зрения архитектуры сервера, но ужасно раздражает. Надеемся, что скоро этого не будет.
Ещё много новых полезных команд (PERSIST, APPEND, SUBSTR, ZRANK …) и новых опций к уже существующим.
Также немало переработаны внутренности сервера, связанные с виртуальной памятью, AOF-режимом и т.д.
Вобщем, Redis ещё охуеннее!
goDB 1.2
Наконец, впервые за несколько лет, обновил документацию по goDB. Она по-прежнему убогонькая и пафосная, но теперь полностью описаны все новые возможности.
Ну и, так как просто описывать старьё скучно, выпустил новую версию.
Длинные плейсхолдеры
Для всех плейсхолдеров теперь есть «длинные» синонимы:
$db->query('INSERT INTO `table` SET ?set', array($set)); $db->query('INSERT INTO `table` VALUES ?values', array($values)); ...
Полный список в документации.
Именованные плейсхолдеры
$data = array( 'one' => 'Раз', 'two' => 'Два', 'three' => 'Три', ); $pattern = 'SELECT * FROM `table` WHERE `one`=?:one AND `two`=?:two OR `three`=?:three ORDER BY ?:one ASC';
Можно комбинировать тип плейсхолдера и имя: ?set:name.
В одном запросе использовать простые и именованные плейсхолдеры нельзя.
Подробнее в документации.
Ещё по-немногу
Добавлены новые параметры конфигурации charset и link:
$config = array( 'host' => 'localhost', ... 'charset' => 'utf8', );
Не нужно при подключении вызывать SET NAMES. Особенно удобно для отложенных подключений.
link позволяет сделать ссылку на другую базу. Подробнее в разделе о пространстве имён.
Также несколько изменена иерархия подключений.
Несовместимости
При правильном использовании несовместимостей нет. А так, немного есть.
Пятничный вечер брюзжания
Вот стоит только кому-нибудь на каком-нибудь форуме программистском заикнуться о такой веще, как Denwer, сразу находится хотя бы один, который скажет: «Не трогай эту каку, долбоёб! Лучше поставь всё руками, тогда будешь знать как всё работает». И ссылку кидают, обычно: php.ru/install.
Ссылку эту им так же пару лет назад кто-то кинул, обозвав долбоёбами. А они мощью этой личности проникнулись и теперь изображают таких же.
Блядь, да та ссылка уже пылью веков покрылась! Там мускул даже – 4.1.
Однако, они до сих пор её пользуют и самомнение своё повышают.
Пощёлкали по кнопочкам в винде, так как на картиночках нарисовано – это они больше разобрались в том, что сделали, чем тот же Denwer поставили.
И гордятся.
Лучше бы гордились тем, что наконец себе linux поставили, а на него Nginx+PHP-FPM. Или тем, что у них член 42 сантиметра и 4 миллиметра. А лучше бы ничем не гордились. Человек вообще существо плюгавенькое и невзрачное, гордиться ему совершенно нечем.
Мировые новости за прошедшее лето
Вот и прошло очередное лето, которое было очень занимательным: жара, пожары, веерные отключения электричества и ещё много всякого забавного.
К сожалению, наступление всеобщего благоденствия откладывается: Google Wave не потянул эту миссию. Глупые смертные оказались не готовы к технологиям будущего.
Не менее воодушевительным был анонс в начале лета новой базы данных VoltDB, уделывающей все остальные базы данных во многие триллионы раз и вообще не подчинающейся законам физики. Да как-то ажиотаж быстро и стух…
Зато набирает обороты стартап года: справочник бесплатных туалетов Обоссусь.РУ. Первый сайт сделанный для людей, а не для роботов.
PHP отметил своё пятнадцатилетие, но больше ничем особенно интересным не отметился.
Известный интернет-разработчик Михаил Андреев женился. Он был отличным парнем, мы будем помнить его.
А агрегатор Кинсбург.РУ продолжает радовать всех пользователей. На нём теперь есть викторина, биографии деятелей кино, множество новых фишек и качественного контента.
Ежедневная аудитория достигает 5 000 человек. Реклама на Кинсбург.РУ — выбор рассудительных людей
Высокие нагрузки, оптимизация и всякое такое
И снова здравствуйте!
Как оказалось, День Знаний на самом деле сегодня, поэтому продолжаем разговор.
Отложим практику и займёмся теорией и немного философией.
Поговорим про оптимизацию приложений. А так как преждевременная оптимизация — смертный грех, то про оптимизацию нагруженных приложений.
Не будем лезть в подробности, а просто попробуем разобраться в каких местах вообще следует оптимизировать.
Также затронем вопрос, а могут ли интерпретируемые динамические языки (в первую очередь наш PHP) с их невысоким быстродействием использоваться для построения высоконагруженных систем.
Пользователи на сайте: Memcached vs MySQL-JOIN
Здравствуйте, дорогие друзья, с вами снова Блог ГО.
Сегодня, в День Знаний, разберём одну тему. Тема, не так, чтобы для старших классов, но уже и не для дошкольников.
Рассмотрим один из вариантов хранения данных о пользователях в мемкэше.
Постановка задачи
Есть, допустим, сайт, а на нём есть зарегистрированные пользователи. Их данные хранятся, обычно, в таблице наподобие следующей:
CREATE TABLE `users` ( `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(20) NOT NULL, -- Имя `surname` VARCHAR(20) NOT NULL, -- Фамилия `nickname` VARCHAR(50) NULL DEFAULT NULL, -- Ник `avatar` BOOL NOT NULL DEFAULT "0", -- Наличие аватара `status` ENUM("active", "banned", "deleted") DEFAULT "active", -- Активный, забаненый, удалённый -- ... PRIMARY KEY (`user_id`) -- ... );
branches config css dev.opera extension godb highload IE innerHTML java javascript json json_encode mail memcached mercurial mod_rewrite mysql mysqli nosql onclick php phplinq php_memcached pyha Redis suxx tools wordpress Переводы Похождения ЧПУ бред брюзжание вакансии весна ебь замыкания конфигурация лебедев одесса ошибки пиздец тесты хуйня








