Обновить
128K+

SQL *

Формальный непроцедурный язык программирования

81,74
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

IQL — очередной SQL-генератор для Java

Время на прочтение6 мин
Охват и читатели10K
Несколько лет назад я принялся за разработку одного крупного проекта на PHP, который только и делал что писал, читал и обновлял тонны данных в SQL. Сразу же было решено написать для этого проекта конструктор SQL-запросов, который тогда сильно облегчил мне жизнь и по сей день помогает мне и мои коллегам в ежедневной работе. Дело в том, что выложить этот конструктор в общественный доступ я не могу, так как проект принадлежит не мне, да и сильно завязан этот конструктор на наш фреймворк.

В связи с чем я решил разработать его аналог на Java, в надежде, что он сослужит кому-то добрую службу, так как не всем нужен ORM, а JOOQ кажется слишком сложным
Читать дальше →

Механизм подсчета нейронной сети в PL/SQL для распознавания рукописных цифр

Время на прочтение10 мин
Охват и читатели16K
Дорогие коллеги, спешим порадовать всех, кто неравнодушен к наукоемким задачам. Сегодня мы приготовили для вас перевод любопытной публикации от экспертов по базам данных из CERN, посвященный обучению и эксплуатации нейронных сетей с помощью Python и инструментария на базе Oracle PL/SQL.



В этой статье вы найдете пример построения и развертывания базового механизма подсчета искусственной нейронной сети с использованием PL/SQL. Статья предназначена для учебных целей, в частности для практиков Oracle, которые хотят на конкретном примере познакомиться с нейронными сетями.
Читать дальше →

Для чего нужен Apache Ignite / GridGain, на примере .NET & C#

Время на прочтение5 мин
Охват и читатели48K

В последнее время имена GridGain и Apache Ignite нередко мелькают в интернетах. Однако, судя по комментариям (например, здесь), мало кто понимает, что же это за продукт и с чем его едят.


В этой статье я попытаюсь доступным языком объяснить, и на примерах кода показать, что умеет Apache Ignite.


Apache Ignite Logo


Читать дальше →

SQL vs ORM

Время на прочтение10 мин
Охват и читатели49K

Друзья, вновь пришло время авторской колонки корпоративного блога PG Day’17. Предлагаем вашему вниманию сравнительный анализ работы с PostgreSQL из популярных ORM от varanio.


ORM (Object-Relational Mapping), по идее, должен избавить нас от написания SQL запросов и, в идеале, вообще абстрагировать от базы данных (от способа хранения данных), чтобы мы могли работать с классами, в той или иной степени выражающими объекты бизнес-логики, не задаваясь вопросом, в каких таблицах всё это по факту лежит.


Посмотрим, насколько это удается современным библиотекам на PHP. Давайте рассмотрим несколько типичных кейсов и сравним ORM с голым SQL, написанным вручную.

Читать дальше →

Дисциплина, точность, внимание к деталям, часть вторая (OLAP, SSAS)

Время на прочтение5 мин
Охват и читатели14K

Введение


В этой статье я продолжу рассказ о своем опыте работы с Microsoft Analysis Services. В дополнение к предыдущей статье, я хочу написать про нестандартные решения, которые были сделаны в последнем проекте. Эти решения более тесно сблизили меня с Microsoft Analysis Services, я стал больше его уважать и делать с его помощью то, что ранее мне казалось невероятным.
Читать дальше →

Митап по SQL Server: ждём только вас

Время на прочтение3 мин
Охват и читатели4.1K
Друзья, с радостью анонсируем наш «Майский митап 'SQL и не только'». Вместе с другими участниками TechGuruDay мы соберемся 18 мая в офисе ЛАНИТ, чтобы обсудить особенности Microsoft SQL Server и другие вопросы.

TechGuruDay – это творческая реализация нашей попытки создать неформальную группу IT-профессионалов для обмена уникальным опытом и мнениями на самые злободневные темы. Все организационные вопросы мы решаем на площадке Meetup.com, а делимся наболевшим и угощаемся плюшками на офлайн-встречах, как раз таких, как «Майский митап».

Приглашаем вас присоединиться к нашей компании. Больше деталей о предстоящем митапе и небольшой экскурс в историю наших митапов (со ссылками на презентации и видео выступлений) вы найдете внутри поста.


Вот чем мы готовы поделиться со всеми, кто найдет в себе силы к нам присоединиться.
Читать дальше →

Автоматизация обмена данными Qt форм с SQL базой данных

Время на прочтение12 мин
Охват и читатели10K
Данная статья описывает решение для выполнения рутинных процедур заполнения и сохранения данных форм в\из SQL базы данных. Код сложный. Для его понимания надо хорошо знать фреймворк Qt по части QtGui, QtSql. И хотя бы средне C++.


Читать дальше →

«Наиболее серьезной возможностью я, конечно, считаю мультимастер», — Иван Фролков о разработке Postgres Pro EE

