Play Mongodb

Post on 26-Jun-2015

482 views 0 download

Tags:

description

Short presentation about mongodb and playframework.Коротка презентація про монгодб та Playframework.

Transcript of Play Mongodb

Play with mongodb

By: Wladislaw Merezhko

Mongodb is

● NoSQL● Простота та потужність ● Документ орієнтована (json/bson)● Вбудовані документи та масиви● Динамічна схема● Простота масштабування ● Повна підтримка індексації

Філософія Mongodb

● Простота розробки● Горизонтальне масштабування● Документна модель (JSON) ● Працювати будь-де● Чотири основні риси

- гнучкість- потужність- швидкодія- простота у використанні

Документи vs Таблиць

● Документи зберігаються у колекціях● Колекції входять до складу баз даних● Колекції подібні до таблиць● Документи до записів у таблиці● Документи можуть мати різні поля

Звичайна таблиця

CREATE TABLE customer (First_Name char(50), Last_Name char(50), Date_of_Birth date);

INSERT INTO customer (First_Name, Last_Name, Date_of_Birth) VALUES ('Jean', 'Dumont', '1963-01-22'),('Franck', 'Pellerin', '1983-09-19'),('Dustin', 'Gannon', '1982-11-12');

Звичайна колекція

{ "_id": ObjectId("4efa8d2b7d284dad101e4bc9"),

"Last Name": "DUMONT", "First Name": "Jean", "Date of Birth": "01-22-1963"},

{ "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),

"Last Name": "PELLERIN", "First Name": "Franck", "Date of Birth": "09-19-1983", "Address": "1 chemin des Loges", "City": "VERSAILLES"}

Звичайна колекція

{"_id":ObjectId("4efa8d2b7d284dad101e4bc7"),

"Last Name": "PELLERIN", "First Name": "Franck", "Date of Birth": "09-19-1983", "Address": {

"Street": "1 chemin des Loges", "City": "VERSAILLES"

}}

Запити

● Створити новий документу у новій колекції

> db.users.insert({ _id : "alex", name: {

first:"Alex",last:"Benisson" },

karma : 1.0 });

Запити

> j = {name: "mongo"}; {"name":"mongo"}> t = { x : 3 }; { "x" : 3 }> db.things.save(j); > db.things.save(t);> db.things.find(); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

Запити

SELECT j FROM things WHERE x=4

>db.things.find({x:4},{j:true});{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 } ...

Запити

● Атомарна операція зміни

> db.posts.update({_

id:ObjectId("4e77b3b8a3...a"),voters: { $nin: "calvin" }

},{

votes: { $inc: 1 },voters: { $push: "calvin" }

});

Реплікації та шардинг

● Два види реплікацій

Реплікації та шардинг

● Надійне сховище

Типове застосування

● Найкраще підходить для

● Зтиснення та зберігання логів● CMS системи● Електрона комерція● Ігри● Мобільні платформи● Аналітика та статус у реальному часі

Типове застосування

● Погано підходить для

● Великих та складних транзакційних систем● Проблем вимагаючих реляційних зв’язків● Проблем потребуючих SQL

Проекти що використовуют

● Craigslist● MTV Networks’ next-generation CMS● Intuit● bit.ly● Wordnik● Harmony

Play (1.2.3) is

● Чиста альтернатива роздутому джава інтерпрайз стеку

● Фокусується на продуктивній розробці● Ідеально підходить для аджайл ● Дозволяє використовувати інструменти

розробки та бібліотеки● http://www.playframework.org

Структура проекту

app - controllers - modules - viewsconfdata.ymllibmodulespublictest

PlayMorphia is

● Інструмент інтеграції монго у плей● Швидкодія і простота● POJO● Вбудовані обєкти та посилання● GridFS● Атомарні операції

Приклад

● $eq● $ne● $gt, $lt, $gte, $lte● $in● $nin

● $size● $type● $elemMatch● $exists● $all

Приклад

List<User> users = User.q().filter("department eq", "IT"

).asList();

● is exactly the same as

List<User> users = User.q().filter("department", "IT"

).asList();

Приклад

@Entity public class MTB extends Model { public String email; public String password; public String fullname; public boolean isAdmin; public MTB(String email, String password, String fullname){ this.email = email; this.password = password; this.fullname = fullname; }}

Приклад

// define the embedded class@Embedded public class Address { public String streetNo; public String state; …} // define the embedding class@Entity public class Customer extends Model { @Embedded public Address address;}

Приклад

● Отримати всі

List<MTB> mtbs = MTB.find().asList();

● Створити новий

MTB mtb = new MTB("jdow@email.com", "John", "Doe");

mtb.save();

Приклад

List<User> johns = User.q().filter("firstName",

Pattern.compile("john",Pattern.CASE_INSENSITIVE)

).asList();

Приклад

List<User> users = Users.find( "address.street, address.city, address.country","FuXingJie", "DuJiangYan", "China"

).asList();

Запитання?

Дякую за увагу