
- •Задачи интеллектуального анализа: кластеризация
- •Распределенные вычисления на примере 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;
- •Распределенные базы данных
- •Определение рбд (определение Дейта)
- •Основные характеристики.
- •Основные принципы.
- •Типы распределённых баз данных.
- •Технологии распределенной обработки информации
- •Проблемы и особенности рбд.
- •Программное обеспечения для интеллектуального анализа данных: kxen
8. Соответствие между sql и MongoDb
Приведем список соответствий MySQL запросов и запросов MongoDb.
Простые запросы на выборку
SELECT * FROM articles.
SELECT * FROM articles WHERE id = 12.
SELECT * FROM articles WHERE id IN (1, 2, 3, 4, 5).
SELECT * FROM articles WHERE author_id NOT 12.
SELECT * FROM articles WHERE id NOT IN (1, 2, 3, 4, 5).
SELECT * FROM articles WHERE voters > 5.
SELECT * FROM articles WHERE voters > 5 AND voters < 20.
SELECT * FROM articles WHERE voters < 5 OR voters > 20.
SELECT * FROM articles WHERE created_at <= '2010-01-20 00:00:00'.
SELECT * FROM articles WHERE created_at BETWEEN '2009-01-25 00:00:00' AND'2010-01-25 23:59:59'.
SELECT * FROM articles WHERE voters > 5 LIMIT 1.
SELECT title, body FROM articles.
SELECT * FROM articles LIMIT 1.
SELECT * FROM articles LIMIT 100.
SELECT * FROM articles LIMIT 10, 10.
SELECT * FROM articles ORDER BY created_at DESC.
SELECT * FROM articles ORDER BY created_at ASC.
SELECT * FROM articles ORDER BY created_at DESC, title ASC.
SELECT COUNT(*) AS count FROM articles.
SELECT COUNT(*) AS count FROM articles WHERE voters > 5.
SELECT DISTINCT category_id FROM articles.
SELECT DISTINCT category_id FROM articles WHERE voters > 0.
Запросы на выборку с регулярными выражениями
SELECT * FROM articles WHERE title LIKE '% Mongo%'.
SELECT * FROM articles WHERE title NOT LIKE 'Mongo %'.
SELECT * FROM articles WHERE title REGEXP "^Mongo(DB|Mapper)".
SELECT * FROM articles WHERE title NOT REGEXP "^Mongo(DB|Mapper)".
Запросы на выборку с группировками
SELECT COUNT(id) AS articles_count, SUM(rating) AS rating_sum,AVG(rating) AS rating_avg, category_id FROM articles GROUP BY category_id.
SELECT COUNT(id) AS articles_count, SUM(rating) AS rating_sum,AVG(rating) AS rating_avg, category_id FROM articles WHERE author_id = 12GROUP BY category_id.
SELECT COUNT(id) AS articles_count, SUM(rating) AS rating_sum,AVG(rating) AS rating_avg, category_id, author_id FROM articles GROUP BYcategory_id, author_id
SELECT COUNT(id), CASE WHEN (LENGTH(body) - LENGTH(REPLACE(body, ' ','')) + 1) < 100 THEN 'small' WHEN ((LENGTH(body) -LENGTH(REPLACE(body, ' ', '')) + 1) > 100 && (LENGTH(body) -LENGTH(REPLACE(body, ' ', '')) + 1) < 500) THEN 'medium' WHEN(LENGTH(body) - LENGTH(REPLACE(body, ' ', '')) + 1) > 500 THEN'big' END AS size FROM entities GROUP BY size
Запросы на выборку с объединением таблиц
SELECT a.*, c.* FROM articles a INNER JOIN categories c ON a.category_id= c.id
SELECT a.*, c.* FROM articles a INNER JOIN categories c ON a.category_id= c.id WHERE a.popular = 1
SELECT a.*, c.* FROM articles a INNER JOIN categories c ON a.category_id= c.id WHERE c.shared = 1
Информация о запросе
EXPLAIN SELECT * FROM articles WHERE popular = 1
Создание, изменение и удаление документов
INSERT INTO articles (title, body, rating, voters, category_id,author_id, created_at) VALUES ('Заголовок', 'Статья', 0, 0, 10, 12,'2010-01-25 18:31:04').
UPDATE articles SET title = 'Заголовок' WHERE id = 5.
UPDATE articles SET title = 'Заголовок' WHERE id IN (1, 2, 3).
UPDATE articles SET popular = 1 WHERE voters > 10.
UPDATE articles SET voters = voters + 1 WHERE id = 5
UPDATE articles SET voters = voters - 1 WHERE id = 5
UPDATE articles SET voters = voters + 1 WHERE id IN (1, 2, 3)
UPDATE articles SET voters = voters - 1 WHERE category_id = 12 ANDauthor_id = 23
DELETE FROM articles
DELETE FROM articles WHERE id = 5
DELETE FROM articles WHERE id IN (1, 2, 3)
DELETE FROM articles WHERE popular = 0
SQL Terms, Functions, and Concepts |
MongoDB Aggregation Operators |
WHERE |
$match |
GROUP BY |
$group |
HAVING |
$match |
SELECT |
$project |
ORDER BY |
$sort |
LIMIT |
$limit |
SUM() |
$sum |
COUNT() |
$sum |
join |
No direct corresponding operator; however, the $unwind operator allows for somewhat similar functionality, but with fields embedded within the document. |
Схема SQL базы данных
CREATE TABLE articles ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL, body text DEFAULT NULL, voters int(11) DEFAULT 0, rating int(11) DEFAULT 0, category_id int(11) DEFAULT NULL, author_id int(11) DEFAULT NULL, popular tiniint(1) DEFAULT 0, created_at datetime DEFAULT NULL ) CREATE TABLE categories ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL, shared tiniint(1) DEFAULT 0, created_at datetime DEFAULT NULL ) CREATE TABLE authors ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, created_at datetime DEFAULT NULL )
Примеры документов MongoDB
//коллеция articles {_id: 4b5616a2b34fb4071f000018, title: "Заголовок", body: "Статья", voters: 12, rating: 6, category_id: 4b5616a2b34fb4071f000089, author_id: 4b5616a2b34fb4071f000123, popular: true, created_at: ""} //Коллекция categories {_id: 4b5616a2b34fb4071f000089, title: "Тема", shared: true, created_at: ""} //Коллекция authors {_id: 4b5616a2b34fb4071f000123, name: "Undr", created_at: ""}
Классы моделей с использованием MongoMapper
class Article include MongoMapper::Document key :title, String key :body, String key :voters, Integer key :rating, Integer key :category_id, ObjectId, :require => true key :author_id, ObjectId, :require => true key :popular, Boolean key :created_at, Time belongs_to :category belongs_to :author end class Category include MongoMapper::Document key :title, String key :shared, Boolean key :created_at, Time has_many :articles end class Author include MongoMapper::Document key :name, String key :created_at, Time has_many :articles end
Версии библиотек
MongoDB – db version v1.2.2, pdfile version 4.5 (Fri Jan 29 19:13:17 git version: 8a4fb8b1c7cb78648c55368d806ba35054f6be54)
Ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
Rails 2.3.5
gem mongo 0.18.2
gem mongo_mapper 0.6.10
Сходства и различия в написании кода:
SQL Example |
MongoDB Example |
Description |
SELECT COUNT(*) AS count FROM orders |
db.orders.aggregate( [ { $group: { _id: null, count: { $sum: 1 } } } ] ) |
Count all records from orders |
SELECT SUM(price) AS total FROM orders |
db.orders.aggregate( [ { $group: { _id: null, total: { $sum: "$price" } } } ] ) |
Sum the price field from orders |
SELECT cust_id, SUM(price) AS total FROM orders GROUP BY cust_id |
db.orders.aggregate( [ { $group: { _id: "$cust_id", total: { $sum: "$price" } } } ] ) |
For each unique cust_id, sum the price field. |
SELECT cust_id, SUM(price) AS total FROM orders GROUP BY cust_id ORDER BY total |
db.orders.aggregate( [ { $group: { _id: "$cust_id", total: { $sum: "$price" } } }, { $sort: { total: 1 } } ] ) |
For each unique cust_id, sum the price field, results sorted by sum. |
SELECT cust_id, ord_date, SUM(price) AS total FROM orders GROUP BY cust_id, ord_date |
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: "$ord_date" }, total: { $sum: "$price" } } } ] ) |
For each unique cust_id, ord_date grouping, sum the price field. |
SELECT cust_id, count(*) FROM orders GROUP BY cust_id HAVING count(*) > 1 |
db.orders.aggregate( [ { $group: { _id: "$cust_id", count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } } ] ) |
For cust_id with multiple records, return thecust_id and the corresponding record count. |
SELECT cust_id, ord_date, SUM(price) AS total FROM orders GROUP BY cust_id, ord_date HAVING total > 250 |
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: "$ord_date" }, total: { $sum: "$price" } } }, { $match: { total: { $gt: 250 } } } ] ) |
For each unique cust_id, ord_date grouping, sum the price field and return only where the sum is greater than 250. |
SELECT cust_id, SUM(price) as total FROM orders WHERE status = 'A' GROUP BY cust_id |
db.orders.aggregate( [ { $match: { status: 'A' } }, { $group: { _id: "$cust_id", total: { $sum: "$price" } } } ] ) |
For each unique cust_id with status A, sum theprice field. |
SELECT cust_id, SUM(price) as total FROM orders WHERE status = 'A' GROUP BY cust_id HAVING total > 250 |
db.orders.aggregate( [ { $match: { status: 'A' } }, { $group: { _id: "$cust_id", total: { $sum: "$price" } } }, { $match: { total: { $gt: 250 } } } ] ) |
For each unique cust_id with status A, sum theprice field and return only where the sum is greater than 250. |
SELECT cust_id, SUM(li.qty) as qty FROM orders o, order_lineitem li WHERE li.order_id = o.id GROUP BY cust_id |
db.orders.aggregate( [ { $unwind: "$items" }, { $group: { _id: "$cust_id", qty: { $sum: "$items.qty" } } } ] ) |
For each unique cust_id, sum the corresponding line item qty fields associated with the orders. |
9.Практическое использование( на примере опыта использования MongoDB для подсчета статистики) представлено на http://redhotchilipython.com/posts/2011-06-03-mongodb-indexes-experience.html
Заключение
MongoDB поддерживает хранение документов в JSON-подобном формате, имеет достаточно гибкий язык для формирования запросов, может создавать индексы для различных хранимых атрибутов, эффективно обеспечивает хранение больших бинарных объектов, поддерживает журналирование операций по изменению и добавлению данных в БД, может работать в соответствии с парадигмой Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций. В MongoDB имеются встроенные средства по обеспечению шардинга (распределение набора данных по серверам на основе определенного ключа), комбинируя который репликацией данных можно построить горизонтально масштабируемый кластер хранения, в котором отсутствует единая точка отказа (сбой любого узла не сказывается на работе БД), поддерживается автоматическое восстановление после сбоя и перенос нагрузки с вышедшего из строя узла. Расширение кластера или преобразование одного сервера в кластер производится без остановки работы БД простым добавлением новых машин.