Рубрика «sql» - 81

Caché Monitor

Альтернативные SQL менеджеры для СУБД Caché
Если при разработке или использовании вашего приложения на Caché вам часто приходится выполнять SQL-запросы, а функциональности SQL-менеджера из Портала Управления Caché или SQL-оболочки из терминала Caché вам недостаточно, то советую обратить внимание на приложение Caché Monitor.

Альтернативный SQL-менеджер разработал Андреас Шнайдер — разработчик из Германии.
Это кроссплатформенное Java-приложение кроме выполнения SQL-запросов предоставляет следующие возможности:
Читать полностью »

Доброго времени суток уважаемые Хабрецы!
Здесь я расскажу вам об использовании DBIx::Class, с помощью которого вы сможете реализовать Object Relation Mapping (ORM) на языке Perl. опросы о том, полезен или бесполезен ORM как таковой и другие
риторические размышления в стиле «жили же раньше люди как-то без компьютеров, и зачем они нужны сейчас?!», я обошел стороной. Обо всем об этом прошу в кОменты.
А теперь собственно об использовании DBIx::Class.
Читать полностью »

Если бы мне пришлось писать книгу о том, как создавать немасштабируемые приложения Oracle, первая и единственная ее глава называлась бы «Не используйте связываемые переменные».
Том Кайт, вице-президент Oracle

Недавно на Хабре появилась статья от AlexanderPHP «SQL injection для начинающих. Часть 1». По ее содержимому и комментарием к ней может создаться впечатление, что у многих разработчиков нет понятия, что такое связываемые переменные, зачем ими следует пользоваться и какие преимущества они дают. Попытаюсь в данной статье пролить небольшой свет на данные вопросы.
Читать полностью »

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

YaLinqo — Yet Another LINQ to Objects for PHP

Возможности:

  • Самый полный порт .NET LINQ на PHP, со многими дополнительными методами. Некоторые методы отсутствуют, но работа ведётся. Всего реализовано более 70 методов.
  • Ленивые вычисления, текст исключений и многое другое, как в оригинальном LINQ.
  • Детальная документация PHPDoc к каждому методу. Текст статей адаптирован из MSDN.
  • 100% покрытие юнит-тестами.
  • Коллбэки можно задавать замыканиями, «указателями на функцию» в виде строк и массивов, строковыми «лямбдами» с поддержкой нескольких синтаксисов.
  • Ключам уделяется столько же внимания, сколько значениям: преобразования можно применять и к тем, и к другим; большинство коллбэков принимает на вход и то, и другое; ключи по возможности не теряются при преобразованиях.
  • Минимальное изобретение велосипедов: для итерации используются Iterator, IteratorAggregate и др. (и их можно использовать наравне с Enumerable); исключения по возможности используются родные похапэшные и т.п.

Пример кода:

// Отфильтровать продукты с ненулевым количеством, поместить в соответствующие категории,
// отсортированные по имени. Продукты отсортировать сначала по убыванию количества, потом по имени.

from($categories)
    ->orderBy('$v["name"]')
    ->groupJoin(
        from($products)
            ->where('$v["quantity"] > 0')
            ->orderByDescending('$v["quantity"]')
            ->thenBy('$v["name"]'),
        '$v["id"]', '$v["catId"]', 'array("name" => $v["name"], "products" => $e)'
    );

Читать полностью »

С давних времен человечество занималось тем, что накапливало информацию, анализировало и хранило её в каком-либо виде, чтобы потом передать потомкам. Эволюция нашего сознания смогла стать возможной во многом благодаря именно этому — новому поколению людей не надо было постигать то, что уже было постигнуто до них. Начиная с древнейших носителей информации – египетских папирусов и шумерских табличек с клинописью, человечество накапливало всё больший и больший объем информации. В истории человечества были времена, когда в результате войн и катаклизмов часть уже накопленных знаний уничтожалась или исчезала, и тогда прогресс останавливался, а человечество отбрасывалось назад в своем развитии. Настоящей революцией и прорывом стало открытие технологии массового книгопечатания, которое позволило распространять информацию на большую аудиторию, что в свою очередь привело к взрывному росту в науках, искусстве, а также вывело сознание всего человечества на более высокий уровень. Развитие технологий в ХХ веке привело к появлению новых носителей информации – перфокарты, перфоленты, жёсткие магнитные диски и т.п. Всё большие и большие объемы информации переносились из гроссбухов на электронные носители. Возникла потребность в организации и управлении доступа к этим данным – так появились первые СУБД.