Время на прочтение9 мин
Охват и читатели6K
Дорогие коллеги, рады предложить вашему вниманию второй выпуск нашей новой рубрики «интервью с разработчиками баз данных». Мы поговорили с Иваном Фролковым, разработчиком компании Postgres Professional. Иван занимается прикладной разработкой для баз данных уже свыше 20 лет. Сегодня, Иван приокроет завесу тайны и поведает про новые интересные возможности «отечественного Посгреса», Postgres Pro: EE.



PG Day: Расскажи немного, пожалуйста, как давно ты занимаешься базами данных и вообще в профессии состоишь, в каких амплуа и так далее.
Читать дальше →

Практическая оптимизация MySQL: измерять, чтобы ускорять

Время на прочтение17 мин
Охват и читатели37K


Петр Зайцев (Percona)


Сегодня мы поговорим о производительности.

Мы посмотрим на то, как подойти правильно к оптимизации MySQL, а также посмотрим на некоторые практические подходы к этому делу. Почему я считаю, что это важно? Дело в том, что когда у вас есть специфическая проблема, вы хотите, например, спросить: «А какой же мне установить размер кэша в MySQL?». Такой вопрос всегда можно ввести в Google или Yandex, и получить на него разумный ответ. Но как получить ответ об общем, о схеме анализа и оптимизации MySQL? Это куда более сложно.
Читать дальше →

Неправильно именуйте непеременные

Время на прочтение3 мин
Охват и читатели9.1K
brainFuckProgrammImage Все началось лет 8 назад. Я тогда писал одну программу для математических расчетов, и мой преподаватель указал, что я неверно именую переменные. Он был прав: x, xx, xxx сложновато различить в коде. После переименования они превратились в redSegment, greenSegment, blueSegment (в контексте задачи именование было подходящее). Потом были «Рефакторинг» Фаулера, «Совершенный код» Макконнелла, «Паттерны проектирования» банды четырех… каждый день я погружался все глубже в бездну.

В моей текущей компании никто не упоминает о правильном именовании переменных, это несерьезно. Мы обсуждаем с коллегами стили именования тестов, стоит ли использовать TestCase атрибут в nUnit, спорим о целесообразности #region в C#, пишем кастомные анализаторы для своих проектов и пьем смузи вообще всячески наслаждаемся жизнью.
Однако вчера все изменилось

Индексы в PostgreSQL — 2

Время на прочтение7 мин
Охват и читатели80K

Интерфейс


В первой части мы говорили о том, что метод доступа должен предоставлять информацию о себе. Посмотрим, как устроен этот интерфейс.

Свойства


Все свойства методов доступа представлены в таблице pg_am (am — access method). Из этой таблицы можно получить и сам список доступных методов:

postgres=# select amname from pg_am;
 amname
--------
 btree
 hash
 gist
 gin
 spgist
 brin
(6 rows)

Хотя к методам доступа можно с полным правом отнести и последовательное сканирование, исторически сложилось так, что оно отсутствует в этом списке.

В версиях PostgreSQL 9.5 и более старых каждое свойство было представлено отдельным полем таблицы pg_am. Начиная с версии 9.6 свойства опрашиваются специальными функциями и разделены на несколько уровней:

  • свойства метода доступа — pg_indexam_has_property,
  • свойства конкретного индекса — pg_index_has_property,
  • свойства отдельных столбцов индекса — pg_index_column_has_property.

Разделение на уровни метода доступа и индекса сделано с прицелом на будущее: в настоящее время все индексы, созданные на основе одного метода доступа, всегда будут иметь одинаковые свойства.

Читать дальше →

Шесть парадигм программирования, которые изменят ваш взгляд на код

Время на прочтение9 мин
Охват и читатели55K
Периодически я натыкаюсь на языки программирования, которые настолько самобытны, что меняют моё представление о коде в целом. В этой статье я хотел бы поделиться некоторыми из самых любимых моих находок.

Здесь вы не найдёте устаревшего посыла «функциональное программирование спасёт мир!»; мой список состоит из куда менее популярных наименований. Готов поспорить, многие из читателей вообще не слышали о большинстве языков и парадигм, о которых пойдёт речь, так что надеюсь, вам будет так же интересно с ними разбираться, как и мне.

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


Читать дальше →

Эксперименты над олимпиадной задачей

Время на прочтение7 мин
Охват и читатели4.9K
Так получилось, что я попал в магистратуру, и как то гуляя мимо кафедры на глаза попалась олимпиадная задача по 1С. Кратко задача звучит так: «Есть записи продажи за каждый день, необходимо найти наибольший период когда план выполнялся». А потом когда я гулял со спящей дочкой у меня встав вопрос, а сколькими способами это можно сделать на SQL. Решения будут на основе MS SQL.
Читать дальше →

Ближайшие события

Семь раз ALTER один DROP

Время на прочтение2 мин
Охват и читатели8.1K
image

