Pull to refresh
  • by relevance
  • by date
  • by rating

Map/Reduce своими руками — Apache CouchDb

Website development *
Логотип CouchDb Предупреждаю — мой взгляд совершенно не претендует на какую бы то ни было объективность. Но реляционные базы данных меня никогда, мягко говоря, не вдохновляли.

Нет, я вполне понимаю когда у вас действительно приложение ориентировано на обработку и хранение больших массивов данных. Ну, ERP-системы, всякие хранилища, статистика там, «в прошлом месяце продали сто тыщ карандашей, в этом двести».

С другой стороны, в большинстве случаев, когда речь идет о десктопных (или веб-) приложениях, где не нужно ворочать миллионами примитивных записей,  а приложение работает с относительно высокоуровневыми, сложными объектами, суть «дизайна и проектирования баз данных» заключается в повторении двух действий:

Читать дальше →
Total votes 71: ↑69 and ↓2 +67
Views 5.3K
Comments 61

Видео с OpenSQL Camp o MySQL и не только

MySQL *
В ноябре этого года, в Портланде, США прошла конференция OpenSQL Camp посвященная опенсорс СУБД.
Совершенно случайно наткнулся на видео докладов и спешу ими поделиться. Общий уровень конференции, как мне показалось, достаточно высок, так что советую посмотреть. Часть видео, к сожалению, в плохом качестве. Все презентации, конечно же, на английском.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 1.2K
Comments 4

Как FriendFeed использует MySQL для хранения данных без схемы

MySQL *
Translation

Условия


