
- •Задачи интеллектуального анализа: кластеризация
- •Распределенные вычисления на примере cloud-based по на примере prezi.Com
- •Условия использования сервиса Prezi.Com
- •Технология Redis
- •Программное обеспечение интеллектуального анализа: Система statistica Data Miner
- •Программное обеспечение интеллектуального анализа: Oracle Data Mining
- •Понятие «Data mining», Data mining и базы данных.
- •Архитектура odm
- •Функциональные возможности odm.
- •Технология BigTable (Google)
- •MapReduce: модель и реализации.
- •2. Реализация в распределенной среде.
- •3. Расширенные средства.
- •«Методы Data Mining: ассоциативные правила»
- •1. Определение. Основные понятия
- •2. Типы ассоциативных правил
- •3. Алгоритм apriori
- •4. Применение
- •«Методология Data Mining: crisp-dm»
- •Понимание бизнеса (Business Understanding)
- •Понимание данных (Data Understanding)
- •Подготовка данных (Data Preparation)
- •Моделирование (Modeling)
- •Оценка (Evaluation)
- •Развертывание (Deployment)
- •Большие данные
- •История
- •Методики анализа больших данных
- •Почему данные стали большими
- •Аналитический инструментарий
- •Как справиться с большими данными?
- •Кому выгодны большие данные
- •Проблема больших данных в различных отраслях
- •Информационной экономике нужны миллионы ит-сотрудников
- •10, Спрос на администраторов Big data
- •Стадии интеллектуального анализа: задача консолидации
- •Основные этапы консолидации данных
- •Источники данных
- •Обобщенная схема процесса консолидации
- •Вероятностный вывод
- •Методы интеллектуального анализа : эволюционное программирование и генетические алгоритмы
- •Применение генетических алгоритмов
- •Примеры программного обеспечения
- •Методы интеллектуального анализа: деревья решений
- •Документно-ориентированная система управления базами данных CouchDb
- •Ftp Сервер
- •Методы интеллектуального анализа: иерархические модели кластерного анализа
- •Документно-ориентированная система управления базами данных MongoDb
- •2.Понятие о документно-ориентированной системе управления базами данных MongoDb
- •3. Возможности
- •4.История разработки
- •5. Использование MongoDb
- •6.Оценка производительности
- •7.Безопасность
- •8. Соответствие между sql и MongoDb
- •Простые запросы на выборку
- •Запросы на выборку с регулярными выражениями
- •Запросы на выборку с группировками
- •Запросы на выборку с объединением таблиц
- •Информация о запросе
- •Создание, изменение и удаление документов
- •Бизнес-анализ
- •Часть 1. Понятие «бизнес-анализ»
- •Часть 2. Разделы науки бизнес-анализа
- •Часть 3. Техники бизнес-анализа
- •Часть 4.Система бизнес-анализа и поддержки принятия решений
- •Часть 5. Методы бизнес-анализа
- •6. Роли бизнес-аналитиков
- •7. Цели бизнес-аналитиков
- •8.Выдержки из должностной инструкции бизнес-аналитика
- •9.Будущее бизнес-аналитики
- •Иску́сственные нейро́нные се́ти
- •Систе́ма подде́ржки приня́тия реше́ний
- •1. Сппр- хранилище данных
- •2. Аналитические системы
- •Субд Cassandra
- •Хранилища данных и средства их построения Data Warehousing
- •Программное обеспечение интеллектуального анализа: statistica
- •Бурение и расслоение
- •Классификатор
- •Разведчик многомерных моделей
- •Нейросетевой разведчик
- •Рабочее пространство statistica Data Miner состоит из четырех основных частей:
- •Автоматизация любых процедур с помощью statistica Visual Basic;
5. Использование MongoDb
Рассмотрим некоторые различия в работе с MongoDB по сравнению с привычным SQL. Все примеры кода написаны на JavaScript и могут быть проверены в интерактивной консоли.
Консольные инструменты
По аналогии с тем, как в консоли mysql мы можем выполнять SQL-запросы,интерактивная консоль MongoDB позволяет выполнять команды сервера БД используя язык JavaScript. По умолчанию используется движок SpiderMonkey, при желании мы можем поменять его на V8. На официальном сайте можно найти online-вариант консоли, который работает прямо в браузере, плюс к тому небольшое введение для начинающих. Начинать рекомендуется именно с этого.
Структура информации
Структуру данных в реляционных системах на примере MySQL мы можем представить в виде следующей иерархии: База данных -> Таблица -> Строка -> Поле + Значение.
Как это все выглядит в MongoDB: База данных -> Коллекция -> Документ -> ключ + значение.
Таблицы в реляционных БД должны быть жестко структурированы, в то время как в MongoDB можно создавать документы произвольной структуры.
Пример документа в формате JSON:
{
doc_id: 153,
title: 'Some title',
body: '...A lot of text...',
author_id: 73,
date: 'Sun Oct 31 2010 03:00:00 GMT+0300 (MSK)',
additional: {
location: {
country: 'Russia',
city: 'Moscow'
},
category: 'books'
}
tags: ["tag1", "tag2", "tag3"]
}
Как можно заметить у нас полная свобода во вложенности ключей документа, что избавляет нас от необходимости денормализации как в SQL, т.е. нам не нужно разносить одну сущность в разные документы. Как и в SQL в MongoDB есть индексы, причем полная их поддержка
Выборка
Предположим,нам надо выбрать все документы из определенной коллекции у которых значение city равно "Moscow". Например,с помощью SQL:
SELECT docs.title, loc.city FROM documents docs
INNER JOIN doc_location d_loc ON d_loc.doc_id = docs.doc_id
INNER JOIN location loc ON loc.loc_id = d_loc.loc_id
Как это делается в MongoDB, учитывая что все хранится в одном документе:
db.find({additional.location.city: "Moscow"});
По аналогии с JOIN мы также можем создавать ссылки на объекты других коллекций, и нам не придется делать отдельные запросы для получения связанных документов.
MongoDB хорошо справляется с большим количеством документов (миллионы), скорость выборки как и в SQL оптимизируется индексами, лимитами на количество получаемых документов за один запрос, как и в привычных реляционных БД индексы отрицательно влияют на скорость записи. Есть знакомая нам операция EXPLAIN, выполняющая те же функции что и в MySQL.
Запись
В SQL есть оператор INSERT для добавления и UPDATE для обновления записей. Запись в MongoDB Выполняется при помощи трех функций: insert - добавление, save и update - для обновление и добавление.
Примеры:
// $doc - произвольный документ
// Вставить документ
db.insert($doc);
// Обновить документ или добавить новый если его не существует, 2 варианта
db.save($doc);
// или
db.update({name: "Joe"}, $doc, true); // первый аргумент - условие, второй - новый документ, третий - вставка если исходный документ не найден
// Атомарная операция. Увеличить параметр counter на единицу
db.update({name: "Joe"}, {$inc : {counter : 1}});
MongoDB поддерживает несколько видов атомарных операций.
Мы можем использовать синхронный и асинхронный тип записи, асинхронный по умолчанию и он быстрее, т.к. приложению не приходится ждать ответа от сервера. MongoDB рекомендуют использовать при большом количестве одновременных запросов (более тысячи в секунду), особенно при большом количестве операций записи. Судя по многочисленным отзывам, именно быстрая запись одно из главных преимуществ этой БД.
Говоря о записи, стоит упомянуть о Capped Collections.
Дело в том что для обычных коллекций при записи в каждый документ неявно добавляется ключ _id, который хранит уникальный идентификатор документа. Также по этому ключу обязательно строится индекс. Коллекции имеют динамически изменяемый размер.
В коллекциях типа Capped все это обстоит несколько по другому. Ключ _id создается, но для ускорения записи индекс по нему не строится (по умолчанию). Также для таких коллекций предварительно устанавливается занимаемый ими объем, что тоже добавляет скорости. Но имеются определенные ограничения, например обновление документов разрешено только если размер документа не изменился, удаление документов не поддерживается, когда в коллекции заканчивается место новые документы вытесняют старые. При использовании Capped Collections скорость записи документов будет приближена к скорости записи системных логов. Можно использовать эту особенность, скажем, для систем ведения статистики, кеша, логов.
Агрегация
Допустим, перед нами стоит задача: мы имеем таблицу с комментариями, надо выбрать суммарное количество голосов за каждого автора.
В SQL это решается довольно просто, как-то так:
SELECT author, SUM(votes) FROM comments GROUP BY author;
В MongoDB реализация посложнее но более мощная. Называется она Map/Reduce. Говоря простым языком это альтернатива оператора GROUP BY и функций-агрегаторов (SUM, MAX, MIN, ...) для NoSQL (в нашем контексте). В общих чертах как происходит эта операция:
Сначала выбираются необходимые документы из БД. Т.к. это по сути обычный запрос на выборку, к нему подходят общие правила оптимизации подобных операций, такие как добавление индексов и лимитирование количества выбираемых данных.
На языке JavaScript создается функция map, которая проходит по каждомудокументу, найденному на предыдущем шаге, и собирает необходимую информацию для агрегации.
На том же самом JS создается функция reduce, которая получает данные маппинга, сгруппированные по какому-то определенному в функции map ключу. Происходит долгожданная агрегация данных.
При желании можно определить функцию finalize, которая будет запускаться после reduce и производить финальные действия над данными.
Получаем результат агрегации и используем его в нашем приложении
Постараемся понять как это происходит на примере (взято от сюда).
Структура документа
Предположим, что у нас есть коллекция комментариев следующей структуры (JSON):
{
text: "lmao! great article!",
author: 'kbanker',
votes: 2
}
В этом документе у нас есть комментарий автора "kbanker" с двумя голосами.
Идем по шагам.
Функция map (этап маппинга)
Как мы отметили ранее, map - это функция на языке JavaScript, которая проходит по каждому документу и собирает необходимую информацию в формате пары ключ -> значение. Генерируется эта пара при помощи вызова операции emit:
// Ключ - имя пользователя автора;
// Значение - количество голосов за текущий комментарий.
var map = function() {
emit(this.author, {votes: this.votes});
};
Функция Reduce (этап агрегации)
В каждый вызов функции reduce (по одному на ключ) поступает два аргумента: ключ и массив значений, собранные на этапе маппинга. В нашем примере для автора "kbanker" вызов reduce будет примерно таким:
reduce('kbanker', [{votes: 2}, {votes: 1}, {votes: 4}]);
Теперь опишем функцию для подсчета голосов:
var reduce = function(key, values) {
var sum = 0;
values.forEach(function(doc) {
sum += doc.votes;
});
return {votes: sum};
};
Вызовем в консоли две команды, первая - для запуска операции, вторая - для получения результатов:
var op = db.comments.mapReduce(map, reduce);
db[op.result].find()
На выходе мы получаем необходимые сгруппированные данные и можем использовать их в нашем приложении.