Реляционная модель данных, предложенная в 1970 году Э.Ф. Коддом, надолго задала тенденцию в развитии баз данных и позволила полностью отвечать требованиям бизнеса до сегодняшнего момента. С 1970 года реляционные базы данных прошли большой путь и приняли много вызовов, встававших на их пути. Постоянно растущие объемы данных привели к появлению методов, способных обеспечить более быстрый доступ к необходимым данным – индексы, хранение данных в отсортированном виде и т.п. Эти методы вполне успешно справлялись со своей задачей, да и до сих пор не потеряли своей актуальности. Однако стремительное увеличение объемов носителей информации и удешевление стоимости хранения данных привело к тому, что объемы баз данных в десятки терабайт не являются уже чем-то необычным и воспринимаются, как обычное явление. Бизнес не может допустить, чтобы эти данные лежали «мертвым грузом», так как всё возрастающая конкуренция в мире заставляет его искать новые подходы к освоению сферы своей деятельности, ведь по крылатому выражению – «Кто владеет информацией, тот владеет миром». Если говорить о времени, то счет идет не на дни, или даже часы, а скорее на минуты – кто сможет быстро получить необходимую информацию, тот и выиграет.
Читать полностью »

Сказ о том, как PHP на LINQ портировали. Сравнение ныне существующих библиотек с табличками, но без графиков — прилагается.

Картинка код для привлечения внимания (картинок не дождётесь!)

echo Phinq::create($people)
  ->groupBy(function($person) { return $person->residence->region; })
  ->select(function($grouping) {
    $obj = new stdClass();
    $obj->people = $grouping;
    $obj->region = $grouping->getKey();
    return $obj;
  })->orderBy(function($obj) { return $obj->people->count(); }, true)
  ->aggregate(function($current, $next) {
    $count = $next->people->count();
    return $current . sprintf(
      "%d %s (%s) live in the %s regionn",
      $count,
      $count === 1 ? 'person' : 'people',
      $next->people->aggregate(function($current, $next) {
        if ($current !== null) {
          $current .= ', ';
        }
        return $current . sprintf('%s [%s]', $next->name, $next->residence->code);
      }),
      $next->region
    );
  });

Кто видел C# или любой функциональный язык — при виде этого шедевра закатит глаза (если они предварительно не вылетят из орбит). И, наверное, будет прав. Но можно ещё вот так:

$lowNums =
	from('$n')->in($numbers)->
	where('$n < 5')->
	store($digits)->into('digits')->
	select('$digits[$n]');

Читать полностью »

Время от времени мне приходится сталкиваться с задачами, когда нужно в рамках имеющейся СУБД выполнить соединение двух и более исторических таблиц между собой, да так, чтобы получить красивые исторические интервалы на выходе. Зачем? Чтобы отчет смог правильно отобразить данные на выбранную пользователем дату, или приложение подтянуло в себя эти данные для обработки.
Часто коллеги и братья по цеху сталкиваются с подобными задачами и советуются как лучше их решить.
В этой статье я хочу поделиться опытом как решались различные ситуации подобного типа.
Читать полностью »

Я не люблю всякие визуальные редакторы для создания ER-моделей. Предпочитаю писать SQL код вручную, но для всяких отчетов и обсуждений хотелось иметь графическое представление и желательно в векторном формате.
Читать полностью »

Я не люблю всякие визуальные редакторы для создания ER-моделей. Предпочитаю писать SQL код вручную, но для всяких отчетов и обсуждений хотелось иметь графическое представление и желательно в векторном формате.
Читать полностью »

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

Часть 3. Vertica. Simply Fast

Simply Fast — этот вертиковский слоган возник не на пустом месте. Она, действительно, очень быстрая. Быстрая даже с “коробочными” настройками, что показали наши тесты во время выбора решения. В процессе миграции инфраструктуры мы хорошо изучили, как сделать Вертику еще быстрее и получать от нее максимальную производительность. Но обо всем по порядку.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js