Неа, выкладывать свои ответы я не буду т.к. вопросы ребята не меняют, и было бы не правильно выкинуть всем на показ ответы на финальный экзамен, да и на домашку я тоже зря выкидывал xD скажу только то, что я успешно сдал этот экзамен, 8/10) домашка у меня тоже на 84%, так что в скором времени надеюсь получить сертификат)
суббота, 1 марта 2014 г.
MongoDB. Homework 6.
Всем привет, долго я тут не писал, особо не было времени, да и ждал, пока закончатся on-line курсы MongoDB, так как негоже выкладывать ответы до того, как придут результаты)
Which of the following statements are true about MongoDB replication. Check all that apply.
Homework: Homework 6.1
пятница, 7 февраля 2014 г.
Язык XML
Что такое XML
Сегодня XML может использоваться в любых приложениях, которым нужна структурированная информация - от сложных геоинформационных систем, с гигантскими объемами передаваемой информации до обычных "однокомпьютерных" программ, использующих этот язык для описания служебной информации. При внимательном взгляде на окружающий нас информационный мир можно выделить множество задач, связанных с созданием и обработкой структурированной информации, для решения которых может использоваться XML:
MongoDB. Homework 5.
Homework: Homework 5.1 (Hands On)
db.posts.aggregate([{$unwind:"$comments"},{$group:{_id:"$comments.author",count:{$sum:1}}},{$sort:{"count":-1}},{$limit:1},{"$project":{_id:0,'tag':"$_id","count":1}}])
Aggregation Fraemwork
Очень хорошую статью нашел на хабре, что существенно упростило работу, честно украденный пост вот от сюда.
Документация по новшествам расположена в соответствующем разделе официального сайта. Сначала давайте разберем то, как же это работает и какие конструкции MongoDB нам помогут.
Итак, самая главная сложность в выборке данных из MongoDB это работа с массивами и данными, содержащимися внутри каких-то отдельных элементов. Да, мы можем их выбрать как и в SQL, но не можем агрегировать по ним непосредственно при выборке. Новый фреймвок представляет собой декларативный способ работы с такими данными, основываясь на цепочке специальных операторов (их всего 7 штук). Данные выборки передаются из выхода одного оператора на вход другого, совсем как в unix. Отчасти при помощи новых операторов можно повторить уже существующие. Пусть коллекция test — это коллекция для хранения данных о людях. Стандартная выборка:
Документация по новшествам расположена в соответствующем разделе официального сайта. Сначала давайте разберем то, как же это работает и какие конструкции MongoDB нам помогут.
Итак, самая главная сложность в выборке данных из MongoDB это работа с массивами и данными, содержащимися внутри каких-то отдельных элементов. Да, мы можем их выбрать как и в SQL, но не можем агрегировать по ним непосредственно при выборке. Новый фреймвок представляет собой декларативный способ работы с такими данными, основываясь на цепочке специальных операторов (их всего 7 штук). Данные выборки передаются из выхода одного оператора на вход другого, совсем как в unix. Отчасти при помощи новых операторов можно повторить уже существующие. Пусть коллекция test — это коллекция для хранения данных о людях. Стандартная выборка:
среда, 5 февраля 2014 г.
MongoDB. Homework 4.
Homework: Homework 4.1
Индексы
В самом начале мы видели коллекцию system.indexes
, которая содержит информацию о всех индексах в нашей базе данных. Индексы в MongoDB работают схожим образом с индексами в реляционных базах данных: они ускоряют выборку и сортировку данных. Индексы создаются с помощью ensureIndex
:
db.unicorns.ensureIndex({name: 1});
И уничтожаются с помощью
dropIndex
:db.unicorns.dropIndex({name: 1});
Уникальный индекс может быть создан, если во втором параметре установить
unique
в true
:db.unicorns.ensureIndex({name: 1}, {unique: true});
Можно создавать индексы над вложенными полями (опять же, используя точечную нотацию), либо над массивами. Также можно создавать составные индексы:
db.unicorns.ensureIndex({name: 1, vampires: -1});
Порядок вашего индекса (1 для восходящего и -1 для нисходящего) не играет роли в случае с простым индексом, однако он может быть существенен при сортировке или лимитировании с применением составных индексов.
Моделирование данных
Давайте сменим тему и поговорим о более абстрактных концепциях MongoDB. Довольно просто объяснять новые термины и новый синтаксис. Гораздо сложнее говорить о моделировании в терминах новой парадигмы. Смысл в том, что большинство из нас привыкли пробовать любую новую технологию, моделируя реальные задачи. Мы поговорим об этом, но в конечном счете вы должны попрактиковаться и изучить реальный код.
Когда речь заходит о моделировании данных, то документ-ориентированные базы данных не настолько сильно отличаются от реляционных, как другие NoSQL-решения. Существующие различия не столь велики, однако это не уменьшает их важности.
MongoDB. Homework week 3.
Homework 3.1
Скачиваем файлик, импортим в монго и пишем код:
import java.net.UnknownHostException;
import java.util.Iterator;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
вторник, 4 февраля 2014 г.
MongoDB. Homework week 2.
Homework 2.1
Итак, скачиваем предложный файл тут, импортируем его вот этой командой в наш mongo:mongoimport -d students -c grades < grades.js
После чего нам надо найти студента у которого самый маленький score среди тех, кто набрал больше 65 баллов. Пишем:
db.grades.find({type:"exam",score:{"$gte:65}}).sort({"score":1}).limit(3)
в итоге первая строчка с "_id" = 22.
Ответ: 22.
Homework 2.2
Наконец программирование, наконец Java!
Нам предлагают файл, скачанный тут изменить так, чтобы наименьшее поле с homework для каждого студента была удалено. Сделать это посредством Java, итак, приступим. Вот мой вариант решения:
понедельник, 3 февраля 2014 г.
CRUD operation in Java Driver.
Теперь рассмотрим эти же операции для Java:
insert(DBObject)
Для добавления в коллекцию нужно создать объект BasicDBObject:
BasicDBObject doc = new BasicDBObject();
И, собственно добавление:
doc.put("username", "jyemin");
doc.put("birthDate", new Date(2345));
doc.put("programmer", true);
doc.put("age", 8);
doc.put("language", Arrays.asList("Java","C++"));
doc.put("address", new BasicDBObject("street", "20 Main").append("town","West").append("zip","56789"));
insert(DBObject)
Для добавления в коллекцию нужно создать объект BasicDBObject:
BasicDBObject doc = new BasicDBObject();
И, собственно добавление:
doc.put("username", "jyemin");
doc.put("birthDate", new Date(2345));
doc.put("programmer", true);
doc.put("age", 8);
doc.put("language", Arrays.asList("Java","C++"));
doc.put("address", new BasicDBObject("street", "20 Main").append("town","West").append("zip","56789"));
Quiz: Java Driver: Representing Documents
CRUD operation. 4 часть, надеюсь последняя.
Эту часть начнем с операциями над массивом, для начала создадим документ:
db.array.insert({_id:0, a:[1,2,3,4]})
Для изменения элемента используем функцию:
db.array.update({_id:0},{$set:{"a.2":5}})
после использования функции db.array.findOne():
{_id:0, a:[1,2,5,4]}
Для добавления нового элемента:
db.array.update({_id:0},{$push:{a:5}})
findOne: {_id:0, a:[1,2,5,4,6]}
Удаление элемента с конца:
db.array.update({_id:0},{$pop:{a:1}})
findOne: {_id:0, a:[1,2,5,4]}
Удаление элемента с начала:
db.array.update({_id:0},{$pop:{a:-1}})
findOne: {_id:0, a:[2,5,4]}
Добавление нескольких элементов в конец:
db.array.update({_id:0},{$pushAll:[7,8,9]})
findOne: {_id:0, a:[2,5,4,7,8,9]}
Удаление конкретного значения из массива:
db.array.update({_id:0},{$pull:5})
findOne: {_id:0, a:[2,4,7,8,9]}
Удаление нескольких элементов:
db.array.update({_id:0},{$pullAll:{a:[2,4,8]})
findOne: {_id:0, a:[7,9]}
Добавление в конец:
db.array.update({_id:0},{$addToSet{a:5})
findOne: {_id:0, a:[7,9,5]}
При повторе последнего действия несколько раз ничего не произойдет, добавляет значение только единожды!
db.array.insert({_id:0, a:[1,2,3,4]})
Для изменения элемента используем функцию:
db.array.update({_id:0},{$set:{"a.2":5}})
после использования функции db.array.findOne():
{_id:0, a:[1,2,5,4]}
Для добавления нового элемента:
db.array.update({_id:0},{$push:{a:5}})
findOne: {_id:0, a:[1,2,5,4,6]}
Удаление элемента с конца:
db.array.update({_id:0},{$pop:{a:1}})
findOne: {_id:0, a:[1,2,5,4]}
Удаление элемента с начала:
db.array.update({_id:0},{$pop:{a:-1}})
findOne: {_id:0, a:[2,5,4]}
Добавление нескольких элементов в конец:
db.array.update({_id:0},{$pushAll:[7,8,9]})
findOne: {_id:0, a:[2,5,4,7,8,9]}
Удаление конкретного значения из массива:
db.array.update({_id:0},{$pull:5})
findOne: {_id:0, a:[2,4,7,8,9]}
Удаление нескольких элементов:
db.array.update({_id:0},{$pullAll:{a:[2,4,8]})
findOne: {_id:0, a:[7,9]}
Добавление в конец:
db.array.update({_id:0},{$addToSet{a:5})
findOne: {_id:0, a:[7,9,5]}
При повторе последнего действия несколько раз ничего не произойдет, добавляет значение только единожды!
воскресенье, 2 февраля 2014 г.
CRUD operation. Часть 3
Разберем немного действий с курсором.
db.people.find()
Как мы знаем, с помощью этой функции выводятся все документы существующие в people коллекции. Присвоим переменной cur значение этой функции:
cur = db.people.find()
Теперь мы можем выполнять действия с курсором, например:
cur.hasNext() - проверяет, есть ли следующий элемент и возвращает true/false
cur.next() - возвращает текущий элемент и передвигает курсор на одно значение вперед.
cur.limit(5) - лимит на количество выводимых документов
cur.sort({name:-1}) - сортировка по name полю, по возрастанию
cur.sort({name:-1}).limit(3) - сортировка + лимит
cur.sort({name:-1}).limit(3).skip(2) - сортировка +лимит, вывод начиная с 3 документа
Recall the documents in the scores collection:
db.people.find()
Как мы знаем, с помощью этой функции выводятся все документы существующие в people коллекции. Присвоим переменной cur значение этой функции:
cur = db.people.find()
Теперь мы можем выполнять действия с курсором, например:
cur.hasNext() - проверяет, есть ли следующий элемент и возвращает true/false
cur.next() - возвращает текущий элемент и передвигает курсор на одно значение вперед.
cur.limit(5) - лимит на количество выводимых документов
cur.sort({name:-1}) - сортировка по name полю, по возрастанию
cur.sort({name:-1}).limit(3) - сортировка + лимит
cur.sort({name:-1}).limit(3).skip(2) - сортировка +лимит, вывод начиная с 3 документа
Quiz: Querying, Cursors
{ "_id" : ObjectId("50844162cb4cf4564b4694f8"), "student" : 0, "type" : "exam", "score" : 75 }Write a query that retrieves exam documents, sorted by score in descending order, skipping the first 50 and showing only the next 20.
CRUD operation. Часть 2.
Продолжение темы CRUD в MongoDB. Постараюсь писать более форматировано)
Использование $or:
How would you find all documents in the scores collection where the score is less than 50 or greater than 90?
Использование $or:
db.people.find({$or:[{name:{$regex:"e$"}},{age:{$exists:true}}]});
Происходит выборка документов, в которых поле name содержит "e" в конце строки или содержит поле age.
Quiz: Using $or
db.scores.find({$or:[{score:{$lt:50}},{score:{$gt:90}}]})
Использование $and:
db.people.find({$and:[{name:{$regex:"e$"}},{age:{$exists:true}}]});
Происходит выборка документов, в которых поле name содержит "e" в конце строки и присутствует поле age.
Quiz: Using $and
CRUD operation. Часть 1.
CRUD операции(Create, Read, Update, Delete) - тут думаю не нужно вдаваться в подробности, скажу только то, что они имеют такую же смысловую нагрузку как и SQL базах данных, а по их названию можно догадаться, для чего они нужны. Лучше разберем их синтаксис.
Я уже вскользь затрагивал такие команды, как use db, show collections, db.collection.find(), db.collection.findOne(), сейчас чуть подробнее разберу, для чего они нужны.
Итак:
mongod - запускаем наш MongoDB сервер.
mongo - наша оболочка, через которую мы будем производить все операции на начальном этапе.
use db - вместо db указываем любую базу данных с которой будем работать
show collections - показывает все существующие коллекции в нашей базе данных
db - показывает, в какой базе данных мы находимся
Еще можно сделать вот так:
Я уже вскользь затрагивал такие команды, как use db, show collections, db.collection.find(), db.collection.findOne(), сейчас чуть подробнее разберу, для чего они нужны.
Итак:
mongod - запускаем наш MongoDB сервер.
mongo - наша оболочка, через которую мы будем производить все операции на начальном этапе.
use db - вместо db указываем любую базу данных с которой будем работать
show collections - показывает все существующие коллекции в нашей базе данных
db - показывает, в какой базе данных мы находимся
Еще можно сделать вот так:
суббота, 1 февраля 2014 г.
MongoDB. Homework week 1.
Вот мы и добрались до домашнего задания первой недели!
Homework 1.1
Нам предлагают установить mongoDB, скачать архив с файлами, распаковать и использовать mongorestore. После успешного выполнения этих действий, пишем:
mongo
use m101
db.hw1.findOne()
Барабанная дробь!
Homework 1.1
Нам предлагают установить mongoDB, скачать архив с файлами, распаковать и использовать mongorestore. После успешного выполнения этих действий, пишем:
mongo
use m101
db.hw1.findOne()
Барабанная дробь!
JSON
JSON (JavaScript Object Notation) - простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript, определенного в стандарте ECMA-262 3rd Edition - December 1999. JSON - текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.
- Коллекция пар ключ/значение. В разных языках, эта концепция реализована как объект, запись, структура, словарь, хэш, именованный список или ассоциативный массив.
- Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
Spark: POST запросы
Если необходимо передать на веб-сервер большой объем данных, например, текст сообщения или файл, используют POST-запрос. В этом типе запроса параметры помещаются в тело HTTP-запроса, а размер передаваемых данных в байтах указывается в заголовке Content-Length:
POST /enter HTTP/1.1 <Различные заголовки> Content-Length: 27 <Различные заголовки> login=admin&password=qwertyТаким образом, в URL передаваемые параметры не видны. Простым способом сформировать POST-запрос не получится, они в основном генерируются с помощью HTML-форм. Что же касается PHP, то для POST-параметров выделен глобальный массив $_POST, доступ к которому аналогичен массиву $_GET.
Spark: GET запросы
Сначала разберем, что такое GET запрос.
GET-запрос — это самый распространенный вид HTTP-запроса. При помощи него происходит запрос браузером любого файла веб-сервера. HTTP-запрос типа GET состоит только из HTTP-заголовков, тело у него отсутствует.
При помощи GET-запроса можно передать веб-серверу параметры — некоторую информацию. Например, если на сайте предусмотрена авторизация пользователей, то с помощью параметров можно передавать имя пользователя и пароль для проверки. Рассмотрим механизм передачи параметров с помощью GET-запроса.
В первой строке запроса после ключевого слова GET помещается путь к запрашиваемому документу. Если в пути встречается знак вопроса, то принято считать, что в этом месте путь заканчивается, а за ним начинаются GET-параметры этого запроса:
GET-запрос — это самый распространенный вид HTTP-запроса. При помощи него происходит запрос браузером любого файла веб-сервера. HTTP-запрос типа GET состоит только из HTTP-заголовков, тело у него отсутствует.
При помощи GET-запроса можно передать веб-серверу параметры — некоторую информацию. Например, если на сайте предусмотрена авторизация пользователей, то с помощью параметров можно передавать имя пользователя и пароль для проверки. Рассмотрим механизм передачи параметров с помощью GET-запроса.
В первой строке запроса после ключевого слова GET помещается путь к запрашиваемому документу. Если в пути встречается знак вопроса, то принято считать, что в этом месте путь заканчивается, а за ним начинаются GET-параметры этого запроса:
GET /examples/test.html?параметры HTTP/1.1GET-параметр имеет формат имя_параметра=значение_параметра, сами параметры разделяются знаком &. Пример GET-запроса с двумя параметрами:
GET /enter?login=admin&password=qwerty HTTP/1.1
А теперь все вместе!
MongoDB, Freemarker, Spark.
Итак, осталось подытожить все, что я делал до этого.Начнем с запуска MongoDB сервера(mongod), и самого Mongo shell(mongo). После чего пишем use test (test - название нашей базы данных) в окне с запущенным shell. Просмартиваем все коллекции командой show collections, выбираем любую, предположим у меня есть коллекция mecollection и добавляем один элемент командой db.mycollection.save({'name':'Dmitry'}). Теперь наша коллекция хранит одно значение name:Dmitry(одно значение, это если до этого ваша коллекция была пустая) Просмотреть элементы коллекции можно командой db.mycollection.find() или db.mycollection.findOne() вывод элемента, на котором стоит курсор.
Теперь мы можем вернуться в eclipse(NetBeans или Intelij Idea, не знаю, что там у вас).
Использование Spring & Freemarker
Тут все довольно просто, нам нужно объединить 2 предыдущих класса, вот что получится(файл hello.ftl оставляем прежним):
import freemarker.template.Configuration;
import freemarker.template.Template;
import spark.Request;
import spark.Response;
import spark.Route;
import spark.Spark;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
public class HelloWorldSparkFreemarkerStyle {
public static void main(String[] args) {
final Configuration configuration = new Configuration();
configuration.setClassForTemplateLoading(
HelloWorldSparkFreemarkerStyle.class, "/");
Spark.get(new Route("/") {
@Override
public Object handle(final Request request,
final Response response) {
StringWriter writer = new StringWriter();
try {
Template helloTemplate = configuration.getTemplate("hello.ftl");
Map<String, Object> helloMap = new HashMap<String, Object>();
helloMap.put("name", "Freemarker");
helloMap.put("word","MongoDB");
helloTemplate.process(helloMap, writer);
} catch (Exception e) {
halt(500);
e.printStackTrace();
}
return writer;
}
});
}
}
FreeMarker - еще одна полезная штука.
FreeMarker — компилирующий обработчик шаблонов, написанный на Java, один из инструментов, позволяющих отделить бизнес-логику и данные от представления в духе концепции Model-view-controller. Используется преимущественно при разработке web-приложений с использованием Java-сервлетов, также может использоваться для вывода текста в других случаях: генерация CSS, исходного кода Java и т. д. В отличие от JSP FreeMarker не является зависимым от архитектуры сервлета или от протокола HTTP. Таким образом шаблонизатор может использоваться не только в web-проектах. FreeMarker является свободным ПО.
Например, у нас есть код:
Например, у нас есть код:
<html> <body> <p>Hello ${name}! You have the following messages: <#list messages as m> <p><b>${m.from}:</b> ${m.body}</p> </#list> </body> </html>
Spark for Java
Итак, краткий обзор Spark. Очень краткий, т.к. все, что я о нем знаю, это то, что Spark небольшой фреймворк для Java, с помощью которого можно создавать web- приложения, без развертывания какого либо сервера, то есть достаточно добавить в pom.xml файл dependency:
<dependency> <groupId>com.sparkjava</groupId> <artifactId>spark-core</artifactId> <version>1.1.1</version> </dependency>
пятница, 31 января 2014 г.
Maven, POM и с чем их едят.
Apache Maven — фреймворк для автоматизации сборки проектов, специфицированных на XML-языке POM (англ. Project Object Model).
Слово maven происходит из языка Идиш и означает примерно «собиратель знания».
Maven, в отличие от другого сборщика проектов Apache Ant, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняет через плагины.
Слово maven происходит из языка Идиш и означает примерно «собиратель знания».
Maven, в отличие от другого сборщика проектов Apache Ant, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняет через плагины.
Установка MongoDB
Я бы мог написать пошагово, как правильно ее устанавливать, но лучше один раз увидеть, чем сто раз прочитать.
Что такое Mongo DB?
Mongo DB — высокопроизводительная документо-ориентированная база данных. Особенности этой СУБД:
- Документное хранилище, не требующее создания схем (таблиц)
- Запросы в стиле JSON (очень удобно)
- Широкий набор (атомарных) операций над данными (условный поиск, сложная вставка/обновление и т.п.)
- Разные типы данных (поддержка массивов)
- Поддержка индексов (B-Tree)
- Автовосстановление, шардинг и репликация в коробке
- Профилирование, хранение больших объектов, административный интерфейс, серверные функции, Map/Reduce и многое другое
Что такое NoSQL базы данных?
NoSQL (not only SQL), в информатике — термин, обозначающий ряд подходов, направленных на реализацию хранилищ баз данных, имеющих существенные отличия от моделей, используемых в традиционных реляционных СУБД с доступом к данным средствами языка SQL. Применяется к базам данных, в которых делается попытка решить проблемы масштабируемости и доступности за счёт атомарности и согласованности данных.
Вот что говорит Wikipedia про NoSQL.
Вот что говорит Wikipedia про NoSQL.
MongoDB education
Охохо, вот и мой блог по программированию.
Собственно, что с подвигло меня заняться этой неблагодарной деятельностью?) При изучении Java возникали трудности с запоминанием некоторых вещей, в виду того, что они были просто не интересны и им не уделялось достаточно времени на повторение. Сейчас для учебы и работы, ну и просто интереса ради, а может быть для лучшей усвояемости материала буду все конспектировать. Так что этот блог рассчитан не для широкой аудитории, а для меня любимого. Хотя, если кому либо он будет интересен, как говорится, u are welcome! Итак, на сегодня и на ближайшие 3 недели будет актуальны такие темы, как NoSQL базы данных, XML и XSLT ну и конечно же Java и ее технологии. Частенько информация будет наглым образом содрана с других сайтов и книг, текст может содержать ошибки, за что заранее извиняюсь перед теми, кто будет это читать.
Подписаться на:
Сообщения (Atom)