Все началось с того, что я начал писать стандарт оформления T-SQL для своей компании. В этой теме я остановлюсь на конструкции удаления объекта перед его созданием.

В нашей команде порядка двадцати SQL Ninja разработчиков и все описывают данную конструкцию по разному, например вот так:

IF OBJECT_ID('dbo.Function', 'TF') IS NOT NULL
	DROP FUNCTION dbo.Function;
GO
CREATE FUNCTION dbo.Function ..
Читать дальше →

Тестирование параллельных процессов

Время на прочтение9 мин
Охват и читатели11K
image

Вы встречались с ошибками, которые возникают время от времени в продакшне, но никак не воспроизводятся локально? Бывает, изучаешь такой баг и вдруг понимаешь, что он проявляется только при одновременном параллельном выполнении скриптов. Изучив код, понимаешь как это исправить, чтобы такого больше не повторялось. Но на такое исправление хорошо бы написать тест…

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

Забегая вперед сразу скажу, что в конце статьи будет ссылка на github, куда я выложил готовое решение, позволяющее тестировать параллельные консольные процессы легко и просто.
Читать дальше →

Выходим на уровень эксперта! 50 оттенков экзамена 1Z0-047 (сертификация Oracle Database SQL Certified Expert)

Время на прочтение4 мин
Охват и читатели24K
Всем привет! В этой статье пойдет речь об одной из базовых сертификаций от ORACLE — Oracle Database SQL Certified Expert.

image

Чтобы получить сертификат, нужно сдать экзамен 1Z0-047.
Читать дальше →

Как искать в DataGrip

Время на прочтение2 мин
Охват и читатели22K


В работе с любым инструментом важно легко находить то, что нужно. В DataGrip ищут:

Объекты базы данных: таблицы, представления, функции, колонки и т. д.
— Сами данные.
Код, например кусок кода в скрипте или исходнике объекта.
Другое: настройки, действия, файлы.

Разберемся, как не потеряться в IDE и своих базах данных.
Читать дальше →

Логическая репликация в PostgreSQL 10

Время на прочтение9 мин
Охват и читатели27K

PG Day’17 продолжает радовать вас авторскими статьями. Сегодня, наш старый друг и бессменный автор провокационных статей о Web-разработке varanio расскажет о логической репликации.


Сначала я хотел назвать статью "Гарри Поттер и философский камень", потому что много лет при сравнении PostgreSQL с MySQL кто-нибудь всегда появлялся и замечал, что в Посгресе нет логической репликации (можно реплицировать только всю базу целиком, причем реплика read only), а в MySQL их целых два вида: statement based и row based.


И если statement based — это бомба замедленного действия с лазерным прицелом в ногу, то row based действительно очень не хватало в PG. Т.е. вопрос репликации — как философский камень у любителей баз.


Точнее, в посгресе всегда можно было использовать slony для того, чтобы, например, реплицировать только одну-две нужных таблицы. Но slony — это хитрое поделие на триггерах, которое работает по принципу: работает — не трогай. Т.е. например, нельзя просто взять и сделать ALTER TABLE ADD COLUMN, это надо делать через специальные механизмы. Если же всё-таки кто-то случайно это сделал, а потом, что еще хуже, через какое-то время в панике вернул как было, то быстро разрулить эту ситуацию может только чёрный маг 80lvl. Помимо slony, начиная с 9.4 стало возможно писать свои расширения для логической репликации через wal, вроде бы, пример такого расширения — pglogical.


Но это всё не то!


Когда я узнал, что в dev-ветку PostgreSQL 10 упал коммит, который позволяет из коробки, без экстеншенов и плагинов, логически реплицировать отдельные таблицы, я решил посмотреть, а как оно там работает.

Читать дальше →

Индексы в PostgreSQL — 1

Время на прочтение17 мин
Охват и читатели589K

Предисловие


В этой серии статей речь пойдет об индексах в PostgreSQL.

Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

За скобками обсуждения останутся вопросы разработки новых типов индексов. Это требует знания языка Си и относится скорее к компетенции системного программиста, а не прикладного разработчика. По этой же причине мы практически не будем рассматривать программные интерфейсы, а остановимся только на том, что имеет значение для использования уже готовых к употреблению индексов.

В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.
Читать дальше →

Сервер приложений на pl/pgsql

Время на прочтение23 мин
Охват и читатели11K
Артем Макаров, руководитель отдела IT компании «Проект 111», на одном из прошлых PG Day рассказал, как бизнес может решиться на такое решение как постройку собственной ERP-системы на Postgres и application-сервер на хранимых процедурах. Какие из этого последовали плохие, хорошие стороны. Стоит отметить, что Артем никогда не был настоящим программистом, хотя и писал довольно много кода. Скорее его можно назвать анти-менеджер и евангелист, и лоббист для бизнеса IT-решений. Поэтому в его докладе взгляд не только со стороны технического специалиста, но и менеджера.
Читать дальше →