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 logo
С полгода назад публиковал здесь ссылку на свой перевод документации по 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 позволяет сделать ссылку на другую базу. Подробнее в разделе о пространстве имён.

Также несколько изменена иерархия подключений.

Несовместимости

При правильном использовании несовместимостей нет. А так, немного есть.

Скачать последнюю версию (ZIP)

Пятничный вечер брюзжания

Вот стоит только кому-нибудь на каком-нибудь форуме программистском заикнуться о такой веще, как Denwer, сразу находится хотя бы один, который скажет: «Не трогай эту каку, долбоёб! Лучше поставь всё руками, тогда будешь знать как всё работает». И ссылку кидают, обычно: php.ru/install.

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

Блядь, да та ссылка уже пылью веков покрылась! Там мускул даже — 4.1.
Однако, они до сих пор её пользуют и самомнение своё повышают.

Пощёлкали по кнопочкам в винде, так как на картиночках нарисовано — это они больше разобрались в том, что сделали, чем тот же Denwer поставили.
И гордятся.

Лучше бы гордились тем, что наконец себе linux поставили, а на него Nginx+PHP-FPM. Или тем, что у них член 42 сантиметра и 4 миллиметра. А лучше бы ничем не гордились. Человек вообще существо плюгавенькое и невзрачное, гордиться ему совершенно нечем.

Мировые новости за прошедшее лето

Вот и прошло очередное лето, которое было очень занимательным: жара, пожары, веерные отключения электричества и ещё много всякого забавного.

К сожалению, наступление всеобщего благоденствия откладывается: Google Wave не потянул эту миссию. Глупые смертные оказались не готовы к технологиям будущего.

Не менее воодушевительным был анонс в начале лета новой базы данных VoltDB, уделывающей все остальные базы данных во многие триллионы раз и вообще не подчинающейся законам физики. Да как-то ажиотаж быстро и стух…

Зато набирает обороты стартап года: справочник бесплатных туалетов Обоссусь.РУ. Первый сайт сделанный для людей, а не для роботов.

PHP отметил своё пятнадцатилетие, но больше ничем особенно интересным не отметился.

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

А агрегатор Кинсбург.РУ продолжает радовать всех пользователей. На нём теперь есть викторина, биографии деятелей кино, множество новых фишек и качественного контента.

Ежедневная аудитория достигает 5 000 человек. Реклама на Кинсбург.РУ — выбор рассудительных людей

Высокие нагрузки, оптимизация и всякое такое

И снова здравствуйте!

Как оказалось, День Знаний на самом деле сегодня, поэтому продолжаем разговор.

Отложим практику и займёмся теорией и немного философией.

Поговорим про оптимизацию приложений. А так как преждевременная оптимизация — смертный грех, то про оптимизацию нагруженных приложений.
Не будем лезть в подробности, а просто попробуем разобраться в каких местах вообще следует оптимизировать.

Также затронем вопрос, а могут ли интерпретируемые динамические языки (в первую очередь наш PHP) с их невысоким быстродействием использоваться для построения высоконагруженных систем.

Остальной текст под катом