MySQL

индекс
6,40
вчера в 15:24

Хранение иерархических структур. Симбиоз «Closure Table» и «Adjacency List» из песочницы

Когда перед нами встаёт задача хранения и управления иерархическими структурами данных всегда приходится выбирать из довольно ограниченного набора паттернов. Для того чтобы найти наиболее подходящий шаблон необходимо проанализировать особенности каждого способа хранения и обработки данных и оценить их с учётом задачи и специфики используемой СУБД.

Предположим, существует задача, предоставить возможность пользователям сайта оставлять комментарии к публикациям. Комментарии должны иметь древовидную структуру, пользователи должны иметь возможность оставить один или более комментариев к посту, а также отвечать на любые комментарии других пользователей. То есть, нужна система комментариев аналогичная той, что мы можем видеть на Habrahabr. По каким-то причинам, нам не подходят готовые решения, допустим из-за того, что предполагается дополнительная очень сложная бизнес-логика, которая должна быть интегрирована в систему комментариев.

Наша цель – разработать свою реализацию, учитывающую требования нашего приложения.
2638
43
drandin 4,0
17 июля в 18:46

Настройка репликации в Mysql 5.6

После выхода mysql 5.6 с его GTID (global transaction identifier) репликация в mysql перестала быть кошмарным сном сисадмина и стала вполне рабочим инструментом. В инете есть некоторое количество информации по этому поводу, но вся она довольно разрозненная и не всегда доступна для понимания. По этому я решил сделать небольшую инструкцию-выжимку, больше для себя, но может и еще кому пригодится.

+10
11078
256
greenh 8,0
13 июля в 12:55

Оптимизируем листинг диалплана Asterisk при помощи MySQL из песочницы

Большинство компаний сейчас имеют IP-телефонию, построенную на базе Asterisk(*). Недавно столкнулся со следующей, на первый взгляд, банальной задачей: имеется около 50 человек сотрудников, у каждого из них есть внутренний (добавочный) номер и корпоративный рабочий. Надо чтобы сотрудник был постоянно на связи, так как в офисе не все и не всегда находятся, а если не дозвониться клиент — будет беда. Первое, что приходит в голову — диалплан следующего вида:

exten => 3333,1,Dial(SIP/${EXTEN},20,tT); вызываем добавочный
exten => 3333,2,Dial(SIP/trunk/3809631234567,60,tT); если не ответ — набираем на мобильный.

Вроде все просто и красиво. НО! Это мы описали только одного сотрудника, а их 50! А еще надо каждый разговор записать, например. Листинг уже разрастается до неприличных масштабов. И не только листинг, но и количество ошибок, что можно наделать в процессе составления диалплана. Первое, что мне пришло в голову — старый, добрый MySQL. Что мы можем тут реализовать? Все просто, забиваем базу сотрудников с их добавочными и мобильными номерами и, подставляя их в переменные, звоним.
+3
1509
50
Goffman 2,4
13 июля в 04:10

Databene Benerator — бенерируй это

«Достань словарь и посмотри, что такое «катарсис». Если это то, чем он хочет нас замочить, я хочу знать, что это такое.» (с) Анализируй это!

Введение


Поздним вечером, когда проектирование базы данных на 64 таблицы было почти завершено, а интерфейс для их заполнения еще даже не начинался, встал вопрос о том, как их все-таки заполнить данными.
Заполнить в ручную — идея была откинута в сторону сразу.
«Надо что-то накодить!» — кричала душа.
«Надо что-то скачать!» — настаивал разум!
В результате прошвырнувшись по Интернету и найдя с десяток разного рода решений как устанавливаемых, так и SaaS, как платных, так и бесплатных — нашел я его — databene-benerator- генератор связанных данных (фикстур) для баз данных. И статью на русском, с описанием возможностей и синтаксиса (1), а так же ее, но на английском (2). Я понял — это то, что нужно! Но откуда его взять? Как его использовать под Windows? Удобно? С поддержкой русских символов?

И так «катарсис» (3) — понятие в античной философии; термин для обозначения процесса и результата облегчающего, очищающего и облагораживающего воздействия на человека различных факторов.

Как это связано с темой публикации? Вы поймете, если прочтете это. Приглашаю под cut!
+8
3401
34
shtorman 14,5
12 июля в 18:13

Spring без XML. Часть 2 tutorial

И снова день добрый. Пост в продолжение публикации «Spring + Java EE + Persistence, без XML. Часть 1».


1. Введение


1.1 Подгружаем проект


