Play Mongodb

28
Play with mongodb By: Wladislaw Merezhko

description

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

Transcript of Play Mongodb

Page 1: Play Mongodb

Play with mongodb

By: Wladislaw Merezhko

Page 2: Play Mongodb

Mongodb is

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

Page 3: Play Mongodb

Філософія Mongodb

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

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

Page 4: Play Mongodb

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

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

Page 5: Play Mongodb

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

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');

Page 6: Play Mongodb

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

{ "_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"}

Page 7: Play Mongodb

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

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

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

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

}}

Page 8: Play Mongodb

Запити

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

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

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

karma : 1.0 });

Page 9: Play Mongodb

Запити

> 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 }

Page 10: Play Mongodb

Запити

SELECT j FROM things WHERE x=4

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

Page 11: Play Mongodb

Запити

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

> db.posts.update({_

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

},{

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

});

Page 12: Play Mongodb

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

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

Page 13: Play Mongodb

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

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

Page 14: Play Mongodb

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

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

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

Page 15: Play Mongodb

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

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

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

Page 16: Play Mongodb

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

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

Page 17: Play Mongodb

Play (1.2.3) is

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

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

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

Page 18: Play Mongodb

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

app - controllers - modules - viewsconfdata.ymllibmodulespublictest

Page 19: Play Mongodb

PlayMorphia is

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

Page 20: Play Mongodb

Приклад

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

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

Page 21: Play Mongodb

Приклад

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

).asList();

● is exactly the same as

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

).asList();

Page 22: Play Mongodb

Приклад

@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; }}

Page 23: Play Mongodb

Приклад

// 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;}

Page 24: Play Mongodb

Приклад

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

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

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

MTB mtb = new MTB("[email protected]", "John", "Doe");

mtb.save();

Page 25: Play Mongodb

Приклад

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

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

).asList();

Page 26: Play Mongodb

Приклад

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

).asList();

Page 27: Play Mongodb

Запитання?

Page 28: Play Mongodb

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