Так сложилось, что по долгу службы столкнулся со следующей задачей: нужно было быстро и как можно проще сгенерировать много REST-сервисов. Мне казалось, что должно существовать немало решений, этой не такой уж и сложной задачи. И каково было мое удивление, когда пошарив по бескрайним просторам Интернета, нашел всего лишь пару подходящих продуктов. Среди наиболее подходящих мне отобрал Rest4Enterprise, restSQL и IBM Web API Services (может кто еще какие знает? you are welcom!). restSQL показался совсем хиленьким, продукт от IBM – наоборот, мощнейшим зверем. Поэтому придерживаясь правила «золотой середины», решил опробовать Rest4Enterprise. Продукт еще совсем новый (январь 2013), информации по нем, кроме официального источника нет вообще, поэтому решил поделиться с хабрачитателями своим небольшим опытом работы с ним.
Читать полностью »
Рубрика «базы данных» - 45
Знакомство с Rest4Enterprise или REST-сервисы для ленивых
2013-02-18 в 20:02, admin, рубрики: api, ldap, mysql, rest, sql, базы данных, Веб-разработка, сервисы, метки: api, ldap, mysql, rest, базы данных, сервисыАнонсирован стабильный релиз MySQL 5.6
2013-02-06 в 4:44, admin, рубрики: mysql, oracle, sql, базы данных, метки: mysql, oracle, базы данных5 февраля компания Oracle анонсировала выпуск стабильного релиза MySQL версии 5.6. В новой версии проделана огромная работа. Основные усилия были направлены на повышение производительности, масштабируемости и гибкости. Масштабным по значимости изменениям подвергся движок InnoDB.
К ключевым улучшения можно отнести: поддержка средств полнотекстового поиска, возможность доступа к данным через memcached API, увеличена производительность работы при интенсивной записи данных, а также увеличена масштабируемость при обработке большого числа одновременных запросов.
Читать полностью »
Статистика в СУБД Teradata
2013-02-01 в 6:39, admin, рубрики: sql, teradata, Администрирование баз данных, базы данных, Блог компании Teradata, статистика, СУБД, метки: teradata, базы данных, статистика, СУБД«There are three kinds of lies: lies, damned lies, and statistics» © Бенджамин Дизраэли, 40-й премьер-министр Великобритании
Статистическая информация о данных в СУБД играет важную роль в производительности системы. С учетом ряда комментариев к прошлой статье, мы решили описать, зачем нужна статистика в СУБД Teradata, как она учитывается оптимизатором, на что влияет, и дать ряд практических советов по сбору статистики для тех, кто работает с нашей СУБД.Читать полностью »
Степени — ключ к быстрой иерархии в реляционной БД
2013-01-22 в 19:10, admin, рубрики: django, Алгоритмы, базы данных, деревья, иерархические структуры, иерархия, Программирование, метки: Django, базы данных, деревья, иерархические структуры, иерархия После публикации на Хабре своей первой статьи, об одном из способов организации иерархии в реляционной БД, у меня осталось чувство не доведенного до конца дела.
Судя по комментариям, кто-то принимал предложенный метод за другой, спрашивали чем не устраивает “django-mttp”, рассказывали о поддержке деревьев в PostgreSQL…
Спасибо всем отписавшимся, но из-за сумбурного изложения в самой статье, думаю, что я не сумел донести до читателя то, что хотел. А “если я чего решил, то выпью обязательно”(с)
Поэтому, я решился на еще одну попытку изложения интересующего меня подхода. А именно — хранение иерархии в числовом коде, вычисляемом на основании данных о размерности дерева. То есть, заранее определены максимальные количество Уровней и количество Детей у каждого Родителя (возможные диапазоны достаточно велики, поэтому, заранее пугаться этого не стоит). При таких вводных, код, каждого иерархического элемента, будет являться и путем до него, и включать диапазон всех Детей. А это сулит скорость, и много еще чего…
Далее — с картинками и таблицами, без привязки к какой-либо БД (ибо это не важно). В конце статьи есть ссылки на реализацию на Django. Читать полностью »
Проектирование баз данных
2013-01-15 в 7:52, admin, рубрики: Администрирование баз данных, базы данных, Песочница, метки: базы данныхПроектирование баз данных.
Итак, поискав на хабре информацию по проектированию БД, и не найдя ничего более или менее вразумительного, я решил написать об этом небольшую статью.
Проектирование базы данных сводится к трем последовательным этапам:
- Концептуальное проектирование
- Логическое проектирование
- Физическое проектирование
Ниже я предлагаю ознакомиться с ними более детально.
Читать полностью »
Степени — ключ к быстрой иерархии (пример на Django)
2013-01-14 в 9:19, admin, рубрики: django, базы данных, деревья, иерархические структуры, Песочница, метки: Django, базы данных, деревья, иерархические структуры Есть множество способов организации иерархического хранения данных. В последнее время меня заинтересовал вопрос по структуре каталога, например, интернет-магазина. А именно, когда Группы и Товары хранятся в разных таблицах.
При навигации посетителя по Группам, должны выводиться Товары из всех Подгрупп.
Хотелось бы, имея код Группы, получить быстрый запрос к таблице Товаров, результатом которого были бы Товары из текущей Группы и всех ее Подгрупп.
Читать полностью »
Postgre(no)SQL или снова о хранении данных с гибкой структурой
2013-01-06 в 5:43, admin, рубрики: nosql, postgresql, базы данных, метки: nosql, postgresql, базы данных Когда вопрос заходит о хранении в БД гибких (заранее не известных, часто изменяемых) структур данных, разработчики обычно обращаются к «великому и ужасному» EAV-паттерну, либо к ныне модным NOSQL базам данных.
Не так давно такая задача стала и передо мной.
— EAV. Вызывает у меня стойкую неприязнь, да и сказано и написано об этом было очень много всего негативного (Кайт, Фаулер, Карвин, Горман). Главный минус в том, что при написании запросов приходится оперировать уже не реальными сущностями («Сотрудник», «Дом», «Клиент», то для чего и предназначен SQL), а объектами, орагнизованными на более низком уровне (извините за сумбур). Поэтому это был самый не желательный вариант.
— NOSQL. Поначалу очень заинтересовал этот вариант (в частности MongoDB). После продолжительного использования реляционок, первое время начинаешь испытывать чувство тотальной свободы, от которого захватывает дыхание. Хранение документов любой структуры, моментальное создание новых коллекций, запросы к ним — красота! Но после непродолжительного использования эйфория начала спадать, а проблемы обнаруживаться:
— Бедный язык запросов (ИМХО) + отсутствие джойнов;
— Отсутствие схем (хорошая статья недавно была на эту тему (и не только на эту) habrahabr.ru/post/164361/);
— Отсутствие встроенной поддержки ссылочной целостности;
— Отсутствие прибамбасов в виде хранимых процедур/функций, триггеров, представлений и многого другого.
— В моем приложении помимо данных с гибкой(изменяемой) структурой также необходимо хранить обычные статические данные — таблица пользователей, посещений, сотрудников и т.д. Работать с которыми (опять же имхо) гораздо проще и (самое главное) надежнее в обычной реляционной базе (та же самая ссылочная целостность и пр.).
Использование подключений к СУБД в многопоточных приложениях на QT
2012-12-29 в 17:16, admin, рубрики: c++, qt, базы данных, Песочница, метки: Qt, базы данныхПри написании много-сервисной системы в корой каждый сервис должен быть многопоточен, столкнулись с проблемой использования подключения к базе данных. Сервисы разрабатываются на QT, поэтому использовали модуль QtSql для взаимодействие с БД.
Проблемы
- Для каждого потока необходимо свое собственное подключение к БД (QSqlDatabase). При использовании одного подключения из разных потоков возникаем ошибка сегментирования.
- Т.к. в текущий момент времени возможно держать открытыми ограниченное число подключений к БД, необходимо реализовать захват, освобождение и ожидание подключения потоками.
- В контексте потока, для правильной работы с транзакциями необходимо работать только с одним подключением. Например: Сущность заказ содержит в себе сущности Товар. При сохранении Заказа должны сохранится все товары. Если при сохранении товара возникает исключительная ситуация, то вся транзакция по сохранению заказ должна отменится.
- Библиотека должна уметь работать с несколькими БД одновременно, причем разных типов (Mysql,PostgreSQL)
Решение
В итоге у нас получилось 3 класса:
- Connection — класс обертка отвечающий за работу с БД: Подключение, выполнение и обработка результатов запросов.
- ConnectionManager — синглтон хоронящий в себе подключени и отвечает за выдачу и освобождение подключений.
- ManagedConnection — класс обертка для автоматизации захвата и освобождения подключения.
Восстановление битой истории Skype (main.db)
2012-11-28 в 16:02, admin, рубрики: recovery, skype, sqlite3, базы данных, метки: recovery, skype, sqlite3, базы данныхПромучавшись в очередной раз над восстановлением побившейся базы, решил набросать краткую инструкцию, как мне удалось вернуть почти всю историю сообщений скайпа. Знатоки sqlite3 приглашаются для написания более лучших способов, чем я нащупал наугад.
Предыстория
Переустановил ОС Win7, установил skype (6-й), привычно скопировал всю папку профиля из старого:
%AppData%RoamingSkypeмой_профиль
в новое место.
Запускаю скайп и вдруг он виснет на автовходе. После повторного запуска вижу приглашение войти. Вхожу — все контакты на месте, а сообщений — практически нигде нет. Только в некоторых групповых чатах сохранились. Вся личная переписка, коей скопилось немало — исчезла. Проделал N(^k) попыток копировать базу данных, удаляя файлы блокировок, is-corrupt и прочие. Скайп ругается, что с базой проблемы, затем просит перезайти — после чего сообщений нет.
Погуглив, нашел хабро-посты про экспорт сообщений, угон аккаунтов и т.п. Ага, значит sqlite! Это обнадёживает.
Читать полностью »
Active Record Pattern
2012-10-21 в 13:35, admin, рубрики: .net, active record, базы данных, ооп, рефакторинг, серверное программирование, чистый код, метки: active record, базы данных, рефакторинг, серверное программирование, чистый кодХочу рассказать о применении шаблона Active Record для C# на практике. Такой класс реализует извлечение и запись структуры в базу данных. Бизнес логика выносится на следующие уровни абстракции, где с таким объектом можно работать уже как с обычной структурой.
Центральный случай, который я буду рассматривать для примера — это работа со справочником Country из базы данных, который часто читается, но очень редко меняется.
Использование active record объекта в коде бизнес логики выглядит вот так:
Country russia = Country.All[“Russia”];