Если вы хотите с этой части начать, либо не осталось проекта сделанного в предыдущей части, можете скачать его с github.
Схема простая:
  • Заходите из консоли в папку с проектами IDEA
  • git clone github.com/MaxPovver/ForHabrahabr.git
  • cd ForHabrahabr/
  • git checkout withauth
  • Готово, теперь можете грузить проект в студию так же как описано в первой части.

1.2 Что мы будем делать в этой части?


В этой части мы рассмотрим как хранятся отношения многие-ко-многим на уровне объектов сущностей;
доделаем распределения прав пользователям;
сделаем простейший REST-controller;
сделаем регистрацию новых пользователей (только для админа);
и все это без XML.
+8
4625
103
11 июля в 20:57

Spring без XML. Часть 1 tutorial

Привет, хабрахабр!

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

Итак, если вам хочется попробовать Spring MVC с сохранением в базе и 0(нулем) файлов xml-конфигураций, прошу под кат!



Конечно хотелось бы сразу запустить приложение, но сначала немного подготовимся.

1. Подготовка к запуску


1.1 IDE


Вся разработка будет вестись на Intellij IDEA, но не думаю что реализация в другой IDE будет сильно сложнее.
+6
7602
130
26 июня в 18:44

Настройка MySQL + octopus из песочницы



В данной статье я бы хотел показать как настроить MySQL для дальнейшего использования gem'a octopus, который используется для шардинга и репликации в Rails — приложениях.
Итак, представим, что перед нами стоит задача развернуть три сервера(на первом крутится Rails — приложение, второй нужен для Master'a, третий будет выступать в качестве Slave'a), настроить репликацию между серверами и сделать так, чтобы octopus работал.
+7
6129
49
Rapter 4,0
26 июня в 16:51

Реализация Blacklist в Asterisk с помощью БД на MySQL из песочницы

Если вы не используете уже готовый дистрибутив Asterisk как например FreePBX и у вас нет к нему web GUI то задача добавления номеров в Blacklist сводится к работе с AstDB. С этим в принципе все просто. Но база данных Blacklist Asterisk общая и если нам необходимо разграничить списки заблокированных номеров по абонентам то в таком случае лучше прибегнуть к помощи внешней БД.
+5
3885
73
Pontar 1,6
24 июня в 23:30

Percona XtraDB Cluster пробрасываем ip клиента

image
Доброго времени суток. На хабре много писали (поиск) про то, как поднять MySQL кластер на основе решения Percona XtraDB Cluster. Но вот на днях ко мне подошёл программер и попросил сделать так, чтобы в MySQL можно было назначать хосты пользователям для разграничения доступа. Тут я вспомнил, что ip-то там отображаются далеко не клиентские, тут всё и началось :). В интернете было найдено решение аж 2009 года, которое заключалось в использовании tproxy патча, iproute2 и iptables, но это решило проблему частично, и только в пределах той машины где стоит haproxy, но что если мы хотим ещё и читать из разных мест? Вот что было сделано:
+9
2623
42
uran238 0,0
11 июня в 17:51

Быстрая установка SQL кластера Galera MariaDB c HaProxy и ClusterControl от Severalnines

Добрый день.

Некоторое время назад проект нашей компании по мониторингу серверов и сайтов перешел из категории «сделано для себя» в плоскость привлечения массовых пользователей. Этому частично способствовало получение проектом посевных инвестиций от ФРИИ и плюс, конечно же, наличие желания поделиться с миром нашей технологией, которую мы также используем для мониторинга своих серверов. Но, это не рекламный пост, а практический, поэтому о проекте потом.

Итак, с ростом нагрузки на базу данных, а наш сервис — это SaaS платформа по сбору метрик с серверов, количество запросов на запись в нашу базу данных (сейчас более 1000 серверов посылают порядка 20 своих метрик в БД каждые 4 минуты) начало приводить к перегрузке БД и нестабильной работе сервиса. Это зачастую происходило из-за превышения установленного максимального количества соединений к MySQL и большой нагрузки на сервер. К сожалению, все попытки оптимизации MySQL, увеличения серверных ресурсов и настройки параметров max_connections, query cache и т.д. не приводили к успеху.

Т.к. у нас нет отдельного человека, отвечающего за базы данных, а программисты и системные администраторы не могут каждый день тратить кучу времени на поддержание стабильности MySQL и реагировать на каждое падение, мы решили перейти на MariaDB Galera кластер с master-master репликацией и балансировкой нагрузки с помощью HaProxy. У нас до этого не было опыта внедрения бд кластера в production environment и поэтому пришлось наступать на все грабли самостоятельно.

К счастью, на Хабре нашлось много полезных статей на тему настройки Percona XtraDB, HaProxy и Zabbix для Percona, а также серия статей «Идеальный Кластер», которые нам очень помогли в начальной установке.

image

+3
1840
56
aquanet 5,6