Мы используем MySQL для хранения любых данных FriendFeed. Наша база данных растёт вместе с числом пользователей. Сейчас у нас более 250 миллионов записей, это записи пользователей (post'ы), комментарии, оценки («likes»)

По мере того как росла база данных, мы время от времени имели дело с проблемами масштабируемости. Мы решали проблемы стандартными путями: slave-сервера, используемые только для чтения, memcache для увеличения пропускной способности чтения и секционирование для увеличения пропускной способности записи. Однако, по мере роста, использованные методы масштабируемости привели к затруднению добавлению новой функциональности.

В частности, изменение схемы базы данных или добавление индексов к существующим 10-20 миллионов записей приводили к полной блокировке сервера на несколько часов. Удаление старых индексов требовало времени, а не удаление ударяло по производительности, так как база данных продолжала использовать их на каждом INSERT. Существуют сложные процедуры с помощью которых можно обойти эти проблемы (например создание нового индекса на slave-сервере, и последующий обмен местами master'a и slave), однако эти процедуры настолько тяжелые и опасные, что они окончательно лишили нас желания добавлять что-то новое, требующее изменение схемы или индекса. А так как наши базы сильно распределены, реляционные вещи MySQL как например JOIN никогда не работали для нас. Тогда мы решили поискать решение проблем, лежащее вне реляционных баз данных.

Существует множество проектов, призванных решить проблему хранения данных с гибкой схемой и построением индексов на лету (например CouchDB). Однако, по-видимому ни один из них не используется крупными сайтами. В тестах о которых мы читали и прогоняли сами, ни один из проектов не показал себя стабильным, достаточно зрелым для наших целей (см. this somewhat outdated article on CouchDB, например). А все это время MySQL работал. Он не портил данные. Репликация работала. Мы уже в достаточной мере понимали все его узкие места. Нам нравился MySQL именно как хранилище, вне реляционных шаблонов.

Все взвесив, мы решили создать систему хранения данных без схемы поверх MySQL, вместо использования полностью нового решения. В этой статье я попытаюсь описать основные детали системы. Так же нам любопытно как другие сайты решили эти проблемы. Ну и мы думаем, что наша работа будет полезна другим разработчикам.
Читать дальше →
Total votes 116: ↑110 and ↓6 +104
Views 2.9K
Comments 60

Применение метамодели при проектировании баз данных с несколькими абстрактными слоями (часть 2)

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

Первая часть: http://habrahabr.ru/blogs/sql/119317/
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Views 5.9K
Comments 4

«Разбор полетов» — episode 1 – officially on-air

Lumber room
Я и коллега aib представляем вашему вниманию официальный первый выпуск «еще одного» разговорного IT-тематического подкаста «Разбор Полетов». Подкаст был тепло встречен Вами — нашими слушателями (что радует), поэтому мы продолжаем…
Читать дальше →
Total votes 13: ↑8 and ↓5 +3
Views 410
Comments 0

SQLite — замечательная встраиваемая БД (часть 1)

Website development *SQL *SQLite *
Решил все-таки написать статью про SQLite, в которой хочу обобщить свой 3-х летний опыт использования этой БД под Windows. Вижу, что тема популярная, но информации мало.

Часть 2
Часть 3

Небольшая вводная.

Эта статья не для начинающих программистов.
Она не является учебником по SQL.
Она не агитирует использовать SQLite.
Она не агитирует не использовать SQLite.
Статья написана в виде вопросов от гипотетического новичка в SQLite и ответов на них (поскольку информации очень много и так хоть немного проще ее структурировать).

Читать дальше →
Total votes 102: ↑100 and ↓2 +98
Views 396K
Comments 54

Глобалы MUMPS: Экстремальное программирование баз данных. Часть 2

SQL *NoSQL *
Translation
Tutorial
Роб Твид (Rob Tweed)
Начало см. часть 1.

Глава 2. SQL/реляционные БД против MUMPS



В этой главе будут изложены основные различия между обычными SQL реляционными базами данных и БД на основе MUMPS.

Прочитайте главу 1, если вам нужно лучше понять что такое глобалы и как делаются манипуляции с ними.
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views 7.2K
Comments 4

Глобалы MUMPS: Экстремальное программирование баз данных. Часть 3

SQL *NoSQL *
Translation
Tutorial
Роб Твид (Rob Tweed)
Начало см. часть 1, часть 2.

Вторичные индексы

В реляционных базах данных вторичные индексы задаются как правило при определении таблиц, или после с помощью ALTER TABLE. Если индекс определён, то он автоматически создаётся, а потом поддерживается и пересчитывается базой данных при изменении данных.

В MUMPS индексы обслуживаются явно программистом, например, в функции обновления таблицы.
читать дальше про индексы, триггеры и транзакции
Total votes 17: ↑14 and ↓3 +11
Views 7.4K
Comments 46

Прикручиваем Web Map сервис к ничего не подозревающей OpenSource СУБД

Website development *Geoinformation services *
image
В прошлый раз мы конструировали пространственный индекс, а сейчас просто воспользуемся этим навыком, чтобы сделать живой (не статический) картографический сервис с web интерфейсом и производительностью, скажем, миллион запросов в день на совершенно обычном «железе».
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 5.5K
Comments 3

Принципы работы СУБД. MVCC

PostgreSQL *System Analysis and Design *Algorithms *
Многие из нас сталкивались в своей работе с СУБД. На текущий момент базы данных в том или ином виде окружают нас повсюду, начиная с мобильных телефонов и заканчивая социальными сетями, в число которых входит и любимый нами хабр. Реляционные СУБД являются наиболее распространенными представителями семейства СУБД, и большинство из них являются транзакционными.
В институте нас заставляли заучивать определение ACID и стоящие за ним свойства, но почему-то стороной обходились подробности реализации этой парадигмы. В данной статье я постараюсь частично заполнить этот пробел, рассказав о MVCC, которая используется в таких СУБД как Oracle, Postgres, MySQL, etc. и является весьма простой и наглядной.
читать далее
Total votes 26: ↑23 and ↓3 +20
Views 66K
Comments 22

Недостатки RDBMS или RDBMS vs NoSQL

Oracle *NoSQL *
Изложу мое видение по каким причинам были созданы новые технологии хранения и обработки данные известные как NoSQL и MPP.
Статья будет полезна особенно начинающим пионерам в разработки БД.
В статье не рассматриваются специализированные базы данных для векторных, графический и прочих нестандартных форматов.

Первое, SQL и RDBMS
1.1. Необходимо знать язык SQL и основные принципы RDBMS как транзакции, foreign key, таблицы.
Допустим вы разработчик Java, и от вас еще требуют знать какой-то SQL и особенности RDBMS. Естественно вы ленитесь, пытаетесь как-то отвильнуть.
Да и к тому-же принцип ООП очень не похож на модель данных в RDBMS.
1.2. Если у вас большой проект, то вам нужен профессиональный БД разработчик, а это лишний балласт если не будет проектов в будущем.
Java программистам так и хочется сделать всю бизнес логику на Java в обход SQL и RDBMS.

Второе, Цена
Читать дальше →
Total votes 48: ↑7 and ↓41 -34
Views 17K
Comments 79

Microsoft DocumentDB: статья первая, введение

Microsoft corporate blog Microsoft Azure
Привет,
В августе мы зарелизили большое количество новых вещей на Microsoft Azure (пруфлинк), причем совершенно закономерно одной из самых интересных для нашей аудитории оказался сервис Document NoSQL Database по имени DocumentDB. Время пришло, и мы начинаем про неё писать — первая статья, как водится, введение.


Читать дальше →
Total votes 32: ↑25 and ↓7 +18
Views 11K
Comments 8

Microsoft DocumentDB: статья вторая, ресурсы и концепции

Microsoft corporate blog Microsoft Azure
Как уже было сказано в первой статье, DocumentDB выставляет доступ к своей функциональности в виде программной модели RESTful, и сущности, хранящиеся внутри базы, называются ресурсами, и адресуются по URI. Для доступа к этим ресурсам можно использовать стандартные HTTP verbs, хэдеры и коды статусов.
Пока мы готовим годный пример про DocumentDB (дело небыстрое и вдумчивое) и ответы на ваши вопросы к первой статье, предлагаем почитать немного подробнее про ресурсы и концепции, на которых работает DocumentDB.

Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Views 5.4K
Comments 1

Учебный план по JDBC

GolovachCourses corporate blog Java *
Tutorial
Добрый день.

Я занимаюсь IT-образованием.
В данный момент готовлю курс «JDBC for Java Developer» для одной западной MOOC-платформы. Думаю этот детальный план может быть полезен кому-то для подготовки к собеседованию.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

По некоторому размышлению выходит, что за 4-5 часов видео (стандартный формат на платформе) максимум полезного, что можно рассказать в 5-10 минутных кусочках, попадает в Первую часть (6 тем: «Intro», «Connect to database», «Query database», «ResultSet», «Optimizations», «Transactions» + 35 вложенных подтем).

Ценное, но не помещающееся, пошло во Вторую часть (3 темы: «ThreadLocal Tx-Manager», «Distributed Transactions», «Query Meta-Information» + 10 вложенных подтем).

Ожидается, что слушатель после курса будет готов приступить к технологиям «следующего уровня» после JDBC — Spring JDBC Template, JavaEE transactions, ORM.

Знаю, что разумное замечание состоит в том, что можно «просто почитать JDBC 4.2 Specification». Да, можно. Этот план и строится как анализ спецификации + предлагаемые целевые варианты использования (Dao Patter, TxManager, Connection pooling, ...).

Читать дальше →
Total votes 16: ↑11 and ↓5 +6
Views 19K
Comments 10

PostgreSQL 9.5: что нового? Часть 1. INSERT… ON CONFLICT DO NOTHING/UPDATE и ROW LEVEL SECURITY

PostgreSQL *
Sandbox
Часть 2. TABLESAMPLE
Часть 3. GROUPING SETS, CUBE, ROLLUP
В 4 квартале 2015 года ожидается релиз PostgreSQL 9.5. Как всегда, новая версия кроме новых багов приносит новые фичи и «плюшки». В данной статье будут рассмотрены две из них, а именно INSERT… ON CONFLICT DO NOTHING/UPDATE и Row-level security. Уже вышла вторая альфа-версия, поэтому самые нетерпеливые могут её установить и попробовать новый функционал.
Скачать можно тут
Читать дальше →
Total votes 33: ↑33 and ↓0 +33
Views 78K
Comments 16

Первичный ключ – GUID или автоинкремент?

Programming *.NET *Microsoft SQL Server *
Зачастую, когда разработчики сталкиваются с созданием модели данных, тип первичного ключа выбирается «по привычке», и чаще всего это автоинкрементное целочисленное поле. Но в реальности это не всегда является оптимальным решением, так как для некоторых ситуаций более предпочтительным может оказаться GUID. На практике возможны и другие, более редкие, типы ключа, но в данной статье мы их рассматривать не будем.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Views 90K
Comments 72

PostgreSQL 9.5: что нового? Часть 2. TABLESAMPLE

PostgreSQL *
Продолжаем обзор нововведений в PostgreSQL 9.5.
Часть 1. INSERT… ON CONFLICT DO NOTHING/UPDATE и ROW LEVEL SECURITY.
Часть 3. GROUPING SETS, CUBE, ROLLUP
От автора
Приношу свои извинения за задержку с выпуском второй части. Изначально я планировал выпустить вторую часть статьи через неделю после первой, но, в связи с большой занятостью, не смог этого сделать. Поэтому я решил, что буду публиковать не большие статьи, а небольшими порциями, но чаще.
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Views 24K
Comments 5

Первичный ключ – GUID или автоинкремент? Часть вторая

Programming *.NET *Microsoft SQL Server *
В предыдущей статье были рассмотрены критерии выбора между GUID и автоинкрементом в качестве первичного ключа. Основная мысль была в том, что если по каким-то базовым критериям (наличие репликации, требования к уникальности и т.д.) есть необходимость использовать GUID, то нужно учесть нюансы, связанные с его производительностью. Тесты вставки записей показали, что наиболее быстрым вариантом являются последовательные GUID, генерируемые на клиенте, причем вставка в этом случае работает даже быстрее, чем при использовании автоинкремента. Но в статье не был рассмотрен проигрыш в производительности выборки при использовании GUID в качестве ключа. В этой статье я попробую закрыть этот пробел.
Читать дальше →
Total votes 23: ↑17 and ↓6 +11
Views 30K
Comments 29

PostgreSQL 9.5: что нового? Часть 3. GROUPING SETS, CUBE, ROLLUP

PostgreSQL *
Продолжаем знакомиться с новыми возможностями в PostgreSQL 9.5.
Часть 1. INSERT… ON CONFLICT DO NOTHING/UPDATE и ROW LEVEL SECURITY
Часть 2. TABLESAMPLE
Сегодня рассмотрим множественные группировки в одном запросе. Эта возможность была описана еще в стандарте SQL-99. Её удобно применять в том случае, если вам нужно сделать несколько запросов к одной и той же таблице, отличающихся только условием в GROUP BY. Для этого модификаторы GROUPING SETS, ROLLUP, CUBE указываются в качестве элемента группировки после ключевого слова GROUP BY.
Давайте посмотрим поближе, как это работает.
Читать дальше →
Total votes 32: ↑32 and ↓0 +32
Views 23K
Comments 1

ASP.NET Identity Caché Provider — работаем с Identity через InterSystems Caché

InterSystems corporate blog .NET *C# *
С появлением технологии ASP.NET Identity от Microsoft .NET разработчики стали все чаще использовать ее при создании веб-приложений. Для краткого экскурса в технологию предлагаем прочитать статью. Эта технология присутствует в стандартном шаблоне проекта и позволяет использовать стандартную реализацию функциональности авторизации и аутентификации пользователя.

image


«Из коробки» провайдером данных для ASP.NET Identity является MSSQL, но поскольку система авторизация Identity может взаимодействовать с любой другой реляционной СУБД, мы исследовали и реализовали эту возможность для InterSystems Caché.
Как мы это сделали
Total votes 20: ↑18 and ↓2 +16
Views 7.5K
Comments 14